23 |
23 |
24 !PPCNodeFirstFollowNextTests methodsFor:'setup'! |
24 !PPCNodeFirstFollowNextTests methodsFor:'setup'! |
25 |
25 |
26 setUp |
26 setUp |
27 configuration := PPCConfiguration default. |
27 configuration := PPCConfiguration default. |
28 configuration options generate: false. |
28 configuration context options generate: false. |
|
29 |
|
30 "Modified: / 28-08-2015 / 14:17:57 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
29 ! ! |
31 ! ! |
30 |
32 |
31 !PPCNodeFirstFollowNextTests methodsFor:'support'! |
33 !PPCNodeFirstFollowNextTests methodsFor:'support'! |
32 |
34 |
33 assert: set anyMatchesType: whatever |
35 assert: set anyMatchesType: whatever |
160 self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]]. |
162 self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]]. |
161 self assert: first noneMatchesType: PPCNilNode. |
163 self assert: first noneMatchesType: PPCNilNode. |
162 ! |
164 ! |
163 |
165 |
164 testFirstNegate1 |
166 testFirstNegate1 |
165 configuration options specialize: true. |
167 configuration context options specialize: true. |
166 tree := self treeFrom: ('a' asParser negate, 'b' asParser). |
168 tree := self treeFrom: ('a' asParser negate, 'b' asParser). |
167 |
169 |
168 first := self first: tree. |
170 first := self first: tree. |
169 |
171 |
170 self assert: first size: 1. |
172 self assert: first size: 1. |
171 self assert: first anyMatchesType: PPCNotNode. |
173 self assert: first anyMatchesType: PPCNotNode. |
172 self assert: first anyOne child literal = 'a'. |
174 self assert: first anyOne child literal = 'a'. |
|
175 |
|
176 "Modified: / 28-08-2015 / 14:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
173 ! |
177 ! |
174 |
178 |
175 testFirstNot |
179 testFirstNot |
176 tree := self treeFrom: ('a' asParser not star, 'b' asParser). |
180 tree := self treeFrom: ('a' asParser not star, 'b' asParser). |
177 |
181 |
181 self assert: first anyMatchesType: PPCNotNode. |
185 self assert: first anyMatchesType: PPCNotNode. |
182 self assert: first anyMatchesType: PPCLiteralNode. |
186 self assert: first anyMatchesType: PPCLiteralNode. |
183 ! |
187 ! |
184 |
188 |
185 testFirstNot2 |
189 testFirstNot2 |
186 configuration options specialize: true. |
190 configuration context options specialize: true. |
187 tree := self treeFrom: (#letter asParser not star, #letter asParser). |
191 tree := self treeFrom: (#letter asParser not star, #letter asParser). |
188 |
192 |
189 first := self first: tree. |
193 first := self first: tree. |
190 |
194 |
191 self assert: first size: 2. |
195 self assert: first size: 2. |
192 self assert: first anyMatchesType: PPCNotNode. |
196 self assert: first anyMatchesType: PPCNotNode. |
193 self assert: first anyMatchesType: PPCPredicateNode. |
197 self assert: first anyMatchesType: PPCPredicateNode. |
|
198 |
|
199 "Modified: / 28-08-2015 / 14:18:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
194 ! |
200 ! |
195 |
201 |
196 testFirstNot4 |
202 testFirstNot4 |
197 tree := self treeFrom: (#letter asParser negate plus, #letter asParser). |
203 tree := self treeFrom: (#letter asParser negate plus, #letter asParser). |
198 |
204 |
321 self assert: first anySatisfy: [ :e | e literal = 'b' ]. |
327 self assert: first anySatisfy: [ :e | e literal = 'b' ]. |
322 self assert: first noneMatchesType: PPCNilNode. |
328 self assert: first noneMatchesType: PPCNilNode. |
323 ! |
329 ! |
324 |
330 |
325 testFirstSequence6 |
331 testFirstSequence6 |
326 configuration options specialize: true. |
332 configuration context options specialize: true. |
327 tree := self treeFrom: #space asParser star, 'a' asParser. |
333 tree := self treeFrom: #space asParser star, 'a' asParser. |
328 |
334 |
329 tree firstFollowCache: nil. |
335 tree firstFollowCache: nil. |
330 self should: [ self first: tree. ] raise: Exception. |
336 self should: [ self first: tree. ] raise: Exception. |
|
337 |
|
338 "Modified: / 28-08-2015 / 14:18:34 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
331 ! |
339 ! |
332 |
340 |
333 testFirstSequence7 |
341 testFirstSequence7 |
334 tree := self treeFrom: #space asParser star, 'a' asParser. |
342 tree := self treeFrom: #space asParser star, 'a' asParser. |
335 |
343 |
349 self assert: first anyMatchesType: PPCMessagePredicateNode. |
357 self assert: first anyMatchesType: PPCMessagePredicateNode. |
350 self assert: first anyMatchesType: PPCSentinelNode. |
358 self assert: first anyMatchesType: PPCSentinelNode. |
351 ! |
359 ! |
352 |
360 |
353 testFirstStarMessagePredicate2 |
361 testFirstStarMessagePredicate2 |
354 configuration options specialize: true. |
362 configuration context options specialize: true. |
355 tree := self treeFrom: #space asParser star. |
363 tree := self treeFrom: #space asParser star. |
356 |
364 |
357 first := self first: tree. |
365 first := self first: tree. |
358 |
366 |
359 self assert: first size: 2. |
367 self assert: first size: 2. |
360 self assert: first anyMatchesType: PPCMessagePredicateNode. |
368 self assert: first anyMatchesType: PPCMessagePredicateNode. |
361 self assert: first anyMatchesType: PPCSentinelNode. |
369 self assert: first anyMatchesType: PPCSentinelNode. |
362 |
370 |
363 |
371 "Modified: / 28-08-2015 / 14:18:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
364 ! |
372 ! |
365 |
373 |
366 testFirstTerminal |
374 testFirstTerminal |
367 configuration options specialize: true. |
375 configuration context options specialize: true. |
368 tree := self treeFrom: 'a' asParser not. |
376 tree := self treeFrom: 'a' asParser not. |
369 |
377 |
370 first := self first: tree. |
378 first := self first: tree. |
371 |
379 |
372 self assert: first size: 1. |
380 self assert: first size: 1. |
373 self assert: (self first: tree) anyMatchesType: PPCNotLiteralNode. |
381 self assert: (self first: tree) anyMatchesType: PPCNotLiteralNode. |
|
382 |
|
383 "Modified: / 28-08-2015 / 14:18:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
374 ! |
384 ! |
375 |
385 |
376 testFirstTerminal2 |
386 testFirstTerminal2 |
377 tree := self treeFrom: 'a' asParser and. |
387 tree := self treeFrom: 'a' asParser and. |
378 |
388 |
657 self assert: followSet anyMatchesType: PPCNilNode |
667 self assert: followSet anyMatchesType: PPCNilNode |
658 ! |
668 ! |
659 |
669 |
660 testFollowTrimmingToken |
670 testFollowTrimmingToken |
661 | token1 token2 | |
671 | token1 token2 | |
662 configuration options specialize: false. |
672 configuration context options specialize: false. |
663 token1 := #letter asParser plus trimmingToken name: 'token1'; yourself. |
673 token1 := #letter asParser plus trimmingToken name: 'token1'; yourself. |
664 token2 := #letter asParser plus trimmingToken name: 'token2'; yourself. |
674 token2 := #letter asParser plus trimmingToken name: 'token2'; yourself. |
665 |
675 |
666 |
676 |
667 tree := self treeFrom: token1, token2. |
677 tree := self treeFrom: token1, token2. |
668 followSet := self followOf: 'token1' |
678 followSet := self followOf: 'token1' |
669 in: tree |
679 in: tree |
670 suchThat: [:e | e isFirstSetTerminal or: [e isKindOf: PPCTrimmingTokenNode ]]. |
680 suchThat: [:e | e isFirstSetTerminal or: [e isKindOf: PPCTrimmingTokenNode ]]. |
671 |
681 |
672 self assert: followSet size: 1. |
682 self assert: followSet size: 1. |
673 self assert: followSet anyMatchesType: PPCTrimmingTokenNode. |
683 self assert: followSet anyMatchesType: PPCTrimmingTokenNode. |
|
684 |
|
685 "Modified: / 28-08-2015 / 14:18:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
674 ! ! |
686 ! ! |
675 |
687 |
676 !PPCNodeFirstFollowNextTests class methodsFor:'documentation'! |
688 !PPCNodeFirstFollowNextTests class methodsFor:'documentation'! |
677 |
689 |
678 version_HG |
690 version_HG |