compiler/tests/PPCLTokenizingOptimizationTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 29 Aug 2015 07:56:14 +0100
changeset 534 a949c4fe44df
parent 529 439c4057517f
child 535 a8feb0f47574
permissions -rw-r--r--
PPCConfiguration refactoring: [6/10]: use #runPass: instead of self-sends. ...in PPCConfiguration>>invokePhases. This is a preparation for removing #invokePhases completely and configuring the compilation via list of phases.

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

"{ NameSpace: Smalltalk }"

TestCase subclass:#PPCLTokenizingOptimizationTest
	instanceVariableNames:'configuration parser result'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Tests-Core-Tokenizing'
!


!PPCLTokenizingOptimizationTest methodsFor:'as yet unclassified'!

assert: object type: class
    self assert: (object isKindOf: class)
!

configuration
    configuration := PPCTokenizingConfiguration new.
    configuration context options generate: false.
    ^ configuration

    "Modified: / 28-08-2015 / 14:17:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

optimize: aPPParser
    ^ self configuration compile: aPPParser.
!

testCompileToken
    parser := 'foo' asParser token.
    result := self optimize: parser.
    
    self assert: result type: PPCTokenizingParserNode.
    self assert: result parser type: PPCTokenConsumeNode.
    self assert: result parser child type: PPCTokenNode.
    self assert: result parser child child literal = 'foo'.
!

testCompileTrim
    parser := 'foo' asParser token trim.
    result := self optimize: parser.
    
    self assert: result type: PPCTokenizingParserNode.
    self assert: result parser type: PPCTokenConsumeNode.
    self assert: result parser child type: PPCTrimmingTokenNode.
    self assert: result whitespace type: PPCStarNode.
!

testCompileTrimmingToken
    parser := 'foo' asParser trimmingToken.
    result := self optimize: parser.
    
    self assert: result type: PPCTokenizingParserNode.
    self assert: result parser type: PPCTokenConsumeNode.
    self assert: result parser child type: PPCTrimmingTokenNode.
    self assert: result whitespace type: PPCStarNode.
    
    self assert: result tokens children size = 1.
    self assert: (result tokens children anySatisfy: [ :e | e isKindOf: PPCTrimmingTokenNode ])
!

testCompileTrimmingToken2
    | token |
    token := 'foo' asParser trimmingToken.
    parser := token wrapped
        name: 'fooToken';
        yourself.
    result := self optimize: parser.
    
    self assert: result type: PPCTokenizingParserNode.
    self assert: result parser type: PPCTokenConsumeNode.
    self assert: result parser name = 'fooToken'.
    self assert: result parser child name = 'fooToken'.
    
    self assert: result tokens children size = 1.
    self assert: (result tokens children anySatisfy: [ :e | e isKindOf: PPCTrimmingTokenNode ]).
    self assert: (result tokens children anySatisfy: [ :e | e name = 'fooToken']).
! !

!PPCLTokenizingOptimizationTest class methodsFor:'documentation'!

version_HG

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