209
|
1 |
"{ Package: 'stx:goodies/petitparser/analyzer/tests' }"
|
|
2 |
|
|
3 |
PPAbstractParserTest subclass:#PPRewriterTest
|
|
4 |
instanceVariableNames:'rewriter'
|
|
5 |
classVariableNames:''
|
|
6 |
poolDictionaries:''
|
|
7 |
category:'PetitAnalyzer-Tests'
|
|
8 |
!
|
|
9 |
|
|
10 |
|
|
11 |
!PPRewriterTest methodsFor:'running'!
|
|
12 |
|
|
13 |
setUp
|
|
14 |
rewriter := PPRewriter new
|
|
15 |
! !
|
|
16 |
|
|
17 |
!PPRewriterTest methodsFor:'testing'!
|
|
18 |
|
|
19 |
testDuplicationRemoval
|
|
20 |
| duplicate before between after result |
|
|
21 |
duplicate := PPPattern any.
|
|
22 |
before := PPListPattern any.
|
|
23 |
between := PPListPattern any.
|
|
24 |
after := PPListPattern any.
|
|
25 |
rewriter
|
|
26 |
replace: before / duplicate / between / duplicate / after
|
|
27 |
with: before / duplicate / between / after.
|
|
28 |
|
|
29 |
result := rewriter execute: $a asParser / $a asParser.
|
|
30 |
self assert: rewriter hasChanged.
|
|
31 |
self assert: result children size = 1.
|
|
32 |
self assert: result children first literal = $a.
|
|
33 |
|
|
34 |
result := rewriter execute: $b asParser / $a asParser / $a asParser.
|
|
35 |
self assert: rewriter hasChanged.
|
|
36 |
self assert: result children size = 2.
|
|
37 |
self assert: result children first literal = $b.
|
|
38 |
self assert: result children last literal = $a.
|
|
39 |
|
|
40 |
result := rewriter execute: $a asParser / $b asParser / $a asParser.
|
|
41 |
self assert: rewriter hasChanged.
|
|
42 |
self assert: result children size = 2.
|
|
43 |
self assert: result children first literal = $a.
|
|
44 |
self assert: result children last literal = $b.
|
|
45 |
|
|
46 |
result := rewriter execute: $a asParser / $a asParser / $b asParser.
|
|
47 |
self assert: rewriter hasChanged.
|
|
48 |
self assert: result children size = 2.
|
|
49 |
self assert: result children first literal = $a.
|
|
50 |
self assert: result children last literal = $b
|
|
51 |
!
|
|
52 |
|
|
53 |
testPatternRemoval
|
|
54 |
| pattern result |
|
|
55 |
pattern := PPPattern class: PPLiteralObjectParser.
|
|
56 |
rewriter
|
|
57 |
replace: pattern / pattern
|
|
58 |
with: pattern.
|
|
59 |
|
|
60 |
result := rewriter execute: $a asParser / $a asParser.
|
|
61 |
self assert: rewriter hasChanged.
|
|
62 |
self assert: result class = PPLiteralObjectParser.
|
|
63 |
self assert: result literal = $a.
|
|
64 |
|
|
65 |
result := rewriter execute: $a asParser / $a asParser / $a asParser.
|
|
66 |
self deny: rewriter hasChanged.
|
|
67 |
self assert: result class = PPChoiceParser.
|
|
68 |
self assert: result children size = 3
|
|
69 |
!
|
|
70 |
|
|
71 |
testPatternReplacement
|
|
72 |
| pattern result |
|
|
73 |
pattern := PPPattern class: PPLiteralObjectParser.
|
|
74 |
rewriter
|
|
75 |
replace: pattern
|
|
76 |
with: pattern , pattern.
|
|
77 |
|
|
78 |
result := rewriter execute: $a asParser.
|
|
79 |
self assert: rewriter hasChanged.
|
|
80 |
self assert: result class = PPSequenceParser.
|
|
81 |
self assert: result children first literal = $a.
|
|
82 |
self assert: result children last literal = $a.
|
|
83 |
|
|
84 |
result := rewriter execute: #any asParser.
|
|
85 |
self deny: rewriter hasChanged.
|
|
86 |
self assert: result class = PPPredicateObjectParser
|
|
87 |
!
|
|
88 |
|
|
89 |
testReplaceLiteral
|
|
90 |
| result |
|
|
91 |
rewriter
|
|
92 |
replace: $a asParser
|
|
93 |
with: $b asParser.
|
|
94 |
|
|
95 |
result := rewriter execute: $a asParser.
|
|
96 |
self assert: rewriter hasChanged.
|
|
97 |
self assert: result literal = $b.
|
|
98 |
|
|
99 |
result := rewriter execute: $c asParser.
|
|
100 |
self deny: rewriter hasChanged.
|
|
101 |
self assert: result literal = $c.
|
|
102 |
|
|
103 |
result := rewriter execute: $a asParser , $b asParser , $c asParser.
|
|
104 |
self assert: rewriter hasChanged.
|
|
105 |
self assert: result children size = 3.
|
|
106 |
self assert: result children first literal = $b.
|
|
107 |
self assert: result children last literal = $c
|
|
108 |
!
|
|
109 |
|
|
110 |
testSwapTwoPattern
|
|
111 |
| first second result |
|
|
112 |
first := PPPattern any.
|
|
113 |
second := PPPattern any.
|
|
114 |
rewriter
|
|
115 |
replace: first , second
|
|
116 |
with: second , first.
|
|
117 |
|
|
118 |
result := rewriter execute: $a asParser , $b asParser.
|
|
119 |
self assert: rewriter hasChanged.
|
|
120 |
self assert: result children first literal = $b.
|
|
121 |
self assert: result children last literal = $a.
|
|
122 |
|
|
123 |
result := rewriter execute: $a asParser / $b asParser.
|
|
124 |
self deny: rewriter hasChanged.
|
|
125 |
self assert: result children first literal = $a.
|
|
126 |
self assert: result children last literal = $b
|
|
127 |
!
|
|
128 |
|
|
129 |
testWrapLiteral
|
|
130 |
| result |
|
|
131 |
rewriter
|
|
132 |
replace: $a asParser
|
|
133 |
withValueFrom: [ :parser | parser token ].
|
|
134 |
|
|
135 |
result := rewriter execute: $a asParser.
|
|
136 |
self assert: rewriter hasChanged.
|
|
137 |
self assert: result class = PPTokenParser.
|
|
138 |
self assert: result children first literal = $a.
|
|
139 |
|
|
140 |
result := rewriter execute: $c asParser.
|
|
141 |
self deny: rewriter hasChanged.
|
|
142 |
self assert: result literal = $c.
|
|
143 |
|
|
144 |
result := rewriter execute: $a asParser , $b asParser.
|
|
145 |
self assert: rewriter hasChanged.
|
|
146 |
self assert: result children first class = PPTokenParser.
|
|
147 |
self assert: result children first children first literal = $a.
|
|
148 |
self assert: result children last class = PPLiteralObjectParser.
|
|
149 |
self assert: result children last literal = $b
|
|
150 |
! !
|
|
151 |
|
|
152 |
!PPRewriterTest class methodsFor:'documentation'!
|
|
153 |
|
|
154 |
version
|
|
155 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPRewriterTest.st,v 1.1 2014-03-04 15:43:01 cg Exp $'
|
|
156 |
!
|
|
157 |
|
|
158 |
version_CVS
|
|
159 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPRewriterTest.st,v 1.1 2014-03-04 15:43:01 cg Exp $'
|
|
160 |
! !
|
|
161 |
|