compiler/tests/PPCNodeFirstFollowNextTests.st
changeset 537 fb212e14d1f4
parent 535 a8feb0f47574
child 538 16e8536f5cfb
equal deleted inserted replaced
536:548996aca274 537:fb212e14d1f4
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
     2 
     2 
     3 "{ NameSpace: Smalltalk }"
     3 "{ NameSpace: Smalltalk }"
     4 
     4 
     5 TestCase subclass:#PPCNodeFirstFollowNextTests
     5 TestCase subclass:#PPCNodeFirstFollowNextTests
     6 	instanceVariableNames:'tree first node followSet configuration'
     6 	instanceVariableNames:'tree first node followSet compiler'
     7 	classVariableNames:''
     7 	classVariableNames:''
     8 	poolDictionaries:''
     8 	poolDictionaries:''
     9 	category:'PetitCompiler-Tests-Nodes'
     9 	category:'PetitCompiler-Tests-Nodes'
    10 !
    10 !
    11 
    11 
    22 
    22 
    23 
    23 
    24 !PPCNodeFirstFollowNextTests methodsFor:'setup'!
    24 !PPCNodeFirstFollowNextTests methodsFor:'setup'!
    25 
    25 
    26 setUp
    26 setUp
    27     configuration := PPCConfiguration default.
    27     compiler := PPCCompiler default.
    28     configuration context options generate: false.
    28     compiler context options generate:false.
    29 
    29 
    30     "Modified: / 28-08-2015 / 14:17:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    30     "Modified: / 28-08-2015 / 14:17:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    31 ! !
    31 ! !
    32 
    32 
    33 !PPCNodeFirstFollowNextTests methodsFor:'support'!
    33 !PPCNodeFirstFollowNextTests methodsFor:'support'!
    73 followOfNodeIn: rootNode
    73 followOfNodeIn: rootNode
    74     ^ self followOf: 'node' in: rootNode
    74     ^ self followOf: 'node' in: rootNode
    75 !
    75 !
    76 
    76 
    77 treeFrom: parser
    77 treeFrom: parser
    78     ^ parser compileWithConfiguration: configuration
    78     ^ parser compileUsingCompiler: compiler
       
    79 
       
    80     "Modified: / 07-09-2015 / 10:08:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    79 ! !
    81 ! !
    80 
    82 
    81 !PPCNodeFirstFollowNextTests methodsFor:'testing - first'!
    83 !PPCNodeFirstFollowNextTests methodsFor:'testing - first'!
    82 
    84 
    83 testFirst1
    85 testFirst1
   162     self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]].
   164     self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]].
   163     self assert: first noneMatchesType: PPCNilNode.
   165     self assert: first noneMatchesType: PPCNilNode.
   164 !
   166 !
   165 
   167 
   166 testFirstNegate1
   168 testFirstNegate1
   167     configuration removePass: PPCSpecializingVisitor.
   169     compiler removePass: PPCSpecializingVisitor.
   168     tree := self treeFrom: ('a' asParser negate, 'b' asParser).
   170     tree := self treeFrom: ('a' asParser negate, 'b' asParser).
   169     
   171     
   170     first := self first: tree.
   172     first := self first: tree.
   171 
   173 
   172     self assert: first size: 1.
   174     self assert: first size: 1.
   185     self assert: first anyMatchesType: PPCNotNode.
   187     self assert: first anyMatchesType: PPCNotNode.
   186     self assert: first anyMatchesType: PPCLiteralNode.
   188     self assert: first anyMatchesType: PPCLiteralNode.
   187 !
   189 !
   188 
   190 
   189 testFirstNot2
   191 testFirstNot2
   190     configuration removePass: PPCSpecializingVisitor.
   192     compiler removePass: PPCSpecializingVisitor.
   191     tree := self treeFrom: (#letter asParser not star, #letter asParser).
   193     tree := self treeFrom: (#letter asParser not star, #letter asParser).
   192     
   194     
   193     first := self first: tree.
   195     first := self first: tree.
   194         
   196         
   195     self assert: first size: 2.
   197     self assert: first size: 2.
   327     self assert: first anySatisfy: [ :e | e literal = 'b' ].
   329     self assert: first anySatisfy: [ :e | e literal = 'b' ].
   328     self assert: first noneMatchesType: PPCNilNode.
   330     self assert: first noneMatchesType: PPCNilNode.
   329 !
   331 !
   330 
   332 
   331 testFirstSequence6
   333 testFirstSequence6
   332     configuration removePass: PPCSpecializingVisitor.
   334     compiler removePass: PPCSpecializingVisitor.
   333     tree := self treeFrom: #space asParser star, 'a' asParser.
   335     tree := self treeFrom: #space asParser star, 'a' asParser.
   334     
   336     
   335     tree firstFollowCache: nil.
   337     tree firstFollowCache: nil.
   336     self should: [ self first: tree. ] raise: Exception.
   338     self should: [ self first: tree. ] raise: Exception.
   337 
   339 
   665     self assert: followSet anyMatchesType: PPCNilNode
   667     self assert: followSet anyMatchesType: PPCNilNode
   666 !
   668 !
   667 
   669 
   668 testFollowTrimmingToken
   670 testFollowTrimmingToken
   669     | token1 token2 |
   671     | token1 token2 |
   670     configuration removePass: PPCSpecializingVisitor.
   672     compiler removePass: PPCSpecializingVisitor.
   671     token1 := #letter asParser plus trimmingToken name: 'token1'; yourself.
   673     token1 := #letter asParser plus trimmingToken name: 'token1'; yourself.
   672     token2 := #letter asParser plus trimmingToken name: 'token2'; yourself.
   674     token2 := #letter asParser plus trimmingToken name: 'token2'; yourself.
   673     
   675     
   674     
   676     
   675     tree := self treeFrom: token1, token2.
   677     tree := self treeFrom: token1, token2.