compiler/tests/PPCUnivarsalGuardTest.st
changeset 524 f6f68d32de73
child 529 439c4057517f
equal deleted inserted replaced
515:b5316ef15274 524:f6f68d32de73
       
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 PPAbstractParserTest subclass:#PPCUnivarsalGuardTest
       
     6 	instanceVariableNames:'parser result context node compiler id node2 id2 id1 node1 node3
       
     7 		arguments configuration'
       
     8 	classVariableNames:''
       
     9 	poolDictionaries:''
       
    10 	category:'PetitCompiler-Tests-Core-Universal'
       
    11 !
       
    12 
       
    13 !PPCUnivarsalGuardTest methodsFor:'as yet unclassified'!
       
    14 
       
    15 assert: p parse: whatever
       
    16     ^ result := super assert: p parse: whatever.
       
    17 !
       
    18 
       
    19 context	
       
    20     ^ context := PPCProfilingContext new
       
    21 !
       
    22 
       
    23 setUp
       
    24     arguments := PPCArguments default
       
    25         profile: true;
       
    26         yourself.
       
    27         
       
    28     configuration := PPCUniversalConfiguration new
       
    29         arguments: arguments;
       
    30         yourself.
       
    31 !
       
    32 
       
    33 tearDown
       
    34     | parserClass |
       
    35 
       
    36     parserClass := (Smalltalk at: #PPGeneratedParser ifAbsent: [nil]).
       
    37     parserClass notNil ifTrue:[ 
       
    38         parserClass removeFromSystem
       
    39     ].
       
    40 ! !
       
    41 
       
    42 !PPCUnivarsalGuardTest methodsFor:'tests - guard'!
       
    43 
       
    44 testChoiceGuard
       
    45     parser := ('foo' asParser trimmingToken / 'bar' asParser trimmingToken / $d asParser trimmingToken plus) 
       
    46         compileWithConfiguration: configuration.
       
    47     
       
    48     self assert: parser parse: 'foo'.
       
    49     self assert: result inputValue = 'foo'.	
       
    50     self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'token' ]).
       
    51 
       
    52     self assert: parser parse: 'bar'.
       
    53     self assert: result inputValue = 'bar'.	
       
    54 
       
    55     self assert: parser parse: ' foo'.
       
    56     self assert: result inputValue = 'foo'.	
       
    57 
       
    58     self assert: parser parse: '  d'.
       
    59     self assert: result first inputValue = 'd'.	
       
    60 
       
    61     self assert: parser fail: ''.
       
    62     self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'predicate' ]).
       
    63     self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'token' ]).
       
    64 
       
    65     self assert: parser fail: 'zorg'.		
       
    66     self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'token' ]).
       
    67 !
       
    68 
       
    69 testEmptyChoiceGuard
       
    70     parser := ('foo' asParser trimmingToken / 'bar' asParser trimmingToken / $d asParser trimmingToken star) 
       
    71         compileWithConfiguration: configuration.
       
    72     
       
    73     self assert: parser parse: 'foo'.
       
    74     self assert: result inputValue = 'foo'.	
       
    75 
       
    76     self assert: parser parse: 'bar'.
       
    77     self assert: result inputValue = 'bar'.	
       
    78 
       
    79     self assert: parser parse: ' foo'.
       
    80     self assert: result inputValue = 'foo'.	
       
    81 
       
    82     self assert: parser parse: '  d'.
       
    83     self assert: result first inputValue = 'd'.	
       
    84 
       
    85     self assert: parser parse: ''.
       
    86 
       
    87     self assert: parser parse: 'zorg' end: 0.	
       
    88 !
       
    89 
       
    90 testGuardSmalltlakToken
       
    91     parser := (#letter asParser, #word asParser star) smalltalkToken compileWithConfiguration: configuration.
       
    92     
       
    93     self assert: parser parse: 'bar'.
       
    94     self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'seq' ]).
       
    95     
       
    96     self assert: parser fail: '123'.
       
    97     self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'seq' ]).
       
    98 !
       
    99 
       
   100 testSequenceGuard
       
   101     parser := ((#any asParser, #any asParser) wrapped, (#any asParser, #any asParser)) compileWithConfiguration: configuration.
       
   102     
       
   103     self assert: parser parse: 'fooo' to: #(#($f $o) #($o $o)).	
       
   104     self assert: parser parse: 'fo oo' to: #(#($f $o) #($  $o)) end: 4.	
       
   105     self assert: parser fail: 'fo'.
       
   106     
       
   107 !
       
   108 
       
   109 testTrimmerGuard
       
   110     parser := $a asParser trim, $b asParser compileWithConfiguration: configuration.
       
   111     
       
   112     self assert: parser parse: 'ab'.
       
   113     self assert: parser parse: ' ab'.
       
   114 ! !
       
   115