equal
deleted
inserted
replaced
1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }" |
1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }" |
2 |
2 |
3 "{ NameSpace: Smalltalk }" |
3 "{ NameSpace: Smalltalk }" |
4 |
4 |
5 TestCase subclass:#PPCNodeFirstFollowNextTests |
5 TestCase subclass:#PPCNodeFirstFollowNextTests |
6 instanceVariableNames:'tree first node followSet configuration' |
6 instanceVariableNames:'tree first node followSet compiler' |
7 classVariableNames:'' |
7 classVariableNames:'' |
8 poolDictionaries:'' |
8 poolDictionaries:'' |
9 category:'PetitCompiler-Tests-Nodes' |
9 category:'PetitCompiler-Tests-Nodes' |
10 ! |
10 ! |
11 |
11 |
22 |
22 |
23 |
23 |
24 !PPCNodeFirstFollowNextTests methodsFor:'setup'! |
24 !PPCNodeFirstFollowNextTests methodsFor:'setup'! |
25 |
25 |
26 setUp |
26 setUp |
27 configuration := PPCConfiguration default. |
27 compiler := PPCCompiler default. |
28 configuration context options generate: false. |
28 compiler context options generate:false. |
29 |
29 |
30 "Modified: / 28-08-2015 / 14:17:57 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
30 "Modified: / 28-08-2015 / 14:17:57 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
31 ! ! |
31 ! ! |
32 |
32 |
33 !PPCNodeFirstFollowNextTests methodsFor:'support'! |
33 !PPCNodeFirstFollowNextTests methodsFor:'support'! |
73 followOfNodeIn: rootNode |
73 followOfNodeIn: rootNode |
74 ^ self followOf: 'node' in: rootNode |
74 ^ self followOf: 'node' in: rootNode |
75 ! |
75 ! |
76 |
76 |
77 treeFrom: parser |
77 treeFrom: parser |
78 ^ parser compileWithConfiguration: configuration |
78 ^ parser compileUsingCompiler: compiler |
|
79 |
|
80 "Modified: / 07-09-2015 / 10:08:05 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
79 ! ! |
81 ! ! |
80 |
82 |
81 !PPCNodeFirstFollowNextTests methodsFor:'testing - first'! |
83 !PPCNodeFirstFollowNextTests methodsFor:'testing - first'! |
82 |
84 |
83 testFirst1 |
85 testFirst1 |
162 self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]]. |
164 self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]]. |
163 self assert: first noneMatchesType: PPCNilNode. |
165 self assert: first noneMatchesType: PPCNilNode. |
164 ! |
166 ! |
165 |
167 |
166 testFirstNegate1 |
168 testFirstNegate1 |
167 configuration removePass: PPCSpecializingVisitor. |
169 compiler removePass: PPCSpecializingVisitor. |
168 tree := self treeFrom: ('a' asParser negate, 'b' asParser). |
170 tree := self treeFrom: ('a' asParser negate, 'b' asParser). |
169 |
171 |
170 first := self first: tree. |
172 first := self first: tree. |
171 |
173 |
172 self assert: first size: 1. |
174 self assert: first size: 1. |
185 self assert: first anyMatchesType: PPCNotNode. |
187 self assert: first anyMatchesType: PPCNotNode. |
186 self assert: first anyMatchesType: PPCLiteralNode. |
188 self assert: first anyMatchesType: PPCLiteralNode. |
187 ! |
189 ! |
188 |
190 |
189 testFirstNot2 |
191 testFirstNot2 |
190 configuration removePass: PPCSpecializingVisitor. |
192 compiler removePass: PPCSpecializingVisitor. |
191 tree := self treeFrom: (#letter asParser not star, #letter asParser). |
193 tree := self treeFrom: (#letter asParser not star, #letter asParser). |
192 |
194 |
193 first := self first: tree. |
195 first := self first: tree. |
194 |
196 |
195 self assert: first size: 2. |
197 self assert: first size: 2. |
327 self assert: first anySatisfy: [ :e | e literal = 'b' ]. |
329 self assert: first anySatisfy: [ :e | e literal = 'b' ]. |
328 self assert: first noneMatchesType: PPCNilNode. |
330 self assert: first noneMatchesType: PPCNilNode. |
329 ! |
331 ! |
330 |
332 |
331 testFirstSequence6 |
333 testFirstSequence6 |
332 configuration removePass: PPCSpecializingVisitor. |
334 compiler removePass: PPCSpecializingVisitor. |
333 tree := self treeFrom: #space asParser star, 'a' asParser. |
335 tree := self treeFrom: #space asParser star, 'a' asParser. |
334 |
336 |
335 tree firstFollowCache: nil. |
337 tree firstFollowCache: nil. |
336 self should: [ self first: tree. ] raise: Exception. |
338 self should: [ self first: tree. ] raise: Exception. |
337 |
339 |
665 self assert: followSet anyMatchesType: PPCNilNode |
667 self assert: followSet anyMatchesType: PPCNilNode |
666 ! |
668 ! |
667 |
669 |
668 testFollowTrimmingToken |
670 testFollowTrimmingToken |
669 | token1 token2 | |
671 | token1 token2 | |
670 configuration removePass: PPCSpecializingVisitor. |
672 compiler removePass: PPCSpecializingVisitor. |
671 token1 := #letter asParser plus trimmingToken name: 'token1'; yourself. |
673 token1 := #letter asParser plus trimmingToken name: 'token1'; yourself. |
672 token2 := #letter asParser plus trimmingToken name: 'token2'; yourself. |
674 token2 := #letter asParser plus trimmingToken name: 'token2'; yourself. |
673 |
675 |
674 |
676 |
675 tree := self treeFrom: token1, token2. |
677 tree := self treeFrom: token1, token2. |