PPExtensionTest.st
changeset 561 9885688dbd3b
parent 560 d1fbb249043c
child 562 8e07a5704f6b
equal deleted inserted replaced
560:d1fbb249043c 561:9885688dbd3b
     1 "{ Package: 'stx:goodies/petitparser' }"
       
     2 
       
     3 PPAbstractParserTest subclass:#PPExtensionTest
       
     4 	instanceVariableNames:''
       
     5 	classVariableNames:''
       
     6 	poolDictionaries:''
       
     7 	category:'PetitTests-Tests'
       
     8 !
       
     9 
       
    10 
       
    11 !PPExtensionTest methodsFor:'testing-parser'!
       
    12 
       
    13 testCharacter
       
    14 	| parser |
       
    15 	parser := $a asParser.
       
    16 	self assert: parser parse: 'a' to: $a.
       
    17 	self assert: parser fail: 'b'
       
    18 !
       
    19 
       
    20 testChoice
       
    21 	| parser |
       
    22 	parser := #(1 2) asChoiceParser.
       
    23 	self assert: parser parse: #(1) to: 1.
       
    24 	self assert: parser parse: #(2) to: 2.
       
    25 	self assert: parser parse: #(1 2) to: 1 end: 1.
       
    26 	self assert: parser parse: #(2 1) to: 2 end: 1.
       
    27 	self assert: parser fail: #().
       
    28 	self assert: parser fail: #(3)
       
    29 !
       
    30 
       
    31 testClosure
       
    32 	| parser |
       
    33 	parser := [ :stream | stream upTo: $s ] asParser.
       
    34 	self assert: parser parse: '' to: ''.
       
    35 	self assert: parser parse: 'a' to: 'a'.
       
    36 	self assert: parser parse: 'aa' to: 'aa'.
       
    37 	self assert: parser parse: 's' to: ''.
       
    38 	self assert: parser parse: 'as' to: 'a'.
       
    39 	self assert: parser parse: 'aas' to: 'aa'.
       
    40 	self assert: parser parse: 'sa' to: '' end: 1.
       
    41 	self assert: parser parse: 'saa' to: '' end: 1.
       
    42 	
       
    43 	parser := [ :stream | stream upTo: $s. PPFailure message: 'stream' at: stream position ] asParser.
       
    44 	self assert: parser fail: ''.
       
    45 	self assert: parser fail: 's'.
       
    46 	self assert: parser fail: 'as'
       
    47 	
       
    48 !
       
    49 
       
    50 testEpsilon
       
    51 	| parser |
       
    52 	parser := nil asParser.
       
    53 	self assert: parser asParser = parser
       
    54 !
       
    55 
       
    56 testOrdered
       
    57 	| parser |
       
    58 	parser := #(1 2) asParser.
       
    59 	self assert: parser parse: #(1 2) to: #(1 2).
       
    60 	self assert: parser parse: #(1 2 3) to: #(1 2) end: 2.
       
    61 	self assert: parser fail: #().
       
    62 	self assert: parser fail: #(1).
       
    63 	self assert: parser fail: #(1 1).
       
    64 	self assert: parser fail: #(1 1 2)
       
    65 !
       
    66 
       
    67 testParser
       
    68 	| parser |
       
    69 	parser := $a asParser.
       
    70 	self assert: parser asParser = parser
       
    71 !
       
    72 
       
    73 testRange
       
    74         | parser |
       
    75         parser := ($a to: $c) asParser.
       
    76         self assert: parser parse: 'a' to: $a.
       
    77         self assert: parser parse: 'b' to: $b.
       
    78         self assert: parser parse: 'c' to: $c.
       
    79         self assert: parser fail: 'd'
       
    80 !
       
    81 
       
    82 testSequence
       
    83 	| parser |
       
    84 	parser := #(1 2) asSequenceParser.
       
    85 	self assert: parser parse: #(1 2) to: #(1 2).
       
    86 	self assert: parser parse: #(1 2 3) to: #(1 2) end: 2.
       
    87 	self assert: parser fail: #().
       
    88 	self assert: parser fail: #(1).
       
    89 	self assert: parser fail: #(1 1).
       
    90 	self assert: parser fail: #(1 1 2)
       
    91 !
       
    92 
       
    93 testString
       
    94 	| parser |
       
    95 	parser := 'ab' asParser.
       
    96 	self assert: parser parse: 'ab' to: 'ab'.
       
    97 	self assert: parser parse: 'aba' to: 'ab' end: 2.
       
    98 	self assert: parser parse: 'abb' to: 'ab' end: 2.
       
    99 	self assert: parser fail: 'a'.
       
   100 	self assert: parser fail: 'ac'
       
   101 !
       
   102 
       
   103 testSymbol
       
   104 	| parser |
       
   105 	parser := #any asParser.
       
   106 	self assert: parser parse: 'a'.
       
   107 	self assert: parser fail: ''
       
   108 !
       
   109 
       
   110 testUnordered
       
   111 	| parser |
       
   112 	parser := #(1 2) asSet asParser.
       
   113 	self assert: parser parse: #(1) to: 1.
       
   114 	self assert: parser parse: #(2) to: 2.
       
   115 	self assert: parser parse: #(1 2) to: 1 end: 1.
       
   116 	self assert: parser parse: #(2 1) to: 2 end: 1.
       
   117 	self assert: parser fail: #().
       
   118 	self assert: parser fail: #(3)
       
   119 ! !
       
   120 
       
   121 !PPExtensionTest methodsFor:'testing-stream'!
       
   122 
       
   123 testStream
       
   124 	| stream |
       
   125 	stream := 'abc' readStream asPetitStream.
       
   126 	self assert: (stream class = PPStream).
       
   127 	self assert: (stream printString = '·abc').
       
   128 	self assert: (stream peek) = $a.
       
   129 	self assert: (stream uncheckedPeek = $a).
       
   130 	self assert: (stream next) = $a.
       
   131 	self assert: (stream printString = 'a·bc').
       
   132 	self assert: (stream asPetitStream = stream)
       
   133 !
       
   134 
       
   135 testText
       
   136 	| stream |
       
   137 	stream := 'abc' asText asPetitStream.
       
   138 	self assert: stream class = PPStream
       
   139 ! !
       
   140 
       
   141 !PPExtensionTest class methodsFor:'documentation'!
       
   142 
       
   143 version
       
   144     ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPExtensionTest.st,v 1.4 2014-03-04 14:34:17 cg Exp $'
       
   145 !
       
   146 
       
   147 version_CVS
       
   148     ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPExtensionTest.st,v 1.4 2014-03-04 14:34:17 cg Exp $'
       
   149 !
       
   150 
       
   151 version_SVN
       
   152     ^ '$Id: PPExtensionTest.st,v 1.4 2014-03-04 14:34:17 cg Exp $'
       
   153 ! !
       
   154