compiler/tests/PPCUnivarsalGuardTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 19 Mar 2016 00:12:47 +0100
changeset 556 51c6afba5c91
parent 538 16e8536f5cfb
permissions -rw-r--r--
CI: Use VM provided by Pharo team on both Linux and Windows. Hand-crafter Pharo VM is no longer needed as the Linux slave in SWING build farm has been upgraded so it has compatible GLIBC. This makes CI scripts simpler and more usable for other people.

"{ Package: 'stx:goodies/petitparser/compiler/tests' }"

"{ NameSpace: Smalltalk }"

PPAbstractParserTest subclass:#PPCUnivarsalGuardTest
	instanceVariableNames:'parser result context node compiler id node2 id2 id1 node1 node3
		options'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Tests-Core-Universal'
!


!PPCUnivarsalGuardTest methodsFor:'as yet unclassified'!

assert: p parse: whatever
    ^ result := super assert: p parse: whatever.
!

context	
    ^ context := PPCProfilingContext new
!

setUp
    options := (PPCCompilationOptions new)
            profile:true;
            tokenize:false;
            yourself.
    compiler := PPCCompiler new.
    compiler context options:options

    "Modified: / 07-09-2015 / 10:22:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

tearDown
    | parserClass |

    parserClass := (Smalltalk at: #PPGeneratedParser ifAbsent: [nil]).
    parserClass notNil ifTrue:[ 
        parserClass removeFromSystem
    ].
! !

!PPCUnivarsalGuardTest methodsFor:'tests - guard'!

testChoiceGuard
    parser := compiler compile: ('foo' asParser trimmingToken / 'bar' asParser trimmingToken 
                    / $d asParser trimmingToken plus).
    
    self assert: parser parse: 'foo'.
    self assert: result inputValue = 'foo'.     
    self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'token' ]).

    self assert: parser parse: 'bar'.
    self assert: result inputValue = 'bar'.     

    self assert: parser parse: ' foo'.
    self assert: result inputValue = 'foo'.     

    self assert: parser parse: '  d'.
    self assert: result first inputValue = 'd'.         

    self assert: parser fail: ''.
    self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'predicate' ]).
    self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'token' ]).

    self assert: parser fail: 'zorg'.           
    self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'token' ]).

    "Modified: / 07-09-2015 / 12:39:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

testEmptyChoiceGuard
    parser := compiler compile: ('foo' asParser trimmingToken / 'bar' asParser trimmingToken 
                    / $d asParser trimmingToken star).
    
    self assert: parser parse: 'foo'.
    self assert: result inputValue = 'foo'.     

    self assert: parser parse: 'bar'.
    self assert: result inputValue = 'bar'.     

    self assert: parser parse: ' foo'.
    self assert: result inputValue = 'foo'.     

    self assert: parser parse: '  d'.
    self assert: result first inputValue = 'd'.         

    self assert: parser parse: ''.

    self assert: parser parse: 'zorg' end: 0.

    "Modified: / 07-09-2015 / 12:39:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

testGuardSmalltlakToken
    parser := compiler compile: (#letter asParser , #word asParser star) smalltalkToken.

    self assert: parser parse: 'bar'.
    self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'seq' ]).
    
    self assert: parser fail: '123'.
    self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'seq' ]).

    "Modified (format): / 07-09-2015 / 12:39:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

testSequenceGuard
    parser := compiler compile: ((#any asParser , #any asParser) wrapped , (#any asParser , #any asParser)).

    self assert: parser parse: 'fooo' to: #(#($f $o) #($o $o)).         
    self assert: parser parse: 'fo oo' to: #(#($f $o) #($  $o)) end: 4.         
    self assert: parser fail: 'fo'.

    "Modified: / 07-09-2015 / 12:39:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

testTrimmerGuard
    parser := compiler compile: ($a asParser trim , $b asParser).
    
    self assert: parser parse: 'ab'.
    self assert: parser parse: ' ab'.
! !

!PPCUnivarsalGuardTest class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !