|
1 "{ Package: 'squeak:petitparser' }" |
|
2 |
|
3 PPAbstractParseTest subclass:#PPPredicateTest |
|
4 instanceVariableNames:'' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'PetitTests-Tests' |
|
8 ! |
|
9 |
|
10 |
|
11 !PPPredicateTest methodsFor:'private'! |
|
12 |
|
13 charactersDo: aBlock |
|
14 "The limits are 1-255 as far as I know" |
|
15 self breakPoint: #petitparser. |
|
16 1 to: 255 do: [ :index | aBlock value: (Character codePoint: index) ] |
|
17 "/ 1 to: 256 do: [ :index | aBlock value: (Character codePoint: index) ] |
|
18 |
|
19 "Modified: / 19-12-2010 / 16:58:58 / Jan Kurs <kurs.jan@post.cz>" |
|
20 ! ! |
|
21 |
|
22 !PPPredicateTest methodsFor:'testing'! |
|
23 |
|
24 testOnMessage |
|
25 | block parser | |
|
26 block := [ :char | char = $* ]. |
|
27 parser := PPPredicateObjectParser on: block message: 'starlet'. |
|
28 self assert: parser block = block. |
|
29 self assert: parser message = 'starlet'. |
|
30 |
|
31 self assertCharacterSets: parser. |
|
32 self assert: parser parse: '*' to: $*. |
|
33 self assert: parser parse: '**' to: $* end: 1. |
|
34 self assert: parser fail: ''. |
|
35 self assert: parser fail: '1'. |
|
36 self assert: parser fail: 'a' |
|
37 ! ! |
|
38 |
|
39 !PPPredicateTest methodsFor:'testing-chars'! |
|
40 |
|
41 testBlank |
|
42 | parser | |
|
43 parser := #blank asParser. |
|
44 self assertCharacterSets: parser. |
|
45 self assert: parser parse: (String with: Character space) to: Character space. |
|
46 self assert: parser parse: (String with: Character tab) to: Character tab. |
|
47 self assert: parser fail: ''. |
|
48 self assert: parser fail: '1'. |
|
49 self assert: parser fail: (String with: Character cr) |
|
50 ! |
|
51 |
|
52 testChar |
|
53 | parser | |
|
54 parser := $* asParser. |
|
55 self assertCharacterSets: parser. |
|
56 self assert: parser parse: '*' to: $*. |
|
57 self assert: parser parse: '**' to: $* end: 1. |
|
58 self assert: parser fail: ''. |
|
59 self assert: parser fail: '1'. |
|
60 self assert: parser fail: 'a' |
|
61 ! |
|
62 |
|
63 testCr |
|
64 | parser | |
|
65 parser := #cr asParser. |
|
66 self assertCharacterSets: parser. |
|
67 self assert: parser parse: (String with: Character cr) to: Character cr |
|
68 ! |
|
69 |
|
70 testDigit |
|
71 | parser | |
|
72 parser := #digit asParser. |
|
73 self assertCharacterSets: parser. |
|
74 self assert: parser parse: '0' to: $0. |
|
75 self assert: parser parse: '9' to: $9. |
|
76 self assert: parser fail: ''. |
|
77 self assert: parser fail: 'a' |
|
78 ! |
|
79 |
|
80 testHex |
|
81 | parser | |
|
82 parser := #hex asParser. |
|
83 self assertCharacterSets: parser. |
|
84 self assert: parser parse: '0' to: $0. |
|
85 self assert: parser parse: '5' to: $5. |
|
86 self assert: parser parse: '9' to: $9. |
|
87 self assert: parser parse: 'A' to: $A. |
|
88 self assert: parser parse: 'D' to: $D. |
|
89 self assert: parser parse: 'F' to: $F. |
|
90 self assert: parser parse: 'a' to: $a. |
|
91 self assert: parser parse: 'e' to: $e. |
|
92 self assert: parser parse: 'f' to: $f. |
|
93 self assert: parser fail: ''. |
|
94 self assert: parser fail: 'g' |
|
95 ! |
|
96 |
|
97 testLetter |
|
98 | parser | |
|
99 parser := #letter asParser. |
|
100 self assertCharacterSets: parser. |
|
101 self assert: parser parse: 'a' to: $a. |
|
102 self assert: parser parse: 'Z' to: $Z. |
|
103 self assert: parser fail: ''. |
|
104 self assert: parser fail: '0' |
|
105 ! |
|
106 |
|
107 testLf |
|
108 | parser | |
|
109 parser := #lf asParser. |
|
110 self assertCharacterSets: parser. |
|
111 self assert: parser parse: (String with: Character lf) to: Character lf |
|
112 ! |
|
113 |
|
114 testLowercase |
|
115 | parser | |
|
116 parser := #lowercase asParser. |
|
117 self assertCharacterSets: parser. |
|
118 self assert: parser parse: 'a' to: $a. |
|
119 self assert: parser parse: 'z' to: $z. |
|
120 self assert: parser fail: ''. |
|
121 self assert: parser fail: 'A'. |
|
122 self assert: parser fail: '0' |
|
123 ! |
|
124 |
|
125 testNewline |
|
126 | parser | |
|
127 parser := #newline asParser. |
|
128 self assertCharacterSets: parser. |
|
129 self assert: parser parse: (String with: Character cr) to: Character cr. |
|
130 self assert: parser parse: (String with: Character lf) to: Character lf. |
|
131 self assert: parser fail: ' ' |
|
132 ! |
|
133 |
|
134 testPunctuation |
|
135 | parser | |
|
136 parser := #punctuation asParser. |
|
137 self assertCharacterSets: parser. |
|
138 self assert: parser parse: '.' to: $.. |
|
139 self assert: parser parse: ',' to: $,. |
|
140 self assert: parser fail: ''. |
|
141 self assert: parser fail: 'a'. |
|
142 self assert: parser fail: '1' |
|
143 ! |
|
144 |
|
145 testSpace |
|
146 | parser | |
|
147 parser := #space asParser. |
|
148 self assertCharacterSets: parser. |
|
149 self assert: parser parse: (String with: Character tab) to: Character tab. |
|
150 self assert: parser parse: ' ' to: Character space. |
|
151 self assert: parser fail: ''. |
|
152 self assert: parser fail: 'a' |
|
153 ! |
|
154 |
|
155 testTab |
|
156 | parser | |
|
157 parser := #tab asParser. |
|
158 self assertCharacterSets: parser. |
|
159 self assert: parser parse: (String with: Character tab) to: Character tab |
|
160 ! |
|
161 |
|
162 testUppercase |
|
163 | parser | |
|
164 parser := #uppercase asParser. |
|
165 self assertCharacterSets: parser. |
|
166 self assert: parser parse: 'A' to: $A. |
|
167 self assert: parser parse: 'Z' to: $Z. |
|
168 self assert: parser fail: ''. |
|
169 self assert: parser fail: 'a'. |
|
170 self assert: parser fail: '0' |
|
171 ! |
|
172 |
|
173 testWord |
|
174 | parser | |
|
175 parser := #word asParser. |
|
176 self assertCharacterSets: parser. |
|
177 self assert: parser parse: 'a' to: $a. |
|
178 self assert: parser parse: 'A' to: $A. |
|
179 self assert: parser parse: '0' to: $0. |
|
180 self assert: parser fail: ''. |
|
181 self assert: parser fail: '-' |
|
182 ! ! |
|
183 |
|
184 !PPPredicateTest methodsFor:'testing-objects'! |
|
185 |
|
186 testAny |
|
187 | parser | |
|
188 parser := #any asParser. |
|
189 self assertCharacterSets: parser. |
|
190 self assert: parser parse: ' ' to: $ . |
|
191 self assert: parser parse: '1' to: $1. |
|
192 self assert: parser parse: 'a' to: $a. |
|
193 self assert: parser fail: '' |
|
194 ! |
|
195 |
|
196 testAnyExceptAnyOf |
|
197 | parser | |
|
198 parser := PPPredicateObjectParser anyExceptAnyOf: #($: $,). |
|
199 self assertCharacterSets: parser. |
|
200 self assert: parser parse: 'a' to: $a. |
|
201 self assert: parser parse: 'z' to: $z. |
|
202 self assert: parser fail: ':'. |
|
203 self assert: parser fail: ',' |
|
204 ! |
|
205 |
|
206 testAnyOf |
|
207 | parser | |
|
208 parser := PPPredicateObjectParser anyOf: #($a $z). |
|
209 self assertCharacterSets: parser. |
|
210 self assert: parser parse: 'a' to: $a. |
|
211 self assert: parser parse: 'z' to: $z. |
|
212 self assert: parser fail: 'x' |
|
213 ! |
|
214 |
|
215 testBetweenAnd |
|
216 | parser | |
|
217 parser := PPPredicateObjectParser between: $b and: $d. |
|
218 self assertCharacterSets: parser. |
|
219 self assert: parser fail: 'a'. |
|
220 self assert: parser parse: 'b' to: $b. |
|
221 self assert: parser parse: 'c' to: $c. |
|
222 self assert: parser parse: 'd' to: $d. |
|
223 self assert: parser fail: 'e' |
|
224 ! |
|
225 |
|
226 testExpect |
|
227 | parser | |
|
228 parser := PPPredicateObjectParser expect: $a. |
|
229 self assertCharacterSets: parser. |
|
230 self assert: parser parse: 'a' to: $a. |
|
231 self assert: parser fail: 'b'. |
|
232 self assert: parser fail: '' |
|
233 ! ! |
|
234 |
|
235 !PPPredicateTest methodsFor:'testing-sequence'! |
|
236 |
|
237 testSequenceParser |
|
238 | parser | |
|
239 parser := PPPredicateSequenceParser |
|
240 on: [ :value | value first isUppercase ] |
|
241 message: 'uppercase 3 letter words' |
|
242 size: 3. |
|
243 self assert: parser size = 3. |
|
244 self assert: parser parse: 'Abc'. |
|
245 self assert: parser parse: 'ABc'. |
|
246 self assert: parser parse: 'ABC'. |
|
247 self assert: parser fail: 'abc'. |
|
248 self assert: parser fail: 'aBC'. |
|
249 self assert: parser fail: 'Ab'. |
|
250 |
|
251 parser := parser negate. |
|
252 self assert: parser size = 3. |
|
253 self assert: parser fail: 'Abc'. |
|
254 self assert: parser fail: 'ABc'. |
|
255 self assert: parser fail: 'ABC'. |
|
256 self assert: parser parse: 'abc'. |
|
257 self assert: parser parse: 'aBC'. |
|
258 self assert: parser fail: 'Ab' |
|
259 ! ! |
|
260 |
|
261 !PPPredicateTest methodsFor:'utilities'! |
|
262 |
|
263 assertCharacterSets: aParser |
|
264 "Assert the character set of aParser does not overlap with the character set with the negated parser, and that they both cover the complete character space." |
|
265 |
|
266 | positives negatives | |
|
267 positives := self parsedCharacterSet: aParser. |
|
268 negatives := self parsedCharacterSet: aParser negate. |
|
269 self charactersDo: [ :char | |
|
270 | positive negative | |
|
271 positive := positives includes: char. |
|
272 negative := negatives includes: char. |
|
273 self |
|
274 assert: ((positive and: [ negative not ]) |
|
275 or: [ positive not and: [ negative ] ]) |
|
276 description: char printString , ' should be in exactly one set' ] |
|
277 ! |
|
278 |
|
279 parsedCharacterSet: aParser |
|
280 | result | |
|
281 result := WriteStream on: String new. |
|
282 self charactersDo: [ :char | |
|
283 (aParser matches: (String with: char)) |
|
284 ifTrue: [ result nextPut: char ] ]. |
|
285 ^ result contents |
|
286 ! ! |
|
287 |
|
288 !PPPredicateTest class methodsFor:'documentation'! |
|
289 |
|
290 version_SVN |
|
291 ^ '$Id: PPPredicateTest.st,v 1.1 2011-08-18 18:56:17 cg Exp $' |
|
292 ! ! |