PPLambdaParserTest.st
changeset 0 739fe9b7253e
child 4 90de244a7fa2
equal deleted inserted replaced
-1:000000000000 0:739fe9b7253e
       
     1 "{ Package: 'squeak:petitparser' }"
       
     2 
       
     3 PPCompositeParserTest subclass:#PPLambdaParserTest
       
     4 	instanceVariableNames:''
       
     5 	classVariableNames:''
       
     6 	poolDictionaries:''
       
     7 	category:'PetitTests-Tests'
       
     8 !
       
     9 
       
    10 
       
    11 !PPLambdaParserTest methodsFor:'accessing'!
       
    12 
       
    13 parserClass
       
    14 	^ PPLambdaParser
       
    15 ! !
       
    16 
       
    17 !PPLambdaParserTest methodsFor:'testing'!
       
    18 
       
    19 testAbstraction
       
    20 	self assert: '\x.y' is: #('x' 'y').
       
    21 	self assert: '\x.\y.z' is: #('x' ('y' 'z'))
       
    22 !
       
    23 
       
    24 testApplication
       
    25 	self assert: '(x x)' is: #('x' 'x').
       
    26 	self assert: '(x y)' is: #('x' 'y').
       
    27 	self assert: '((x y) z)' is: #(('x' 'y') 'z').
       
    28 	self assert: '(x (y z))' is: #('x' ('y' 'z'))
       
    29 !
       
    30 
       
    31 testVariable
       
    32 	self assert: 'x' is: 'x'.
       
    33 	self assert: 'xy' is: 'xy'.
       
    34 	self assert: 'x12' is: 'x12'
       
    35 ! !
       
    36 
       
    37 !PPLambdaParserTest methodsFor:'testing-curch'!
       
    38 
       
    39 testAnd
       
    40 	self assert: self parserClass and = #('p' ('q' (('p' 'q') 'p')))
       
    41 !
       
    42 
       
    43 testFalse
       
    44 	self assert: self parserClass false = #('x' ('y' 'y'))
       
    45 !
       
    46 
       
    47 testIfThenElse
       
    48 	self assert: self parserClass ifthenelse = #('p' 'p')
       
    49 !
       
    50 
       
    51 testNot
       
    52 	self assert: self parserClass not = #('p' ('a' ('b' (('p' 'b') 'a'))))
       
    53 !
       
    54 
       
    55 testOr
       
    56 	self assert: self parserClass or = #('p' ('q' (('p' 'p') 'q')))
       
    57 !
       
    58 
       
    59 testTrue
       
    60 	self assert: self parserClass true = #('x' ('y' 'x'))
       
    61 ! !
       
    62 
       
    63 !PPLambdaParserTest methodsFor:'testing-utilities'!
       
    64 
       
    65 testParseOnError
       
    66         | beenHere |
       
    67         result := self parserClass
       
    68                 parse: '\x.y'
       
    69                 onError: [ self fail ].
       
    70         self assert: result = #('x' 'y').
       
    71         
       
    72         beenHere := false.
       
    73         result := self parserClass
       
    74                 parse: '\x.'
       
    75                 onError: [ beenHere := true ].
       
    76         self assert: beenHere.
       
    77         
       
    78         beenHere := false.
       
    79         result := self parserClass
       
    80                 parse: '\x.'
       
    81                 onError: [ :fail | beenHere := true. fail ].
       
    82         self assert: beenHere.
       
    83         "We don't use $ before character sign in ST/X"
       
    84         self assert: (result message includesSubString: '(').
       
    85 "/        self assert: (result message includesSubString: '$(').
       
    86         self assert: (result message includesSubString: 'expected').
       
    87         self assert: (result position = 0).
       
    88 
       
    89         beenHere := false.
       
    90         result := self parserClass
       
    91                 parse: '\x.'
       
    92                 onError: [ :msg :pos | 
       
    93                         "We don't use $ before character sign in ST/X"
       
    94                         self assert: (msg includesSubString: '(').
       
    95 "/                        self assert: (msg includesSubString: '$(').
       
    96                         self assert: (msg includesSubString: 'expected').
       
    97                         self assert: (pos = 0).
       
    98                         beenHere := true ].
       
    99         self assert: result.
       
   100         self assert: beenHere
       
   101 
       
   102     "Modified: / 19-12-2010 / 16:52:33 / Jan Kurs <kurs.jan@post.cz>"
       
   103 !
       
   104 
       
   105 testParseStartingAtOnError
       
   106 	| beenHere |
       
   107 	result := self parserClass
       
   108 		parse: 'x'
       
   109 		startingAt: #variable
       
   110 		onError: [ self fail ].
       
   111 	self assert: result = 'x'.
       
   112 	
       
   113 	beenHere := false.
       
   114 	result := self parserClass
       
   115 		parse: '\'
       
   116 		startingAt: #variable
       
   117 		onError: [ beenHere := true ].
       
   118 	self assert: beenHere.
       
   119 	
       
   120 	beenHere := false.
       
   121 	result := self parserClass
       
   122 		parse: '\'
       
   123 		startingAt: #variable
       
   124 		onError: [ :fail | beenHere := true. fail ].
       
   125 	self assert: beenHere.
       
   126 	self assert: result message = 'letter expected'.
       
   127 	self assert: result position = 0.
       
   128 
       
   129 	beenHere := false.
       
   130 	result := self parserClass
       
   131 		parse: '\'
       
   132 		startingAt: #variable
       
   133 		onError: [ :msg :pos | 
       
   134 			self assert: msg = 'letter expected'.
       
   135 			self assert: pos = 0.
       
   136 			beenHere := true ].
       
   137 	self assert: beenHere
       
   138 !
       
   139 
       
   140 testProductionAt
       
   141 	self assert: (parser productionAt: #foo) isNil.
       
   142 	self assert: (parser productionAt: #foo ifAbsent: [ true ]).
       
   143 	
       
   144 	self assert: (parser productionAt: #start) notNil.
       
   145 	self assert: (parser productionAt: #start ifAbsent: [ true ]) notNil.
       
   146 	
       
   147 	self assert: (parser productionAt: #variable) notNil.
       
   148 	self assert: (parser productionAt: #variable ifAbsent: [ true ]) notNil
       
   149 ! !
       
   150 
       
   151 !PPLambdaParserTest class methodsFor:'documentation'!
       
   152 
       
   153 version_SVN
       
   154     ^ '$Id: PPLambdaParserTest.st,v 1.1 2011-08-18 18:56:17 cg Exp $'
       
   155 ! !