@@ -2,6 +2,7 @@ package scala.util.parsing.combinator
22
33import org .junit .Test
44import org .junit .Assert .assertEquals
5+ import org .junit .Assert .assertTrue
56
67import 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