PPPredicateTest.st
changeset 4 90de244a7fa2
parent 0 739fe9b7253e
child 44 16f1a2fdc0d7
equal deleted inserted replaced
3:e1b11f74e142 4:90de244a7fa2
     1 "{ Package: 'squeak:petitparser' }"
     1 "{ Package: 'stx:goodies/petitparser' }"
     2 
     2 
     3 PPAbstractParseTest subclass:#PPPredicateTest
     3 PPAbstractParseTest subclass:#PPPredicateTest
     4 	instanceVariableNames:''
     4 	instanceVariableNames:''
     5 	classVariableNames:''
     5 	classVariableNames:''
     6 	poolDictionaries:''
     6 	poolDictionaries:''
     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 
   286 ! !
   286 ! !
   287 
   287 
   288 !PPPredicateTest class methodsFor:'documentation'!
   288 !PPPredicateTest class methodsFor:'documentation'!
   289 
   289 
   290 version_SVN
   290 version_SVN
   291     ^ '$Id: PPPredicateTest.st,v 1.1 2011-08-18 18:56:17 cg Exp $'
   291     ^ '$Id: PPPredicateTest.st,v 1.2 2012-01-13 11:22:50 cg Exp $'
   292 ! !
   292 ! !