|
1 "{ Package: 'stx:goodies/petitparser/tests' }" |
|
2 |
|
3 "{ NameSpace: Smalltalk }" |
|
4 |
|
5 PPCompositeParserTest subclass:#PPLambdaParserTest |
|
6 instanceVariableNames:'' |
|
7 classVariableNames:'' |
|
8 poolDictionaries:'' |
|
9 category:'PetitTests-Tests' |
|
10 ! |
|
11 |
|
12 |
|
13 !PPLambdaParserTest methodsFor:'accessing'! |
|
14 |
|
15 parserClass |
|
16 ^ PPLambdaParser |
|
17 ! ! |
|
18 |
|
19 !PPLambdaParserTest methodsFor:'testing'! |
|
20 |
|
21 testAbstraction |
|
22 self assert: '\x.y' is: #('x' 'y'). |
|
23 self assert: '\x.\y.z' is: #('x' ('y' 'z')) |
|
24 ! |
|
25 |
|
26 testApplication |
|
27 self assert: '(x x)' is: #('x' 'x'). |
|
28 self assert: '(x y)' is: #('x' 'y'). |
|
29 self assert: '((x y) z)' is: #(('x' 'y') 'z'). |
|
30 self assert: '(x (y z))' is: #('x' ('y' 'z')) |
|
31 ! |
|
32 |
|
33 testVariable |
|
34 self assert: 'x' is: 'x'. |
|
35 self assert: 'xy' is: 'xy'. |
|
36 self assert: 'x12' is: 'x12' |
|
37 ! ! |
|
38 |
|
39 !PPLambdaParserTest methodsFor:'testing-curch'! |
|
40 |
|
41 testAnd |
|
42 self assert: self parserClass and = #('p' ('q' (('p' 'q') 'p'))) |
|
43 ! |
|
44 |
|
45 testFalse |
|
46 self assert: self parserClass false = #('x' ('y' 'y')) |
|
47 ! |
|
48 |
|
49 testIfThenElse |
|
50 self assert: self parserClass ifthenelse = #('p' 'p') |
|
51 ! |
|
52 |
|
53 testNot |
|
54 self assert: self parserClass not = #('p' ('a' ('b' (('p' 'b') 'a')))) |
|
55 ! |
|
56 |
|
57 testOr |
|
58 self assert: self parserClass or = #('p' ('q' (('p' 'p') 'q'))) |
|
59 ! |
|
60 |
|
61 testTrue |
|
62 self assert: self parserClass true = #('x' ('y' 'x')) |
|
63 ! ! |
|
64 |
|
65 !PPLambdaParserTest methodsFor:'testing-utilities'! |
|
66 |
|
67 testParseOnError |
|
68 | beenHere | |
|
69 result := self parserClass |
|
70 parse: '\x.y' |
|
71 onError: [ self fail ]. |
|
72 self assert: result = #('x' 'y'). |
|
73 |
|
74 beenHere := false. |
|
75 result := self parserClass |
|
76 parse: '\x.' |
|
77 onError: [ beenHere := true ]. |
|
78 self assert: beenHere. |
|
79 |
|
80 beenHere := false. |
|
81 result := self parserClass |
|
82 parse: '\x.' |
|
83 onError: [ :fail | beenHere := true. fail ]. |
|
84 self assert: beenHere. |
|
85 self assert: (result message findString: '$(') > 0. |
|
86 self assert: (result message findString: 'expected') > 0. |
|
87 self assert: (result position = 0). |
|
88 |
|
89 beenHere := false. |
|
90 result := self parserClass |
|
91 parse: '\x.' |
|
92 onError: [ :msg :pos | |
|
93 self assert: (msg findString: '$(') > 0. |
|
94 self assert: (msg findString: 'expected') > 0. |
|
95 self assert: (pos = 0). |
|
96 beenHere := true ]. |
|
97 self assert: result. |
|
98 self assert: beenHere |
|
99 ! |
|
100 |
|
101 testParseStartingAtOnError |
|
102 | beenHere | |
|
103 result := self parserClass |
|
104 parse: 'x' |
|
105 startingAt: #variable |
|
106 onError: [ self fail ]. |
|
107 self assert: result = 'x'. |
|
108 |
|
109 beenHere := false. |
|
110 result := self parserClass |
|
111 parse: '\' |
|
112 startingAt: #variable |
|
113 onError: [ beenHere := true ]. |
|
114 self assert: beenHere. |
|
115 |
|
116 beenHere := false. |
|
117 result := self parserClass |
|
118 parse: '\' |
|
119 startingAt: #variable |
|
120 onError: [ :fail | beenHere := true. fail ]. |
|
121 self assert: beenHere. |
|
122 self assert: result message = 'letter expected'. |
|
123 self assert: result position = 0. |
|
124 |
|
125 beenHere := false. |
|
126 result := self parserClass |
|
127 parse: '\' |
|
128 startingAt: #variable |
|
129 onError: [ :msg :pos | |
|
130 self assert: msg = 'letter expected'. |
|
131 self assert: pos = 0. |
|
132 beenHere := true ]. |
|
133 self assert: beenHere |
|
134 ! |
|
135 |
|
136 testProductionAt |
|
137 self assert: (parser productionAt: #foo) isNil. |
|
138 self assert: (parser productionAt: #foo ifAbsent: [ true ]). |
|
139 |
|
140 self assert: (parser productionAt: #start) notNil. |
|
141 self assert: (parser productionAt: #start ifAbsent: [ true ]) notNil. |
|
142 |
|
143 self assert: (parser productionAt: #variable) notNil. |
|
144 self assert: (parser productionAt: #variable ifAbsent: [ true ]) notNil |
|
145 ! ! |
|
146 |
|
147 !PPLambdaParserTest class methodsFor:'documentation'! |
|
148 |
|
149 version |
|
150 ^ '$Header$' |
|
151 ! |
|
152 |
|
153 version_CVS |
|
154 ^ '$Header$' |
|
155 ! ! |
|
156 |