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