35 ! ! |
35 ! ! |
36 |
36 |
37 !PPLambdaParserTest methodsFor:'testing-curch'! |
37 !PPLambdaParserTest methodsFor:'testing-curch'! |
38 |
38 |
39 testAnd |
39 testAnd |
40 self assert: self parserClass and = #('p' ('q' (('p' 'q') 'p'))) |
40 self assert: self parserClass and equals: #('p' #('q' #(#('p' 'q') 'p'))) |
41 ! |
41 ! |
42 |
42 |
43 testFalse |
43 testFalse |
44 self assert: self parserClass false = #('x' ('y' 'y')) |
44 self assert: self parserClass false equals: #('x' #('y' 'y')) |
45 ! |
45 ! |
46 |
46 |
47 testIfThenElse |
47 testIfThenElse |
48 self assert: self parserClass ifthenelse = #('p' 'p') |
48 self assert: self parserClass ifthenelse equals: #('p' 'p') |
49 ! |
49 ! |
50 |
50 |
51 testNot |
51 testNot |
52 self assert: self parserClass not = #('p' ('a' ('b' (('p' 'b') 'a')))) |
52 self assert: self parserClass not equals: #('p' #('a' #('b' #(#('p' 'b') 'a')))) |
53 ! |
53 ! |
54 |
54 |
55 testOr |
55 testOr |
56 self assert: self parserClass or = #('p' ('q' (('p' 'p') 'q'))) |
56 self assert: self parserClass or equals: #('p' #('q' #(#('p' 'p') 'q'))) |
57 ! |
57 ! |
58 |
58 |
59 testTrue |
59 testTrue |
60 self assert: self parserClass true = #('x' ('y' 'x')) |
60 self assert: self parserClass true equals: #('x' #('y' 'x')) |
61 ! ! |
61 ! ! |
62 |
62 |
63 !PPLambdaParserTest methodsFor:'testing-utilities'! |
63 !PPLambdaParserTest methodsFor:'testing-utilities'! |
64 |
64 |
65 testParseOnError |
65 testParseOnError |
66 | beenHere | |
66 | beenHere | |
67 result := self parserClass |
67 result := self parserClass parse: '\x.y' onError: [ self fail ]. |
68 parse: '\x.y' |
68 self assert: result equals: #('x' 'y'). |
69 onError: [ self fail ]. |
69 beenHere := false. |
70 self assert: result = #('x' 'y'). |
70 result := self parserClass parse: '\x.' onError: [ beenHere := true ]. |
71 |
71 self assert: beenHere. |
72 beenHere := false. |
72 beenHere := false. |
73 result := self parserClass |
73 result := self parserClass |
74 parse: '\x.' |
74 parse: '\x.' |
75 onError: [ beenHere := true ]. |
75 onError: [ :fail | |
|
76 beenHere := true. |
|
77 fail ]. |
76 self assert: beenHere. |
78 self assert: beenHere. |
77 |
79 self assert: (result message includesSubstring: 'separator'). |
78 beenHere := false. |
80 self assert: (result message includesSubstring: 'expected'). |
79 result := self parserClass |
81 self assert: result position equals: 3. |
80 parse: '\x.' |
|
81 onError: [ :fail | beenHere := true. fail ]. |
|
82 self assert: beenHere. |
|
83 self assert: (result message findString: '$(') > 0. |
|
84 self assert: (result message findString: 'expected') > 0. |
|
85 self assert: (result position = 0). |
|
86 |
|
87 beenHere := false. |
82 beenHere := false. |
88 result := self parserClass |
83 result := self parserClass |
89 parse: '\x.' |
84 parse: '\x.' |
90 onError: [ :msg :pos | |
85 onError: [ :msg :pos | |
91 self assert: (msg findString: '$(') > 0. |
86 self assert: (msg includesSubstring: 'separator'). |
92 self assert: (msg findString: 'expected') > 0. |
87 self assert: (msg includesSubstring: 'expected'). |
93 self assert: (pos = 0). |
88 self assert: pos equals: 3. |
94 beenHere := true ]. |
89 beenHere := true ]. |
95 self assert: result. |
90 self assert: result. |
96 self assert: beenHere |
91 self assert: beenHere |
97 ! |
92 ! |
98 |
93 |
99 testParseStartingAtOnError |
94 testParseStartingAtOnError |
100 | beenHere | |
95 | beenHere | |
101 result := self parserClass |
96 result := self parserClass parse: 'x' startingAt: #variable onError: [ self fail ]. |
102 parse: 'x' |
97 self assert: result equals: 'x'. |
103 startingAt: #variable |
98 beenHere := false. |
104 onError: [ self fail ]. |
99 result := self parserClass parse: '\' startingAt: #variable onError: [ beenHere := true ]. |
105 self assert: result = 'x'. |
100 self assert: beenHere. |
106 |
|
107 beenHere := false. |
101 beenHere := false. |
108 result := self parserClass |
102 result := self parserClass |
109 parse: '\' |
103 parse: '\' |
110 startingAt: #variable |
104 startingAt: #variable |
111 onError: [ beenHere := true ]. |
105 onError: [ :fail | |
|
106 beenHere := true. |
|
107 fail ]. |
112 self assert: beenHere. |
108 self assert: beenHere. |
113 |
109 self assert: result message equals: 'separator expected'. |
114 beenHere := false. |
110 self assert: result position equals: 0. |
115 result := self parserClass |
|
116 parse: '\' |
|
117 startingAt: #variable |
|
118 onError: [ :fail | beenHere := true. fail ]. |
|
119 self assert: beenHere. |
|
120 self assert: result message = 'letter expected'. |
|
121 self assert: result position = 0. |
|
122 |
|
123 beenHere := false. |
111 beenHere := false. |
124 result := self parserClass |
112 result := self parserClass |
125 parse: '\' |
113 parse: '\' |
126 startingAt: #variable |
114 startingAt: #variable |
127 onError: [ :msg :pos | |
115 onError: [ :msg :pos | |
128 self assert: msg = 'letter expected'. |
116 self assert: msg equals: 'separator expected'. |
129 self assert: pos = 0. |
117 self assert: pos equals: 0. |
130 beenHere := true ]. |
118 beenHere := true ]. |
131 self assert: beenHere |
119 self assert: beenHere |
132 ! |
120 ! |
133 |
121 |
134 testProductionAt |
122 testProductionAt |