|
1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }" |
|
2 |
|
3 "{ NameSpace: Smalltalk }" |
|
4 |
|
5 PPAbstractParserTest subclass:#PPCUnivarsalGuardTest |
|
6 instanceVariableNames:'parser result context node compiler id node2 id2 id1 node1 node3 |
|
7 arguments configuration' |
|
8 classVariableNames:'' |
|
9 poolDictionaries:'' |
|
10 category:'PetitCompiler-Tests-Core-Universal' |
|
11 ! |
|
12 |
|
13 !PPCUnivarsalGuardTest methodsFor:'as yet unclassified'! |
|
14 |
|
15 assert: p parse: whatever |
|
16 ^ result := super assert: p parse: whatever. |
|
17 ! |
|
18 |
|
19 context |
|
20 ^ context := PPCProfilingContext new |
|
21 ! |
|
22 |
|
23 setUp |
|
24 arguments := PPCArguments default |
|
25 profile: true; |
|
26 yourself. |
|
27 |
|
28 configuration := PPCUniversalConfiguration new |
|
29 arguments: arguments; |
|
30 yourself. |
|
31 ! |
|
32 |
|
33 tearDown |
|
34 | parserClass | |
|
35 |
|
36 parserClass := (Smalltalk at: #PPGeneratedParser ifAbsent: [nil]). |
|
37 parserClass notNil ifTrue:[ |
|
38 parserClass removeFromSystem |
|
39 ]. |
|
40 ! ! |
|
41 |
|
42 !PPCUnivarsalGuardTest methodsFor:'tests - guard'! |
|
43 |
|
44 testChoiceGuard |
|
45 parser := ('foo' asParser trimmingToken / 'bar' asParser trimmingToken / $d asParser trimmingToken plus) |
|
46 compileWithConfiguration: configuration. |
|
47 |
|
48 self assert: parser parse: 'foo'. |
|
49 self assert: result inputValue = 'foo'. |
|
50 self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'token' ]). |
|
51 |
|
52 self assert: parser parse: 'bar'. |
|
53 self assert: result inputValue = 'bar'. |
|
54 |
|
55 self assert: parser parse: ' foo'. |
|
56 self assert: result inputValue = 'foo'. |
|
57 |
|
58 self assert: parser parse: ' d'. |
|
59 self assert: result first inputValue = 'd'. |
|
60 |
|
61 self assert: parser fail: ''. |
|
62 self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'predicate' ]). |
|
63 self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'token' ]). |
|
64 |
|
65 self assert: parser fail: 'zorg'. |
|
66 self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'token' ]). |
|
67 ! |
|
68 |
|
69 testEmptyChoiceGuard |
|
70 parser := ('foo' asParser trimmingToken / 'bar' asParser trimmingToken / $d asParser trimmingToken star) |
|
71 compileWithConfiguration: configuration. |
|
72 |
|
73 self assert: parser parse: 'foo'. |
|
74 self assert: result inputValue = 'foo'. |
|
75 |
|
76 self assert: parser parse: 'bar'. |
|
77 self assert: result inputValue = 'bar'. |
|
78 |
|
79 self assert: parser parse: ' foo'. |
|
80 self assert: result inputValue = 'foo'. |
|
81 |
|
82 self assert: parser parse: ' d'. |
|
83 self assert: result first inputValue = 'd'. |
|
84 |
|
85 self assert: parser parse: ''. |
|
86 |
|
87 self assert: parser parse: 'zorg' end: 0. |
|
88 ! |
|
89 |
|
90 testGuardSmalltlakToken |
|
91 parser := (#letter asParser, #word asParser star) smalltalkToken compileWithConfiguration: configuration. |
|
92 |
|
93 self assert: parser parse: 'bar'. |
|
94 self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'seq' ]). |
|
95 |
|
96 self assert: parser fail: '123'. |
|
97 self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'seq' ]). |
|
98 ! |
|
99 |
|
100 testSequenceGuard |
|
101 parser := ((#any asParser, #any asParser) wrapped, (#any asParser, #any asParser)) compileWithConfiguration: configuration. |
|
102 |
|
103 self assert: parser parse: 'fooo' to: #(#($f $o) #($o $o)). |
|
104 self assert: parser parse: 'fo oo' to: #(#($f $o) #($ $o)) end: 4. |
|
105 self assert: parser fail: 'fo'. |
|
106 |
|
107 ! |
|
108 |
|
109 testTrimmerGuard |
|
110 parser := $a asParser trim, $b asParser compileWithConfiguration: configuration. |
|
111 |
|
112 self assert: parser parse: 'ab'. |
|
113 self assert: parser parse: ' ab'. |
|
114 ! ! |
|
115 |