tests/PPLambdaParserTest.st
changeset 377 6112a403a52d
parent 376 a2656b27cace
child 454 a9cd5ea7cc36
equal deleted inserted replaced
376:a2656b27cace 377:6112a403a52d
    35 ! !
    35 ! !
    36 
    36 
    37 !PPLambdaParserTest methodsFor:'testing-curch'!
    37 !PPLambdaParserTest methodsFor:'testing-curch'!
    38 
    38 
    39 testAnd
    39 testAnd
    40 	self assert: self parserClass and = #('p' ('q' (('p' 'q') 'p')))
    40 	self assert: self parserClass and equals: #('p' #('q' #(#('p' 'q') 'p')))
    41 !
    41 !
    42 
    42 
    43 testFalse
    43 testFalse
    44 	self assert: self parserClass false = #('x' ('y' 'y'))
    44 	self assert: self parserClass false equals: #('x' #('y' 'y'))
    45 !
    45 !
    46 
    46 
    47 testIfThenElse
    47 testIfThenElse
    48 	self assert: self parserClass ifthenelse = #('p' 'p')
    48 	self assert: self parserClass ifthenelse equals: #('p' 'p')
    49 !
    49 !
    50 
    50 
    51 testNot
    51 testNot
    52 	self assert: self parserClass not = #('p' ('a' ('b' (('p' 'b') 'a'))))
    52 	self assert: self parserClass not equals: #('p' #('a' #('b' #(#('p' 'b') 'a'))))
    53 !
    53 !
    54 
    54 
    55 testOr
    55 testOr
    56 	self assert: self parserClass or = #('p' ('q' (('p' 'p') 'q')))
    56 	self assert: self parserClass or equals: #('p' #('q' #(#('p' 'p') 'q')))
    57 !
    57 !
    58 
    58 
    59 testTrue
    59 testTrue
    60 	self assert: self parserClass true = #('x' ('y' 'x'))
    60 	self assert: self parserClass true equals: #('x' #('y' 'x'))
    61 ! !
    61 ! !
    62 
    62 
    63 !PPLambdaParserTest methodsFor:'testing-utilities'!
    63 !PPLambdaParserTest methodsFor:'testing-utilities'!
    64 
    64 
    65 testParseOnError
    65 testParseOnError
    66 	| beenHere |
    66 	| beenHere |
    67 	result := self parserClass
    67 	result := self parserClass parse: '\x.y' onError: [ self fail ].
    68 		parse: '\x.y'
    68 	self assert: result equals: #('x' 'y').
    69 		onError: [ self fail ].
    69 	beenHere := false.
    70 	self assert: result = #('x' 'y').
    70 	result := self parserClass parse: '\x.' onError: [ beenHere := true ].
    71 
    71 	self assert: beenHere.
    72 	beenHere := false.
    72 	beenHere := false.
    73 	result := self parserClass
    73 	result := self parserClass
    74 		parse: '\x.'
    74 		parse: '\x.'
    75 		onError: [ beenHere := true ].
    75 		onError: [ :fail | 
       
    76 			beenHere := true.
       
    77 			fail ].
    76 	self assert: beenHere.
    78 	self assert: beenHere.
    77 
    79 	self assert: (result message includesSubstring: 'separator').
    78 	beenHere := false.
    80 	self assert: (result message includesSubstring: 'expected').
    79 	result := self parserClass
    81 	self assert: result position equals: 3.
    80 		parse: '\x.'
       
    81 		onError: [ :fail | beenHere := true. fail ].
       
    82 	self assert: beenHere.
       
    83 	self assert: (result message findString: '$(') > 0.
       
    84 	self assert: (result message findString: 'expected') > 0.
       
    85 	self assert: (result position = 0).
       
    86 
       
    87 	beenHere := false.
    82 	beenHere := false.
    88 	result := self parserClass
    83 	result := self parserClass
    89 		parse: '\x.'
    84 		parse: '\x.'
    90 		onError: [ :msg :pos | 
    85 		onError: [ :msg :pos | 
    91 			self assert: (msg findString: '$(') > 0.
    86 			self assert: (msg includesSubstring: 'separator').
    92 			self assert: (msg findString: 'expected') > 0.
    87 			self assert: (msg includesSubstring: 'expected').
    93 			self assert: (pos = 0).
    88 			self assert: pos equals: 3.
    94 			beenHere := true ].
    89 			beenHere := true ].
    95 	self assert: result.
    90 	self assert: result.
    96 	self assert: beenHere
    91 	self assert: beenHere
    97 !
    92 !
    98 
    93 
    99 testParseStartingAtOnError
    94 testParseStartingAtOnError
   100 	| beenHere |
    95 	| beenHere |
   101 	result := self parserClass
    96 	result := self parserClass parse: 'x' startingAt: #variable onError: [ self fail ].
   102 		parse: 'x'
    97 	self assert: result equals: 'x'.
   103 		startingAt: #variable
    98 	beenHere := false.
   104 		onError: [ self fail ].
    99 	result := self parserClass parse: '\' startingAt: #variable onError: [ beenHere := true ].
   105 	self assert: result = 'x'.
   100 	self assert: beenHere.
   106 	
       
   107 	beenHere := false.
   101 	beenHere := false.
   108 	result := self parserClass
   102 	result := self parserClass
   109 		parse: '\'
   103 		parse: '\'
   110 		startingAt: #variable
   104 		startingAt: #variable
   111 		onError: [ beenHere := true ].
   105 		onError: [ :fail | 
       
   106 			beenHere := true.
       
   107 			fail ].
   112 	self assert: beenHere.
   108 	self assert: beenHere.
   113 	
   109 	self assert: result message equals: 'separator expected'.
   114 	beenHere := false.
   110 	self assert: result position equals: 0.
   115 	result := self parserClass
       
   116 		parse: '\'
       
   117 		startingAt: #variable
       
   118 		onError: [ :fail | beenHere := true. fail ].
       
   119 	self assert: beenHere.
       
   120 	self assert: result message = 'letter expected'.
       
   121 	self assert: result position = 0.
       
   122 
       
   123 	beenHere := false.
   111 	beenHere := false.
   124 	result := self parserClass
   112 	result := self parserClass
   125 		parse: '\'
   113 		parse: '\'
   126 		startingAt: #variable
   114 		startingAt: #variable
   127 		onError: [ :msg :pos | 
   115 		onError: [ :msg :pos | 
   128 			self assert: msg = 'letter expected'.
   116 			self assert: msg equals: 'separator expected'.
   129 			self assert: pos = 0.
   117 			self assert: pos equals: 0.
   130 			beenHere := true ].
   118 			beenHere := true ].
   131 	self assert: beenHere
   119 	self assert: beenHere
   132 !
   120 !
   133 
   121 
   134 testProductionAt
   122 testProductionAt