compiler/tests/PPCDistinctScannerTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 24 Aug 2015 15:34:14 +0100
changeset 524 f6f68d32de73
child 529 439c4057517f
permissions -rw-r--r--
Merged in PetitCompiler-JanVrany.170, PetitCompiler-Tests-JanKurs.116, PetitCompiler-Extras-Tests-JanKurs.29, PetitCompiler-Benchmarks-JanKurs.19 Name: PetitCompiler-JanVrany.170 Author: JanVrany Time: 24-08-2015, 03:19:51.340 PM UUID: c20a744f-3b41-4aaa-bb8a-71ce74a2a952 Name: PetitCompiler-Tests-JanKurs.116 Author: JanKurs Time: 24-08-2015, 11:37:54.332 AM UUID: 549e0927-358a-4a1b-8270-050ccfcb4217 Name: PetitCompiler-Extras-Tests-JanKurs.29 Author: JanKurs Time: 24-08-2015, 11:36:52.503 AM UUID: ea1dbb67-f884-4237-8f34-adb0677c0954 Name: PetitCompiler-Benchmarks-JanKurs.19 Author: JanKurs Time: 24-08-2015, 11:48:47.045 AM UUID: 1c342fdb-8ddd-4104-9c47-a8f589c51694

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

"{ NameSpace: Smalltalk }"

TestCase subclass:#PPCDistinctScannerTest
	instanceVariableNames:'configuration scanner'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Tests-Core-Tokenizing'
!

!PPCDistinctScannerTest methodsFor:'as yet unclassified'!

aToken
    ^ 'a' asParser token 
        name: #token;
        yourself.
!

barToken
    ^ 'bar' asParser token 
        name: #bar;
        yourself.
!

fooToken
    ^ 'foo' asParser token 
        name: #foo;
        yourself.
!

fooTrimmingToken
    ^ 'foo' asParser trimmingToken 
        name: #foo;
        yourself.
!

idToken
    ^ #letter asParser plus token 
        name: #id;
        yourself.
!

idTrimmingToken
    ^ #letter asParser plus trimmingToken 
        name: #id;
        yourself.
!

overlappingToken
    ^ 'a' asParser token / 'a' asParser token
!

setUp
    configuration := PPCConfiguration tokenizing.
!

testConsumeToken
    | parser |
    parser := self fooToken, self overlappingToken.
    parser compileWithConfiguration: configuration.
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foobaz' asPetitStream.
    scanner perform: #'consume_foo'.
    
    self assert: scanner position = 3.
    self assert: scanner resultPosition = 3.
    self assert: scanner result isNil.
!

testConsumeToken2
    | parser |
    parser := self fooToken, self barToken.
    parser compileWithConfiguration: configuration.
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foobar' asPetitStream.
    scanner perform: #'consume_foo'.
    
    self assert: scanner position = 3.
    self assert: scanner resultPosition = 6.
    self assert: scanner result = #bar.
!

testScan
    | parser |
    parser := self aToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'a' asPetitStream.
    scanner perform: #'scan_token'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 1.
    self assert: scanner result = #token.
!

testScan2
    | parser |
    parser := self fooToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foo' asPetitStream.
    scanner perform: #'scan_foo'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 3.
    self assert: scanner result = #foo.
!

testScan3
    | parser |
    parser := self fooToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'bar' asPetitStream.
    scanner perform: #'scan_foo'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 0.
    self assert: scanner result isNil.
!

testScan4
    | parser |
    parser := self fooToken, self idToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foothere' asPetitStream.
    scanner perform: #'scan_foo'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 3.
    self assert: scanner result = #foo.
    
    scanner perform: #'consume_foo'.

    self assert: scanner position = 3.
    self assert: scanner resultPosition = 8.
    self assert: scanner result = #id.
!

testSequence
    | parser result |
    parser := self fooTrimmingToken, self idTrimmingToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foo there ' asPetitStream.
    scanner perform: #'foo'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 3.
    self assert: scanner stream position = 4.
    self assert: scanner result = #foo.	
    
    result := scanner perform: #'consume_foo'.

    self assert: scanner position = 4.
    self assert: scanner resultPosition = 9.
    self assert: scanner stream position = 10.
    self assert: scanner result = #id.
    
    self assert: (result isKindOf: PPToken).
    self assert: result start = 1.
    self assert: result stop = 3.
    self assert: result inputValue = 'foo'.
!

testToken
    | parser |
    parser := self fooToken, self idTrimmingToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foo there' asPetitStream.
    scanner perform: #'foo'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 3.
    self assert: scanner stream position = 3.
    self assert: scanner result = #foo.		
!

testTrimmingScan
    | parser |
    parser := self fooTrimmingToken, self idTrimmingToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foo there' asPetitStream.
    scanner perform: #'scan_foo'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 3.
    self assert: scanner result = #foo.	
!

testTrimmingToken
    | parser result |
    parser := self fooTrimmingToken, self idTrimmingToken.
    parser compileWithConfiguration: configuration.
    
    scanner := (Smalltalk at: configuration arguments scannerName) new.

    scanner stream: 'foo there' asPetitStream.
    result := scanner perform: #'foo'.
    
    self assert: scanner position = 0.
    self assert: scanner resultPosition = 3.
    self assert: scanner stream position = 4.
    self assert: scanner result = #foo.		
        
    self assert: result.
! !