tests/PPParserTest.st
changeset 377 6112a403a52d
parent 376 a2656b27cace
child 379 451b5ae38b72
equal deleted inserted replaced
376:a2656b27cace 377:6112a403a52d
    11 !PPParserTest methodsFor:'testing'!
    11 !PPParserTest methodsFor:'testing'!
    12 
    12 
    13 testAnd
    13 testAnd
    14 	| parser |
    14 	| parser |
    15 	parser := 'foo' asParser flatten , 'bar' asParser flatten and.
    15 	parser := 'foo' asParser flatten , 'bar' asParser flatten and.
    16 	
    16 	self
    17 	self assert: parser parse: 'foobar' to: #('foo' 'bar') end: 3.
    17 		assert: parser
       
    18 		parse: 'foobar'
       
    19 		to: #('foo' 'bar')
       
    20 		end: 3.
    18 	self assert: parser fail: 'foobaz'.
    21 	self assert: parser fail: 'foobaz'.
    19 	
       
    20 	parser := 'foo' asParser and.
    22 	parser := 'foo' asParser and.
    21 	self assert: parser and = parser
    23 	self assert: parser and equals: parser
    22 !
    24 !
    23 
    25 
    24 testBlock
    26 testBlock
    25 	| parser |
    27 	| parser |
    26 	parser := [ :s | s next ] asParser.
    28 	parser := [ :s | s next ] asParser.
    91 !
    93 !
    92 
    94 
    93 testEndOfInput
    95 testEndOfInput
    94 	| parser |
    96 	| parser |
    95 	parser := PPEndOfInputParser on: $a asParser.
    97 	parser := PPEndOfInputParser on: $a asParser.
    96 	self assert: parser end = parser.
    98 	self assert: parser end equals: parser.
    97 	
       
    98 	self assert: parser parse: 'a' to: $a.
    99 	self assert: parser parse: 'a' to: $a.
    99 	self assert: parser fail: ''.
   100 	self assert: parser fail: ''.
   100 	self assert: parser fail: 'aa'
   101 	self assert: parser fail: 'aa'
   101 !
   102 !
   102 
   103 
   119 !
   120 !
   120 
   121 
   121 testFailing
   122 testFailing
   122 	| parser result |
   123 	| parser result |
   123 	parser := PPFailingParser message: 'Plonk'.
   124 	parser := PPFailingParser message: 'Plonk'.
   124 	self assert: parser message = 'Plonk'.
   125 	self assert: parser message equals: 'Plonk'.
   125 	
       
   126 	self assert: parser fail: ''.
   126 	self assert: parser fail: ''.
   127 	self assert: parser fail: 'a'.
   127 	self assert: parser fail: 'a'.
   128 	self assert: parser fail: 'aa'.
   128 	self assert: parser fail: 'aa'.
   129 	
       
   130 	result := parser parse: 'a'.
   129 	result := parser parse: 'a'.
   131 	self assert: result message = 'Plonk'.
   130 	self assert: result message equals: 'Plonk'.
   132 	self assert: result printString = 'Plonk at 0'
   131 	self assert: result printString equals: 'Plonk at 0'
   133 !
   132 !
   134 
   133 
   135 testLiteralObject
   134 testLiteralObject
   136 	| parser |
   135 	| parser |
   137 	parser := PPLiteralObjectParser 
   136 	parser := PPLiteralObjectParser on: $a message: 'letter "a" expected'.
   138 		on: $a
   137 	self assert: parser literal equals: $a.
   139 		message: 'letter "a" expected'.
   138 	self assert: parser message equals: 'letter "a" expected'.
   140 	self assert: parser literal = $a.
       
   141 	self assert: parser message = 'letter "a" expected'.
       
   142 	
       
   143 	self assert: parser parse: 'a' to: $a.
   139 	self assert: parser parse: 'a' to: $a.
   144 	self assert: parser fail: 'b'
   140 	self assert: parser fail: 'b'
   145 	
       
   146 !
   141 !
   147 
   142 
   148 testLiteralObjectCaseInsensitive
   143 testLiteralObjectCaseInsensitive
   149 	| parser |
   144 	| parser |
   150 	parser := $a asParser caseInsensitive.
   145 	parser := $a asParser caseInsensitive.
   158 	
   153 	
   159 !
   154 !
   160 
   155 
   161 testLiteralSequence
   156 testLiteralSequence
   162 	| parser |
   157 	| parser |
   163 	parser := PPLiteralSequenceParser 
   158 	parser := PPLiteralSequenceParser on: 'abc' message: 'sequence "abc" expected'.
   164 		on: 'abc'
   159 	self assert: parser size equals: 3.
   165 		message: 'sequence "abc" expected'.
   160 	self assert: parser literal equals: 'abc'.
   166 	self assert: parser size = 3.
   161 	self assert: parser message equals: 'sequence "abc" expected'.
   167 	self assert: parser literal = 'abc'.
       
   168 	self assert: parser message = 'sequence "abc" expected'.
       
   169 	
       
   170 	self assert: parser parse: 'abc' to: 'abc'.
   162 	self assert: parser parse: 'abc' to: 'abc'.
   171 	self assert: parser fail: 'ab'.
   163 	self assert: parser fail: 'ab'.
   172 	self assert: parser fail: 'abd'
   164 	self assert: parser fail: 'abd'
   173 !
   165 !
   174 
   166 
   186 !
   178 !
   187 
   179 
   188 testMax
   180 testMax
   189 	| parser |
   181 	| parser |
   190 	parser := $a asParser max: 2.
   182 	parser := $a asParser max: 2.
   191 	self assert: parser min = 0.
   183 	self assert: parser min equals: 0.
   192 	self assert: parser max = 2.
   184 	self assert: parser max equals: 2.
   193 
       
   194 	self assert: parser parse: '' to: #().
   185 	self assert: parser parse: '' to: #().
   195 	self assert: parser parse: 'a' to: #($a).
   186 	self assert: parser parse: 'a' to: #($a).
   196 	self assert: parser parse: 'aa' to: #($a $a).
   187 	self assert: parser parse: 'aa' to: #($a $a).
   197 	self assert: parser parse: 'aaa' to: #($a $a) end: 2.
   188 	self
   198 	self assert: parser parse: 'aaaa' to: #($a $a) end: 2.
   189 		assert: parser
   199 	
   190 		parse: 'aaa'
       
   191 		to: #($a $a)
       
   192 		end: 2.
       
   193 	self
       
   194 		assert: parser
       
   195 		parse: 'aaaa'
       
   196 		to: #($a $a)
       
   197 		end: 2.
   200 	self assert: (parser printString endsWith: '[0, 2]')
   198 	self assert: (parser printString endsWith: '[0, 2]')
   201 !
   199 !
   202 
   200 
   203 testMaxGreedy
   201 testMaxGreedy
   204 	| parser |
   202 	| parser |
   247 !
   245 !
   248 
   246 
   249 testMemoized
   247 testMemoized
   250 	| count parser twice |
   248 	| count parser twice |
   251 	count := 0.
   249 	count := 0.
   252 	parser := [ :s | count := count + 1. s next ] asParser memoized.
   250 	parser := [ :s | 
       
   251 	count := count + 1.
       
   252 	s next ] asParser memoized.
   253 	twice := parser and , parser.
   253 	twice := parser and , parser.
   254 	
       
   255 	count := 0.
   254 	count := 0.
   256 	self assert: parser parse: 'a' to: $a.
   255 	self assert: parser parse: 'a' to: $a.
   257 	self assert: count = 1.
   256 	self assert: count equals: 1.
   258 
       
   259 	count := 0.
   257 	count := 0.
   260 	self assert: twice parse: 'a' to: #($a $a).
   258 	self assert: twice parse: 'a' to: #($a $a).
   261 	self assert: count = 1.
   259 	self assert: count equals: 1.
   262 	
   260 	self assert: parser memoized equals: parser
   263 	self assert: parser memoized = parser
       
   264 !
   261 !
   265 
   262 
   266 testMin
   263 testMin
   267 	| parser |
   264 	| parser |
   268 	parser := $a asParser min: 2.
   265 	parser := $a asParser min: 2.
   269 	self assert: parser min = 2.
   266 	self assert: parser min equals: 2.
   270 	self assert: parser max > parser min.
   267 	self assert: parser max > parser min.
   271 	
       
   272 	self assert: parser fail: ''.
   268 	self assert: parser fail: ''.
   273 	self assert: parser fail: 'a'.
   269 	self assert: parser fail: 'a'.
   274 	self assert: parser parse: 'aa' to: #($a $a).
   270 	self assert: parser parse: 'aa' to: #($a $a).
   275 	self assert: parser parse: 'aaa' to: #($a $a $a).
   271 	self assert: parser parse: 'aaa' to: #($a $a $a).
   276 	self assert: parser parse: 'aaaa' to: #($a $a $a $a).
   272 	self assert: parser parse: 'aaaa' to: #($a $a $a $a).
   277 	
       
   278 	self assert: (parser printString endsWith: '[2, *]')
   273 	self assert: (parser printString endsWith: '[2, *]')
   279 !
   274 !
   280 
   275 
   281 testMinGreedy
   276 testMinGreedy
   282 	| parser |
   277 	| parser |
   351 !
   346 !
   352 
   347 
   353 testMinMax
   348 testMinMax
   354 	| parser |
   349 	| parser |
   355 	parser := $a asParser min: 2 max: 4.
   350 	parser := $a asParser min: 2 max: 4.
   356 	self assert: parser min = 2.
   351 	self assert: parser min equals: 2.
   357 	self assert: parser max = 4.
   352 	self assert: parser max equals: 4.
   358 	
       
   359 	self assert: parser fail: ''.
   353 	self assert: parser fail: ''.
   360 	self assert: parser fail: 'a'.
   354 	self assert: parser fail: 'a'.
   361 	self assert: parser parse: 'aa' to: #($a $a).
   355 	self assert: parser parse: 'aa' to: #($a $a).
   362 	self assert: parser parse: 'aaa' to: #($a $a $a).
   356 	self assert: parser parse: 'aaa' to: #($a $a $a).
   363 	self assert: parser parse: 'aaaa' to: #($a $a $a $a).
   357 	self assert: parser parse: 'aaaa' to: #($a $a $a $a).
   364 	self assert: parser parse: 'aaaaa' to: #($a $a $a $a) end: 4.
   358 	self
   365 	self assert: parser parse: 'aaaaaa' to: #($a $a $a $a) end: 4.
   359 		assert: parser
   366 	
   360 		parse: 'aaaaa'
       
   361 		to: #($a $a $a $a)
       
   362 		end: 4.
       
   363 	self
       
   364 		assert: parser
       
   365 		parse: 'aaaaaa'
       
   366 		to: #($a $a $a $a)
       
   367 		end: 4.
   367 	self assert: (parser printString endsWith: '[2, 4]')
   368 	self assert: (parser printString endsWith: '[2, 4]')
   368 !
   369 !
   369 
   370 
   370 testMinMaxGreedy
   371 testMinMaxGreedy
   371 	| parser |
   372 	| parser |
   476 
   477 
   477 testPluggable
   478 testPluggable
   478 	| block parser |
   479 	| block parser |
   479 	block := [ :stream | stream position ].
   480 	block := [ :stream | stream position ].
   480 	parser := block asParser.
   481 	parser := block asParser.
   481 	self assert: parser block = block
   482 	self assert: parser block equals: block
   482 !
   483 !
   483 
   484 
   484 testPlus
   485 testPlus
   485 	| parser |
   486 	| parser |
   486 	parser := $a asParser plus.
   487 	parser := $a asParser plus.
   487 	
   488 	self assert: parser min equals: 1.
   488 	self assert: parser min = 1.
       
   489 	self assert: parser max > parser min.
   489 	self assert: parser max > parser min.
   490 	
       
   491 	self assert: parser parse: 'a' to: #($a).
   490 	self assert: parser parse: 'a' to: #($a).
   492 	self assert: parser parse: 'aa' to: #($a $a).
   491 	self assert: parser parse: 'aa' to: #($a $a).
   493 	self assert: parser parse: 'aaa' to: #($a $a $a).
   492 	self assert: parser parse: 'aaa' to: #($a $a $a).
   494 	
   493 	self
   495 	self assert: parser parse: 'ab' to: #($a) end: 1.
   494 		assert: parser
   496 	self assert: parser parse: 'aab' to: #($a $a) end: 2.
   495 		parse: 'ab'
   497 	self assert: parser parse: 'aaab' to: #($a $a $a) end: 3.
   496 		to: #($a)
   498 	
   497 		end: 1.
       
   498 	self
       
   499 		assert: parser
       
   500 		parse: 'aab'
       
   501 		to: #($a $a)
       
   502 		end: 2.
       
   503 	self
       
   504 		assert: parser
       
   505 		parse: 'aaab'
       
   506 		to: #($a $a $a)
       
   507 		end: 3.
   499 	self assert: parser fail: ''.
   508 	self assert: parser fail: ''.
   500 	self assert: parser fail: 'b'.
   509 	self assert: parser fail: 'b'.
   501 	self assert: parser fail: 'ba'
   510 	self assert: parser fail: 'ba'
   502 !
   511 !
   503 
   512 
   504 testPlusGreedy
   513 testPlusGreedy
   505 	| limit parser |
   514 	| limit parser |
   506 	limit := #digit asParser.
   515 	limit := #digit asParser.
   507 	parser := #word asParser plusGreedy: limit.
   516 	parser := #word asParser plusGreedy: limit.
   508 	
   517 	self assert: parser min equals: 1.
   509 	self assert: parser min = 1.
   518 	self assert: parser max > parser min.
   510 	self assert: parser max > parser min.	
   519 	self assert: parser limit equals: limit.
   511 	self assert: parser limit = limit.
   520 	self assert: parser children size equals: 2.
   512 	self assert: parser children size = 2.
   521 	self assert: parser children last equals: limit.
   513 	self assert: parser children last = limit.
       
   514 
       
   515 	self assert: parser fail: ''.
   522 	self assert: parser fail: ''.
   516 	self assert: parser fail: '1'.
   523 	self assert: parser fail: '1'.
   517 	self assert: parser fail: 'a'.
   524 	self assert: parser fail: 'a'.
   518 	self assert: parser fail: 'ab'.
   525 	self assert: parser fail: 'ab'.
   519 
   526 	self
   520 	self assert: parser parse: 'a1' to: #($a) end: 1.
   527 		assert: parser
   521 	self assert: parser parse: 'ab1' to: #($a $b) end: 2.
   528 		parse: 'a1'
   522 	self assert: parser parse: 'abc1' to: #($a $b $c) end: 3.
   529 		to: #($a)
   523 	self assert: parser parse: 'a12' to: #($a $1) end: 2.
   530 		end: 1.
   524 	self assert: parser parse: 'ab12' to: #($a $b $1) end: 3.
   531 	self
   525 	self assert: parser parse: 'abc12' to: #($a $b $c $1) end: 4.
   532 		assert: parser
   526 	self assert: parser parse: 'a123' to: #($a $1 $2) end: 3.
   533 		parse: 'ab1'
   527 	self assert: parser parse: 'ab123' to: #($a $b $1 $2) end: 4.
   534 		to: #($a $b)
   528 	self assert: parser parse: 'abc123' to: #($a $b $c $1 $2) end: 5.
   535 		end: 2.
       
   536 	self
       
   537 		assert: parser
       
   538 		parse: 'abc1'
       
   539 		to: #($a $b $c)
       
   540 		end: 3.
       
   541 	self
       
   542 		assert: parser
       
   543 		parse: 'a12'
       
   544 		to: #($a $1)
       
   545 		end: 2.
       
   546 	self
       
   547 		assert: parser
       
   548 		parse: 'ab12'
       
   549 		to: #($a $b $1)
       
   550 		end: 3.
       
   551 	self
       
   552 		assert: parser
       
   553 		parse: 'abc12'
       
   554 		to: #($a $b $c $1)
       
   555 		end: 4.
       
   556 	self
       
   557 		assert: parser
       
   558 		parse: 'a123'
       
   559 		to: #($a $1 $2)
       
   560 		end: 3.
       
   561 	self
       
   562 		assert: parser
       
   563 		parse: 'ab123'
       
   564 		to: #($a $b $1 $2)
       
   565 		end: 4.
       
   566 	self
       
   567 		assert: parser
       
   568 		parse: 'abc123'
       
   569 		to: #($a $b $c $1 $2)
       
   570 		end: 5
   529 !
   571 !
   530 
   572 
   531 testPlusLazy
   573 testPlusLazy
   532 	| limit parser |
   574 	| limit parser |
   533 	limit := #digit asParser.
   575 	limit := #digit asParser.
   534 	parser := #word asParser plusLazy: limit.
   576 	parser := #word asParser plusLazy: limit.
   535 	
   577 	self assert: parser min equals: 1.
   536 	self assert: parser min = 1.
   578 	self assert: parser max > parser min.
   537 	self assert: parser max > parser min.	
   579 	self assert: parser limit equals: limit.
   538 	self assert: parser limit = limit.
   580 	self assert: parser children size equals: 2.
   539 	self assert: parser children size = 2.
   581 	self assert: parser children last equals: limit.
   540 	self assert: parser children last = limit.
       
   541 
       
   542 	self assert: parser fail: ''.
   582 	self assert: parser fail: ''.
   543 	self assert: parser fail: '1'.
   583 	self assert: parser fail: '1'.
   544 	self assert: parser fail: 'a'.
   584 	self assert: parser fail: 'a'.
   545 	self assert: parser fail: 'ab'.
   585 	self assert: parser fail: 'ab'.
   546 
   586 	self
   547 	self assert: parser parse: 'a1' to: #($a) end: 1.
   587 		assert: parser
   548 	self assert: parser parse: 'ab1' to: #($a $b) end: 2.
   588 		parse: 'a1'
   549 	self assert: parser parse: 'abc1' to: #($a $b $c) end: 3.
   589 		to: #($a)
   550 	self assert: parser parse: 'a12' to: #($a) end: 1.
   590 		end: 1.
   551 	self assert: parser parse: 'ab12' to: #($a $b) end: 2.
   591 	self
   552 	self assert: parser parse: 'abc12' to: #($a $b $c) end: 3.
   592 		assert: parser
   553 	self assert: parser parse: 'a123' to: #($a) end: 1.
   593 		parse: 'ab1'
   554 	self assert: parser parse: 'ab123' to: #($a $b) end: 2.
   594 		to: #($a $b)
   555 	self assert: parser parse: 'abc123' to: #($a $b $c) end: 3
   595 		end: 2.
       
   596 	self
       
   597 		assert: parser
       
   598 		parse: 'abc1'
       
   599 		to: #($a $b $c)
       
   600 		end: 3.
       
   601 	self
       
   602 		assert: parser
       
   603 		parse: 'a12'
       
   604 		to: #($a)
       
   605 		end: 1.
       
   606 	self
       
   607 		assert: parser
       
   608 		parse: 'ab12'
       
   609 		to: #($a $b)
       
   610 		end: 2.
       
   611 	self
       
   612 		assert: parser
       
   613 		parse: 'abc12'
       
   614 		to: #($a $b $c)
       
   615 		end: 3.
       
   616 	self
       
   617 		assert: parser
       
   618 		parse: 'a123'
       
   619 		to: #($a)
       
   620 		end: 1.
       
   621 	self
       
   622 		assert: parser
       
   623 		parse: 'ab123'
       
   624 		to: #($a $b)
       
   625 		end: 2.
       
   626 	self
       
   627 		assert: parser
       
   628 		parse: 'abc123'
       
   629 		to: #($a $b $c)
       
   630 		end: 3
   556 !
   631 !
   557 
   632 
   558 testSeparatedBy
   633 testSeparatedBy
   559 	| parser |
   634 	| parser |
   560 	parser := $a asParser separatedBy: $b asParser.
   635 	parser := $a asParser separatedBy: $b asParser.
   607 !
   682 !
   608 
   683 
   609 testStar
   684 testStar
   610 	| parser |
   685 	| parser |
   611 	parser := $a asParser star.
   686 	parser := $a asParser star.
   612 	
   687 	self assert: parser min equals: 0.
   613 	self assert: parser min = 0.
       
   614 	self assert: parser max > parser min.
   688 	self assert: parser max > parser min.
   615 	
       
   616 	self assert: parser parse: '' to: #().
   689 	self assert: parser parse: '' to: #().
   617 	self assert: parser parse: 'a' to: #($a).
   690 	self assert: parser parse: 'a' to: #($a).
   618 	self assert: parser parse: 'aa' to: #($a $a).
   691 	self assert: parser parse: 'aa' to: #($a $a).
   619 	self assert: parser parse: 'aaa' to: #($a $a $a).
   692 	self assert: parser parse: 'aaa' to: #($a $a $a).
   620 	
   693 	self
   621 	self assert: parser parse: 'b' to: #() end: 0.
   694 		assert: parser
   622 	self assert: parser parse: 'ab' to: #($a) end: 1.
   695 		parse: 'b'
   623 	self assert: parser parse: 'aab' to: #($a $a) end: 2.
   696 		to: #()
   624 	self assert: parser parse: 'aaab' to: #($a $a $a) end: 3
   697 		end: 0.
       
   698 	self
       
   699 		assert: parser
       
   700 		parse: 'ab'
       
   701 		to: #($a)
       
   702 		end: 1.
       
   703 	self
       
   704 		assert: parser
       
   705 		parse: 'aab'
       
   706 		to: #($a $a)
       
   707 		end: 2.
       
   708 	self
       
   709 		assert: parser
       
   710 		parse: 'aaab'
       
   711 		to: #($a $a $a)
       
   712 		end: 3
   625 !
   713 !
   626 
   714 
   627 testStarGreedy
   715 testStarGreedy
   628 	| limit parser |
   716 	| limit parser |
   629 	limit := #digit asParser.
   717 	limit := #digit asParser.
   630 	parser := #word asParser starGreedy: limit.
   718 	parser := #word asParser starGreedy: limit.
   631 	
   719 	self assert: parser min equals: 0.
   632 	self assert: parser min = 0.
       
   633 	self assert: parser max > parser min.
   720 	self assert: parser max > parser min.
   634 	self assert: parser limit = limit.
   721 	self assert: parser limit equals: limit.
   635 	self assert: parser children size = 2.
   722 	self assert: parser children size equals: 2.
   636 	self assert: parser children last = limit.
   723 	self assert: parser children last equals: limit.
   637 
       
   638 	self assert: parser fail: ''.
   724 	self assert: parser fail: ''.
   639 	self assert: parser fail: 'a'.
   725 	self assert: parser fail: 'a'.
   640 	self assert: parser fail: 'ab'.
   726 	self assert: parser fail: 'ab'.
   641 
   727 	self
   642 	self assert: parser parse: '1' to: #() end: 0.
   728 		assert: parser
   643 	self assert: parser parse: 'a1' to: #($a) end: 1.
   729 		parse: '1'
   644 	self assert: parser parse: 'ab1' to: #($a $b) end: 2.
   730 		to: #()
   645 	self assert: parser parse: 'abc1' to: #($a $b $c) end: 3.
   731 		end: 0.
   646 	self assert: parser parse: '12' to: #($1) end: 1.
   732 	self
   647 	self assert: parser parse: 'a12' to: #($a $1) end: 2.
   733 		assert: parser
   648 	self assert: parser parse: 'ab12' to: #($a $b $1) end: 3.
   734 		parse: 'a1'
   649 	self assert: parser parse: 'abc12' to: #($a $b $c $1) end: 4.
   735 		to: #($a)
   650 	self assert: parser parse: '123' to: #($1 $2) end: 2.
   736 		end: 1.
   651 	self assert: parser parse: 'a123' to: #($a $1 $2) end: 3.
   737 	self
   652 	self assert: parser parse: 'ab123' to: #($a $b $1 $2) end: 4.
   738 		assert: parser
   653 	self assert: parser parse: 'abc123' to: #($a $b $c $1 $2) end: 5
   739 		parse: 'ab1'
       
   740 		to: #($a $b)
       
   741 		end: 2.
       
   742 	self
       
   743 		assert: parser
       
   744 		parse: 'abc1'
       
   745 		to: #($a $b $c)
       
   746 		end: 3.
       
   747 	self
       
   748 		assert: parser
       
   749 		parse: '12'
       
   750 		to: #($1)
       
   751 		end: 1.
       
   752 	self
       
   753 		assert: parser
       
   754 		parse: 'a12'
       
   755 		to: #($a $1)
       
   756 		end: 2.
       
   757 	self
       
   758 		assert: parser
       
   759 		parse: 'ab12'
       
   760 		to: #($a $b $1)
       
   761 		end: 3.
       
   762 	self
       
   763 		assert: parser
       
   764 		parse: 'abc12'
       
   765 		to: #($a $b $c $1)
       
   766 		end: 4.
       
   767 	self
       
   768 		assert: parser
       
   769 		parse: '123'
       
   770 		to: #($1 $2)
       
   771 		end: 2.
       
   772 	self
       
   773 		assert: parser
       
   774 		parse: 'a123'
       
   775 		to: #($a $1 $2)
       
   776 		end: 3.
       
   777 	self
       
   778 		assert: parser
       
   779 		parse: 'ab123'
       
   780 		to: #($a $b $1 $2)
       
   781 		end: 4.
       
   782 	self
       
   783 		assert: parser
       
   784 		parse: 'abc123'
       
   785 		to: #($a $b $c $1 $2)
       
   786 		end: 5
   654 !
   787 !
   655 
   788 
   656 testStarLazy
   789 testStarLazy
   657 	| limit parser |
   790 	| limit parser |
   658 	limit := #digit asParser.
   791 	limit := #digit asParser.
   659 	parser := #word asParser starLazy: limit.
   792 	parser := #word asParser starLazy: limit.
   660 	
   793 	self assert: parser min equals: 0.
   661 	self assert: parser min = 0.
       
   662 	self assert: parser max > parser min.
   794 	self assert: parser max > parser min.
   663 	self assert: parser limit = limit.
   795 	self assert: parser limit equals: limit.
   664 	self assert: parser children size = 2.
   796 	self assert: parser children size equals: 2.
   665 	self assert: parser children last = limit.
   797 	self assert: parser children last equals: limit.
   666 
       
   667 	self assert: parser fail: ''.
   798 	self assert: parser fail: ''.
   668 	self assert: parser fail: 'a'.
   799 	self assert: parser fail: 'a'.
   669 	self assert: parser fail: 'ab'.
   800 	self assert: parser fail: 'ab'.
   670 
   801 	self
   671 	self assert: parser parse: '1' to: #() end: 0.
   802 		assert: parser
   672 	self assert: parser parse: 'a1' to: #($a) end: 1.
   803 		parse: '1'
   673 	self assert: parser parse: 'ab1' to: #($a $b) end: 2.
   804 		to: #()
   674 	self assert: parser parse: 'abc1' to: #($a $b $c) end: 3.
   805 		end: 0.
   675 	self assert: parser parse: '12' to: #() end: 0.
   806 	self
   676 	self assert: parser parse: 'a12' to: #($a) end: 1.
   807 		assert: parser
   677 	self assert: parser parse: 'ab12' to: #($a $b) end: 2.
   808 		parse: 'a1'
   678 	self assert: parser parse: 'abc12' to: #($a $b $c) end: 3.
   809 		to: #($a)
   679 	self assert: parser parse: '123' to: #() end: 0.
   810 		end: 1.
   680 	self assert: parser parse: 'a123' to: #($a) end: 1.
   811 	self
   681 	self assert: parser parse: 'ab123' to: #($a $b) end: 2.
   812 		assert: parser
   682 	self assert: parser parse: 'abc123' to: #($a $b $c) end: 3
   813 		parse: 'ab1'
       
   814 		to: #($a $b)
       
   815 		end: 2.
       
   816 	self
       
   817 		assert: parser
       
   818 		parse: 'abc1'
       
   819 		to: #($a $b $c)
       
   820 		end: 3.
       
   821 	self
       
   822 		assert: parser
       
   823 		parse: '12'
       
   824 		to: #()
       
   825 		end: 0.
       
   826 	self
       
   827 		assert: parser
       
   828 		parse: 'a12'
       
   829 		to: #($a)
       
   830 		end: 1.
       
   831 	self
       
   832 		assert: parser
       
   833 		parse: 'ab12'
       
   834 		to: #($a $b)
       
   835 		end: 2.
       
   836 	self
       
   837 		assert: parser
       
   838 		parse: 'abc12'
       
   839 		to: #($a $b $c)
       
   840 		end: 3.
       
   841 	self
       
   842 		assert: parser
       
   843 		parse: '123'
       
   844 		to: #()
       
   845 		end: 0.
       
   846 	self
       
   847 		assert: parser
       
   848 		parse: 'a123'
       
   849 		to: #($a)
       
   850 		end: 1.
       
   851 	self
       
   852 		assert: parser
       
   853 		parse: 'ab123'
       
   854 		to: #($a $b)
       
   855 		end: 2.
       
   856 	self
       
   857 		assert: parser
       
   858 		parse: 'abc123'
       
   859 		to: #($a $b $c)
       
   860 		end: 3
   683 !
   861 !
   684 
   862 
   685 testTimes
   863 testTimes
   686 	| parser |
   864 	| parser |
   687 	parser := $a asParser times: 2.
   865 	parser := $a asParser times: 2.
   744 
   922 
   745 testNamed
   923 testNamed
   746 	| parser |
   924 	| parser |
   747 	parser := PPSequenceParser new.
   925 	parser := PPSequenceParser new.
   748 	self assert: parser name isNil.
   926 	self assert: parser name isNil.
   749 	
       
   750 	parser := PPChoiceParser named: 'choice'.
   927 	parser := PPChoiceParser named: 'choice'.
   751 	self assert: parser name = 'choice'.
   928 	self assert: parser name equals: 'choice'.
   752 	
       
   753 	parser := $* asParser name: 'star'.
   929 	parser := $* asParser name: 'star'.
   754 	self assert: parser name = 'star'
   930 	self assert: parser name equals: 'star'
   755 !
   931 !
   756 
   932 
   757 testPrint
   933 testPrint
   758 	| parser |
   934 	| parser |
   759 	parser := PPParser new.
   935 	parser := PPParser new.
   760 	self assert: (parser printString findString: 'PPParser') > 0.
   936 	self assert: (parser printString includesSubstring: 'PPParser').
   761 	
   937 	
   762 	parser := PPParser named: 'choice'.
   938 	parser := PPParser named: 'choice'.
   763 	self assert: (parser printString findString: 'PPParser(choice') > 0.
   939 	self assert: (parser printString includesSubstring: 'PPParser(choice').
   764 	
   940 	
   765 	parser := PPLiteralObjectParser on: $a.
   941 	parser := PPLiteralObjectParser on: $a.
   766 	self assert: (parser printString findString: '$a') > 0.
   942 	self assert: (parser printString includesSubstring: '$a').
   767 	
   943 	
   768 	parser := PPFailingParser message: 'error'.
   944 	parser := PPFailingParser message: 'error'.
   769 	self assert: (parser printString findString: 'error') > 0.
   945 	self assert: (parser printString includesSubstring: 'error').
   770 	
   946 	
   771 	parser := PPPredicateObjectParser on: [ :c | true ] message: 'error'.
   947 	parser := PPPredicateObjectParser on: [ :c | true ] message: 'error'.
   772 	self assert: (parser printString findString: 'error') > 0
   948 	self assert: (parser printString includesSubstring: 'error')
   773 ! !
   949 ! !
   774 
   950 
   775 !PPParserTest methodsFor:'testing-fixtures'!
   951 !PPParserTest methodsFor:'testing-fixtures'!
   776 
   952 
   777 testSideEffectChoice
   953 testSideEffectChoice
   831 
  1007 
   832 testAction
  1008 testAction
   833 	| block parser |
  1009 	| block parser |
   834 	block := [ :char | char asUppercase ].
  1010 	block := [ :char | char asUppercase ].
   835 	parser := #any asParser ==> block.
  1011 	parser := #any asParser ==> block.
   836 	self assert: parser block = block.
  1012 	self assert: parser block equals: block.
   837 
       
   838 	self assert: parser parse: 'a' to: $A.
  1013 	self assert: parser parse: 'a' to: $A.
   839 	self assert: parser parse: 'b' to: $B
  1014 	self assert: parser parse: 'b' to: $B
   840 !
  1015 !
   841 
  1016 
   842 testAnswer
  1017 testAnswer
   963 !
  1138 !
   964 
  1139 
   965 testToken
  1140 testToken
   966 	| parser |
  1141 	| parser |
   967 	parser := $a asParser token.
  1142 	parser := $a asParser token.
   968 	self assert: parser tokenClass = PPToken.
  1143 	self assert: parser tokenClass equals: PPToken.
   969 	self assert: parser parse: 'a' toToken: 1 stop: 1.	
  1144 	self
       
  1145 		assert: parser
       
  1146 		parse: 'a'
       
  1147 		toToken: 1
       
  1148 		stop: 1.
   970 	self assert: parser fail: 'b'.
  1149 	self assert: parser fail: 'b'.
   971 	self assert: parser fail: ''.
  1150 	self assert: parser fail: ''.
   972 	
       
   973 	parser := $a asParser token: PPToken.
  1151 	parser := $a asParser token: PPToken.
   974 	self assert: parser tokenClass = PPToken.
  1152 	self assert: parser tokenClass equals: PPToken.
   975 	self assert: parser parse: 'a' toToken: 1 stop: 1.	
  1153 	self
       
  1154 		assert: parser
       
  1155 		parse: 'a'
       
  1156 		toToken: 1
       
  1157 		stop: 1.
   976 	self assert: parser fail: ''.
  1158 	self assert: parser fail: ''.
   977 	self assert: parser fail: 'b'
  1159 	self assert: parser fail: 'b'
   978 !
  1160 !
   979 
  1161 
   980 testTrim
  1162 testTrim
  1075 	self assert: parser fail: 'b'
  1257 	self assert: parser fail: 'b'
  1076 !
  1258 !
  1077 
  1259 
  1078 testWrapping
  1260 testWrapping
  1079 	| parser result |
  1261 	| parser result |
  1080 	parser := #digit asParser plus >=> [ :stream :cc | 
  1262 	parser := #digit asParser plus >=> [ :stream :cc | Array with: stream position with: cc value with: stream position ].
  1081 		Array 
  1263 	self assert: parser parse: '1' to: #(0 #($1) 1).
  1082 			with: stream position 
  1264 	self assert: parser parse: '12' to: #(0 #($1 $2) 2).
  1083 			with: cc value 
  1265 	self assert: parser parse: '123' to: #(0 #($1 $2 $3) 3).
  1084 			with: stream position ].
       
  1085 
       
  1086 	self assert: parser parse: '1' to: #(0 ($1) 1).
       
  1087 	self assert: parser parse: '12' to: #(0 ($1 $2) 2).
       
  1088 	self assert: parser parse: '123' to: #(0 ($1 $2 $3) 3).
       
  1089 	
       
  1090 	result := parser parse: 'a'.
  1266 	result := parser parse: 'a'.
  1091 	self assert: result first = 0.
  1267 	self assert: result first equals: 0.
  1092 	self assert: result second isPetitFailure.
  1268 	self assert: result second isPetitFailure.
  1093 	self assert: result last = 0
  1269 	self assert: result last equals: 0
  1094 ! !
  1270 ! !
  1095 
  1271 
  1096 !PPParserTest methodsFor:'testing-properties'!
  1272 !PPParserTest methodsFor:'testing-properties'!
  1097 
  1273 
  1098 testHasProperty
  1274 testHasProperty
  1159 	p1 := #lowercase asParser.
  1335 	p1 := #lowercase asParser.
  1160 	p2 := p1 ==> #asUppercase.
  1336 	p2 := p1 ==> #asUppercase.
  1161 	p3 := PPUnresolvedParser new.
  1337 	p3 := PPUnresolvedParser new.
  1162 	p3 def: p2 / p3.
  1338 	p3 def: p2 / p3.
  1163 	self assert: p1 children isEmpty.
  1339 	self assert: p1 children isEmpty.
  1164 	self assert: p2 children size = 1.
  1340 	self assert: p2 children size equals: 1.
  1165 	self assert: p3 children size = 2
  1341 	self assert: p3 children size equals: 2
  1166 !
  1342 !
  1167 
  1343 
  1168 testFailure
  1344 testFailure
  1169 	| failure |
  1345 	| failure |
  1170 	failure := PPFailure message: 'Error' at: 3.
  1346 	failure := PPFailure message: 'Error' context: PPContext new at: 3.
  1171 	
  1347 	self assert: failure message equals: 'Error'.
  1172 	self assert: failure message = 'Error'.
  1348 	self assert: failure position equals: 3.
  1173 	self assert: failure position = 3.
       
  1174 	self assert: failure isPetitFailure.
  1349 	self assert: failure isPetitFailure.
  1175 
       
  1176 	self deny: 4 isPetitFailure.
  1350 	self deny: 4 isPetitFailure.
  1177 	self deny: 'foo' isPetitFailure
  1351 	self deny: 'foo' isPetitFailure
  1178 !
  1352 !
  1179 
  1353 
  1180 testListConstructor
  1354 testListConstructor
  1181 	| p1 p2 p3 |
  1355 	| p1 p2 p3 |
  1182 	p1 := PPChoiceParser with: $a asParser.
  1356 	p1 := PPChoiceParser with: $a asParser.
  1183 	p2 := PPChoiceParser with: $a asParser with: $b asParser.
  1357 	p2 := PPChoiceParser with: $a asParser with: $b asParser.
  1184 	p3 := PPChoiceParser withAll: (Array with: $a asParser with: $b asParser with: $c asParser).
  1358 	p3 := PPChoiceParser withAll: (Array with: $a asParser with: $b asParser with: $c asParser).
  1185 	
  1359 	self assert: p1 children size equals: 1.
  1186 	self assert: p1 children size = 1.
  1360 	self assert: p2 children size equals: 2.
  1187 	self assert: p2 children size = 2.
  1361 	self assert: p3 children size equals: 3
  1188 	self assert: p3 children size = 3
       
  1189 !
  1362 !
  1190 
  1363 
  1191 testMatches
  1364 testMatches
  1192 	| parser |
  1365 	| parser |
  1193 	parser := $a asParser.
  1366 	parser := $a asParser.
  1200 !
  1373 !
  1201 
  1374 
  1202 testMatchesIn
  1375 testMatchesIn
  1203 	| parser result |
  1376 	| parser result |
  1204 	parser := $a asParser.
  1377 	parser := $a asParser.
  1205 	
       
  1206 	result := parser matchesIn: 'abba'.
  1378 	result := parser matchesIn: 'abba'.
  1207 	self assert: result size = 2.
  1379 	self assert: result size equals: 2.
  1208 	self assert: result first = $a.
  1380 	self assert: result first equals: $a.
  1209 	self assert: result last = $a.
  1381 	self assert: result last equals: $a.
  1210 	
       
  1211 	result := parser matchesIn: 'baaah'.
  1382 	result := parser matchesIn: 'baaah'.
  1212 	self assert: result size = 3.
  1383 	self assert: result size equals: 3.
  1213 	self assert: result first = $a.
  1384 	self assert: result first equals: $a.
  1214 	self assert: result last = $a
  1385 	self assert: result last equals: $a
  1215 !
  1386 !
  1216 
  1387 
  1217 testMatchesInEmpty
  1388 testMatchesInEmpty
  1218 	"Empty matches should properly advance and match at each position and at the end."
  1389 	"Empty matches should properly advance and match at each position and at the end."
  1219 
  1390 
  1220 	| parser result |
  1391 	| parser result |
  1221 	parser := [ :stream | stream position ] asParser.
  1392 	parser := [ :stream | stream position ] asParser.
  1222 	
       
  1223 	result := parser matchesIn: '123'.
  1393 	result := parser matchesIn: '123'.
  1224 	self assert: result asArray = #(0 1 2 3)
  1394 	self assert: result asArray equals: #(0 1 2 3)
  1225 !
  1395 !
  1226 
  1396 
  1227 testMatchesInOverlapping
  1397 testMatchesInOverlapping
  1228 	"Matches that overlap should be properly reported."
  1398 	"Matches that overlap should be properly reported."
  1229 
  1399 
  1230 	| parser result |
  1400 	| parser result |
  1231 	parser := #digit asParser , #digit asParser.
  1401 	parser := #digit asParser , #digit asParser.
  1232 	
       
  1233 	result := parser matchesIn: 'a123b'.
  1402 	result := parser matchesIn: 'a123b'.
  1234 	self assert: result size = 2.
  1403 	self assert: result size equals: 2.
  1235 	self assert: result first = #($1 $2).
  1404 	self assert: result first equals: #($1 $2).
  1236 	self assert: result last = #($2 $3)
  1405 	self assert: result last equals: #($2 $3)
  1237 !
  1406 !
  1238 
  1407 
  1239 testMatchesSkipIn
  1408 testMatchesSkipIn
  1240 	| parser result |
  1409 	| parser result |
  1241 	parser := $a asParser.
  1410 	parser := $a asParser.
  1242 	
       
  1243 	result := parser matchesSkipIn: 'abba'.
  1411 	result := parser matchesSkipIn: 'abba'.
  1244 	self assert: result size = 2.
  1412 	self assert: result size equals: 2.
  1245 	self assert: result first = $a.
  1413 	self assert: result first equals: $a.
  1246 	self assert: result last = $a.
  1414 	self assert: result last equals: $a.
  1247 	
       
  1248 	result := parser matchesSkipIn: 'baaah'.
  1415 	result := parser matchesSkipIn: 'baaah'.
  1249 	self assert: result size = 3.
  1416 	self assert: result size equals: 3.
  1250 	self assert: result first = $a.
  1417 	self assert: result first equals: $a.
  1251 	self assert: result last = $a
  1418 	self assert: result last equals: $a
  1252 !
  1419 !
  1253 
  1420 
  1254 testMatchesSkipInOverlapping
  1421 testMatchesSkipInOverlapping
  1255 	"Matches that overlap should be properly reported."
  1422 	"Matches that overlap should be properly reported."
  1256 
  1423 
  1257 	| parser result |
  1424 	| parser result |
  1258 	parser := #digit asParser , #digit asParser.
  1425 	parser := #digit asParser , #digit asParser.
  1259 	
       
  1260 	result := parser matchesSkipIn: 'a123b'.
  1426 	result := parser matchesSkipIn: 'a123b'.
  1261 	self assert: result size = 1.
  1427 	self assert: result size equals: 1.
  1262 	self assert: result first = #($1 $2)
  1428 	self assert: result first equals: #($1 $2)
  1263 !
  1429 !
  1264 
  1430 
  1265 testMatchingRangesIn
  1431 testMatchingRangesIn
  1266 	| input parser result |
  1432 	| input parser result |
  1267 	input := 'a12b3'.
  1433 	input := 'a12b3'.
  1268 	parser := #digit asParser plus.
  1434 	parser := #digit asParser plus.
  1269 	result := parser matchingRangesIn: input.
  1435 	result := parser matchingRangesIn: input.
  1270 	result := result collect: [ :each | input copyFrom: each first to: each last ].
  1436 	result := result collect: [ :each | input copyFrom: each first to: each last ].
  1271 	self assert: result size = 3.
  1437 	self assert: result size equals: 3.
  1272 	self assert: result first = '12'.
  1438 	self assert: result first equals: '12'.
  1273 	self assert: result second = '2'.
  1439 	self assert: result second equals: '2'.
  1274 	self assert: result last = '3'
  1440 	self assert: result last equals: '3'
  1275 !
  1441 !
  1276 
  1442 
  1277 testMatchingSkipRangesIn
  1443 testMatchingSkipRangesIn
  1278 	| input parser result |
  1444 	| input parser result |
  1279 	input := 'a12b3'.
  1445 	input := 'a12b3'.
  1280 	parser := #digit asParser plus.
  1446 	parser := #digit asParser plus.
  1281 	result := parser matchingSkipRangesIn: input.
  1447 	result := parser matchingSkipRangesIn: input.
  1282 	result := result collect: [ :each | input copyFrom: each first to: each last ].
  1448 	result := result collect: [ :each | input copyFrom: each first to: each last ].
  1283 	self assert: result size = 2.
  1449 	self assert: result size equals: 2.
  1284 	self assert: result first = '12'.
  1450 	self assert: result first equals: '12'.
  1285 	self assert: result last = '3'
  1451 	self assert: result last equals: '3'
  1286 !
  1452 !
  1287 
  1453 
  1288 testParse
  1454 testParse
  1289 	| parser result |
  1455 	| parser result |
  1290 	parser := $a asParser.
  1456 	parser := $a asParser.
  1291 	
  1457 	self assert: (parser parse: 'a') equals: $a.
  1292 	self assert: (parser parse: 'a') = $a.
       
  1293 	self assert: (result := parser parse: 'b') isPetitFailure.
  1458 	self assert: (result := parser parse: 'b') isPetitFailure.
  1294 	self assert: (result message findString: '$a') > 0.
  1459 	self assert: (result message includesSubstring: '$a').
  1295 	self assert: (result message findString: 'expected') > 0.
  1460 	self assert: (result message includesSubstring: 'expected').
  1296 	self assert: (result position = 0).
  1461 	self assert: result position equals: 0.
  1297 	
  1462 	self assert: (parser parse: 'a' readStream) equals: $a.
  1298 	self assert: (parser parse: 'a' readStream) = $a.
       
  1299 	self assert: (result := parser parse: 'b' readStream) isPetitFailure.
  1463 	self assert: (result := parser parse: 'b' readStream) isPetitFailure.
  1300 	self assert: (result message findString: '$a') > 0.
  1464 	self assert: (result message includesSubstring: '$a').
  1301 	self assert: (result message findString: 'expected') > 0.
  1465 	self assert: (result message includesSubstring: 'expected').
  1302 	self assert: (result position = 0)
  1466 	self assert: result position equals: 0
  1303 !
  1467 !
  1304 
  1468 
  1305 testParseOnError0
  1469 testParseOnError0
  1306 	| parser result seen |
  1470 	| parser result seen |
  1307 	parser := $a asParser.
  1471 	parser := $a asParser.
  1308 
       
  1309 	result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ].
  1472 	result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ].
  1310 	self assert: result = $a.
  1473 	self assert: result equals: $a.
  1311 
       
  1312 	result := parser parse: 'b' onError: [ seen := true ].
  1474 	result := parser parse: 'b' onError: [ seen := true ].
  1313 	self assert: result.
  1475 	self assert: result.
  1314 	self assert: seen
  1476 	self assert: seen
  1315 !
  1477 !
  1316 
  1478 
  1317 testParseOnError1
  1479 testParseOnError1
  1318 	| parser result seen |
  1480 	| parser result seen |
  1319 	parser := $a asParser.
  1481 	parser := $a asParser.
  1320 
       
  1321 	result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ].
  1482 	result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ].
  1322 	self assert: result = $a.
  1483 	self assert: result equals: $a.
  1323 	
  1484 	result := parser
  1324 	result := parser parse: 'b' onError: [ :failure | 
  1485 		parse: 'b'
  1325 		self assert: (failure position = 0).
  1486 		onError: [ :failure | 
  1326 		self assert: (failure message findString: '$a') > 0.
  1487 			self assert: failure position equals: 0.
  1327 		self assert: (failure message findString: 'expected') > 0.
  1488 			self assert: (failure message includesSubstring: '$a').
  1328 		seen := true ].
  1489 			self assert: (failure message includesSubstring: 'expected').
       
  1490 			seen := true ].
  1329 	self assert: result.
  1491 	self assert: result.
  1330 	self assert: seen
  1492 	self assert: seen
  1331 !
  1493 !
  1332 
  1494 
  1333 testParseOnError2
  1495 testParseOnError2
  1334 	| parser result seen |
  1496 	| parser result seen |
  1335 	parser := $a asParser.
  1497 	parser := $a asParser.
  1336 	
       
  1337 	result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ].
  1498 	result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ].
  1338 	self assert: result = $a.
  1499 	self assert: result equals: $a.
  1339 
  1500 	result := parser
  1340 	result := parser parse: 'b' onError: [ :msg :pos | 
  1501 		parse: 'b'
  1341 		self assert: (msg findString: '$a') > 0.
  1502 		onError: [ :msg :pos | 
  1342 		self assert: (msg findString: 'expected') > 0.
  1503 			self assert: (msg includesSubstring: '$a').
  1343 		self assert: pos = 0.
  1504 			self assert: (msg includesSubstring: 'expected').
  1344 		seen := true ].
  1505 			self assert: pos equals: 0.
       
  1506 			seen := true ].
  1345 	self assert: result.
  1507 	self assert: result.
  1346 	self assert: seen
  1508 	self assert: seen
  1347 !
  1509 !
  1348 
  1510 
  1349 testParser
  1511 testParser
  1364 
  1526 
  1365 version_CVS
  1527 version_CVS
  1366     ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPParserTest.st,v 1.4 2014-03-04 14:34:21 cg Exp $'
  1528     ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPParserTest.st,v 1.4 2014-03-04 14:34:21 cg Exp $'
  1367 !
  1529 !
  1368 
  1530 
       
  1531 version_HG
       
  1532 
       
  1533     ^ '$Changeset: <not expanded> $'
       
  1534 !
       
  1535 
  1369 version_SVN
  1536 version_SVN
  1370     ^ '$Id: PPParserTest.st,v 1.4 2014-03-04 14:34:21 cg Exp $'
  1537     ^ '$Id: PPParserTest.st,v 1.4 2014-03-04 14:34:21 cg Exp $'
  1371 ! !
  1538 ! !
  1372 
  1539