compiler/tests/PPCLTokenizingOptimizationTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 04 Sep 2015 14:06:56 +0100
changeset 535 a8feb0f47574
parent 534 a949c4fe44df
child 537 fb212e14d1f4
permissions -rw-r--r--
PPCConfiguration refactoring: [7/10]: allow to configure passes ...run during compilation by setting a collection of passes to run. Got rid of PPCPluggableConfiguration and PPCConfiguration subclasses. Removed a bunch of options used to suppress certain passes.

"{ 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 := PPCConfiguration new.
    configuration context options 
        generate: false;
        tokenize: true.
    ^ configuration

    "Modified: / 04-09-2015 / 16:21:52 / 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> $'
! !