9 |
9 |
10 |
10 |
11 !PPPredicateTest methodsFor:'private'! |
11 !PPPredicateTest methodsFor:'private'! |
12 |
12 |
13 charactersDo: aBlock |
13 charactersDo: aBlock |
14 "The limits are 1-255 as far as I know" |
14 "The limits are 1-255 as far as I know" |
15 self breakPoint: #petitparser. |
15 self breakPoint: #petitparser. |
16 1 to: 255 do: [ :index | aBlock value: (Character codePoint: index) ] |
16 1 to: 255 do: [ :index | aBlock value: (Character codePoint: index) ] |
17 "/ 1 to: 256 do: [ :index | aBlock value: (Character codePoint: index) ] |
17 "/ 1 to: 256 do: [ :index | aBlock value: (Character codePoint: index) ] |
18 |
18 |
19 "Modified: / 19-12-2010 / 16:58:58 / Jan Kurs <kurs.jan@post.cz>" |
19 "Modified: / 19-12-2010 / 16:58:58 / Jan Kurs <kurs.jan@post.cz>" |
20 ! ! |
20 ! ! |
21 |
21 |
25 | block parser | |
25 | block parser | |
26 block := [ :char | char = $* ]. |
26 block := [ :char | char = $* ]. |
27 parser := PPPredicateObjectParser on: block message: 'starlet'. |
27 parser := PPPredicateObjectParser on: block message: 'starlet'. |
28 self assert: parser block = block. |
28 self assert: parser block = block. |
29 self assert: parser message = 'starlet'. |
29 self assert: parser message = 'starlet'. |
30 |
30 |
31 self assertCharacterSets: parser. |
31 self assertCharacterSets: parser. |
32 self assert: parser parse: '*' to: $*. |
32 self assert: parser parse: '*' to: $*. |
33 self assert: parser parse: '**' to: $* end: 1. |
33 self assert: parser parse: '**' to: $* end: 1. |
34 self assert: parser fail: ''. |
34 self assert: parser fail: ''. |
35 self assert: parser fail: '1'. |
35 self assert: parser fail: '1'. |
234 |
234 |
235 !PPPredicateTest methodsFor:'testing-sequence'! |
235 !PPPredicateTest methodsFor:'testing-sequence'! |
236 |
236 |
237 testSequenceParser |
237 testSequenceParser |
238 | parser | |
238 | parser | |
239 parser := PPPredicateSequenceParser |
239 parser := PPPredicateSequenceParser |
240 on: [ :value | value first isUppercase ] |
240 on: [ :value | value first isUppercase ] |
241 message: 'uppercase 3 letter words' |
241 message: 'uppercase 3 letter words' |
242 size: 3. |
242 size: 3. |
243 self assert: parser size = 3. |
243 self assert: parser size = 3. |
244 self assert: parser parse: 'Abc'. |
244 self assert: parser parse: 'Abc'. |
245 self assert: parser parse: 'ABc'. |
245 self assert: parser parse: 'ABc'. |
246 self assert: parser parse: 'ABC'. |
246 self assert: parser parse: 'ABC'. |
247 self assert: parser fail: 'abc'. |
247 self assert: parser fail: 'abc'. |
248 self assert: parser fail: 'aBC'. |
248 self assert: parser fail: 'aBC'. |
249 self assert: parser fail: 'Ab'. |
249 self assert: parser fail: 'Ab'. |
250 |
250 |
251 parser := parser negate. |
251 parser := parser negate. |
252 self assert: parser size = 3. |
252 self assert: parser size = 3. |
253 self assert: parser fail: 'Abc'. |
253 self assert: parser fail: 'Abc'. |
254 self assert: parser fail: 'ABc'. |
254 self assert: parser fail: 'ABc'. |
255 self assert: parser fail: 'ABC'. |
255 self assert: parser fail: 'ABC'. |
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." |
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 |
265 |
266 | positives negatives | |
266 | positives negatives | |
267 positives := self parsedCharacterSet: aParser. |
267 positives := self parsedCharacterSet: aParser. |
268 negatives := self parsedCharacterSet: aParser negate. |
268 negatives := self parsedCharacterSet: aParser negate. |
269 self charactersDo: [ :char | |
269 self charactersDo: [ :char | |
270 | positive negative | |
270 | positive negative | |
271 positive := positives includes: char. |
271 positive := positives includes: char. |
272 negative := negatives includes: char. |
272 negative := negatives includes: char. |
273 self |
273 self |
274 assert: ((positive and: [ negative not ]) |
274 assert: ((positive and: [ negative not ]) |
275 or: [ positive not and: [ negative ] ]) |
275 or: [ positive not and: [ negative ] ]) |
276 description: char printString , ' should be in exactly one set' ] |
276 description: char printString , ' should be in exactly one set' ] |
277 ! |
277 ! |
278 |
278 |