Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9402f2a

Browse files
Reduce code duplication in PackratParsersTest
Extract common code that parses strings and extracts results into helper methods. In test1 and test2 I named the helper method `check` because it checks if expression-evaluating parser calculates the correct result. In test3, we are interested in parsing result (Success or Failure) thus helper methods are named `assertSuccess` and `assertFailure`.
1 parent 9828c47 commit 9402f2a

File tree

1 file changed

+48
-28
lines changed

1 file changed

+48
-28
lines changed

‎src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala‎

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scala.util.parsing.combinator
22

33
import org.junit.Test
44
import org.junit.Assert.assertEquals
5+
import org.junit.Assert.assertTrue
56

67
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
78

@@ -16,14 +17,19 @@ class PackratParsersTest {
1617
case Success(a,_) => a
1718
case NoSuccess(a,_) => sys.error(a)
1819
}
20+
def check(expected: Int, expr: String): Unit = {
21+
val parseResult = head(new lexical.Scanner(expr))
22+
val result = extractResult(parseResult)
23+
assertEquals(expected, result)
24+
}
1925

20-
assertEquals(1,extractResult(head(new lexical.Scanner("1"))))
21-
assertEquals(3, extractResult(head(new lexical.Scanner("1+2"))))
22-
assertEquals(5, extractResult(head(new lexical.Scanner("9-4"))))
23-
assertEquals(81, extractResult(head(new lexical.Scanner("9*9"))))
24-
assertEquals(4, extractResult(head(new lexical.Scanner("8/2"))))
25-
assertEquals(37, extractResult(head(new lexical.Scanner("4*9-0/7+9-8*1"))))
26-
assertEquals(9, extractResult(head(new lexical.Scanner("(1+2)*3"))))
26+
check(1,"1")
27+
check(3, "1+2")
28+
check(5, "9-4")
29+
check(81, "9*9")
30+
check(4, "8/2")
31+
check(37, "4*9-0/7+9-8*1")
32+
check(9, "(1+2)*3")
2733
}
2834

2935
@Test
@@ -35,14 +41,19 @@ class PackratParsersTest {
3541
case Success(a,_) => a
3642
case NoSuccess(a,_) => sys.error(a)
3743
}
44+
def check(expected: Int, expr: String): Unit = {
45+
val parseResult = head(new lexical.Scanner(expr))
46+
val result = extractResult(parseResult)
47+
assertEquals(expected, result)
48+
}
3849

39-
assertEquals(1, extractResult(head(new lexical.Scanner("1"))))
40-
assertEquals(3, extractResult(head(new lexical.Scanner("1+2"))))
41-
assertEquals(81, extractResult(head(new lexical.Scanner("9*9"))))
42-
assertEquals(43, extractResult(head(new lexical.Scanner("4*9+7"))))
43-
assertEquals(59, extractResult(head(new lexical.Scanner("4*9+7*2+3*3"))))
44-
assertEquals(188, extractResult(head(new lexical.Scanner("4*9+7*2+3*3+9*5+7*6*2"))))
45-
assertEquals(960, extractResult(head(new lexical.Scanner("4*(9+7)*(2+3)*3"))))
50+
check(1, "1")
51+
check(3, "1+2")
52+
check(81, "9*9")
53+
check(43, "4*9+7")
54+
check(59, "4*9+7*2+3*3")
55+
check(188, "4*9+7*2+3*3+9*5+7*6*2")
56+
check(960, "4*(9+7)*(2+3)*3")
4657
}
4758

4859
@Test
@@ -59,21 +70,30 @@ class PackratParsersTest {
5970
val cs1 = cs.map(_.name)
6071
new ~(new ~(as1, bs1), cs1)
6172
}
73+
def assertSuccess(expected1: List[Symbol], expected2: List[Symbol], expected3: List[Symbol],
74+
input: String): Unit = {
75+
val expected = threeLists(expected1, expected2, expected3)
76+
val parseResult = head(new lexical.Scanner(input))
77+
val result = extractResult(parseResult)
78+
assertEquals(expected, result)
79+
}
6280

63-
val expected1 = threeLists(List('a, 'b), List('a), List('b, 'c))
64-
assertEquals(expected1, extractResult(head(new lexical.Scanner("a b c"))))
65-
val expected2 = threeLists(List('a, 'a, 'b, 'b), List('a, 'a), List('b, 'b, 'c, 'c))
66-
assertEquals(expected2, extractResult(head(new lexical.Scanner("a a b b c c"))))
67-
val expected3 = threeLists(List('a, 'a, 'a, 'b, 'b, 'b), List('a, 'a, 'a), List('b, 'b, 'b, 'c, 'c, 'c))
68-
assertEquals(expected3, extractResult(head(new lexical.Scanner("a a a b b b c c c"))))
69-
val expected4 = threeLists(List('a, 'a, 'a, 'a, 'b, 'b, 'b, 'b), List('a, 'a, 'a, 'a), List('b, 'b, 'b, 'b, 'c, 'c, 'c, 'c))
70-
assertEquals(expected4, extractResult(head(new lexical.Scanner("a a a a b b b b c c c c"))))
71-
val failure1 = AnBnCn(new PackratReader(new lexical.Scanner("a a a b b b b c c c c"))).asInstanceOf[Failure]
72-
assertEquals("Expected failure", failure1.msg)
73-
val failure2 = AnBnCn(new PackratReader(new lexical.Scanner("a a a a b b b c c c c"))).asInstanceOf[Failure]
74-
assertEquals("``b'' expected but `c' found", failure2.msg)
75-
val failure3 = AnBnCn(new PackratReader(new lexical.Scanner("a a a a b b b b c c c"))).asInstanceOf[Failure]
76-
assertEquals("end of input", failure3.msg)
81+
assertSuccess(List('a, 'b), List('a), List('b, 'c), "a b c")
82+
assertSuccess(List('a, 'a, 'b, 'b), List('a, 'a), List('b, 'b, 'c, 'c), "a a b b c c")
83+
assertSuccess(List('a, 'a, 'a, 'b, 'b, 'b), List('a, 'a, 'a), List('b, 'b, 'b, 'c, 'c, 'c),
84+
"a a a b b b c c c")
85+
assertSuccess(List('a, 'a, 'a, 'a, 'b, 'b, 'b, 'b), List('a, 'a, 'a, 'a), List('b, 'b, 'b, 'b, 'c, 'c, 'c, 'c),
86+
"a a a a b b b b c c c c")
87+
88+
def assertFailure(expectedFailureMsg: String, input: String): Unit = {
89+
val packratReader = new PackratReader(new lexical.Scanner(input))
90+
val parseResult = AnBnCn(packratReader)
91+
assertTrue(s"Not an instance of Failure: ${parseResult.toString()}", parseResult.isInstanceOf[Failure])
92+
val failure = parseResult.asInstanceOf[Failure]
93+
assertEquals(expectedFailureMsg, failure.msg)
94+
}
95+
assertFailure("``b'' expected but `c' found", "a a a a b b b c c c c")
96+
assertFailure("end of input", "a a a a b b b b c c c")
7797
}
7898

7999
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /