Updated to PetitCompiler-JanKurs.160, PetitCompiler-Tests-JanKurs.112, PetitCompiler-Extras-Tests-JanKurs.25, PetitCompiler-Benchmarks-JanKurs.17
Name: PetitCompiler-JanKurs.160
Author: JanKurs
Time: 17-08-2015, 09:52:26.291 AM
UUID: 3b4bfc98-8098-4951-af83-a59e2585b121
Name: PetitCompiler-Tests-JanKurs.112
Author: JanKurs
Time: 16-08-2015, 05:00:32.936 PM
UUID: 85613d47-08f3-406f-9823-9cdab451e805
Name: PetitCompiler-Extras-Tests-JanKurs.25
Author: JanKurs
Time: 16-08-2015, 05:00:10.328 PM
UUID: 09731810-51a1-4151-8d3a-56b636fbd1f7
Name: PetitCompiler-Benchmarks-JanKurs.17
Author: JanKurs
Time: 05-08-2015, 05:29:32.407 PM
UUID: e544b5f1-bcf8-470b-93a6-d2363e4dfc8a
"{ Package: 'stx:goodies/petitparser/compiler/tests' }"
"{ NameSpace: Smalltalk }"
PPAbstractParserTest subclass:#PPCOverlappingTokensTest
instanceVariableNames:'parser result context node arguments configuration fooToken
idToken keywordToken p unaryToken assignmentToken'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Tests-Core-Tokenizing'
!
!PPCOverlappingTokensTest methodsFor:'as yet unclassified'!
assert: p parse: whatever
^ result := super assert: p parse: whatever.
!
assert: p parse: whatever end: end
^ result := super assert: p parse: whatever end: end
!
cleanClass
| parserClass scannerClass |
parserClass := (Smalltalk at: arguments parserName ifAbsent: [nil]).
parserClass notNil ifTrue:[
parserClass removeFromSystem
].
scannerClass := (Smalltalk at: arguments scannerName ifAbsent: [nil]).
scannerClass notNil ifTrue:[
scannerClass removeFromSystem
].
!
compile: aPPParser
parser := aPPParser compileWithConfiguration: configuration
!
context
^ context := PPCProfilingContext new
!
setUp
arguments := PPCArguments default
profile: true;
yourself.
configuration := PPCTokenizingConfiguration new
arguments: arguments;
yourself.
self cleanClass.
fooToken := 'foo' asParser token trim name: 'foo'; yourself.
idToken := (#word asParser plus) token trim name: 'id'; yourself.
unaryToken := (#word asParser plus, $: asParser not) token trim name: 'unary'; yourself.
keywordToken := (#word asParser plus, $: asParser) token trim name: 'kw'; yourself.
assignmentToken := (':=' asParser) token trim name: 'assignment'; yourself.
!
tearDown
"self cleanClass"
!
testOverlappingSmalltalkLike
p := (keywordToken, idToken) star, idToken, assignmentToken, idToken.
self compile: p.
self assert: parser parse: 'foo: bar
id := another'.
self assert: result first size = 1..
self assert: result second inputValue = 'id'.
self assert: result third inputValue = ':='.
self assert: result last inputValue = 'another'.
!
testOverlappingSmalltalkLike2
p := (keywordToken, idToken) star, idToken, assignmentToken, idToken.
self compile: p.
self assert: parser parse: 'foo: bar
id:=another'.
self assert: result first size = 1..
self assert: result second inputValue = 'id'.
self assert: result third inputValue = ':='.
self assert: result last inputValue = 'another'.
self assert: context tokenReadCount == 2 description: 'too many token reads?'.
!
testOverlappingToken
p := (unaryToken ==> [ :e | #unary ]) / (keywordToken ==> [:e | #kw ]).
self compile: p.
self assert: parser parse: 'foo:'.
self assert: result == #kw.
self assert: parser parse: 'foo '.
self assert: result == #unary.
!
testOverlappingToken2
p := (idToken ==> [ :e | #id ]) / (keywordToken ==> [:e | #kw ]).
self compile: p.
self assert: parser parse: 'foo:' end: 3.
self assert: result == #id.
self assert: parser parse: 'foo '.
self assert: result == #id.
!
testOverlappingToken3
p := (unaryToken ==> [ :e | #unary ]) / (keywordToken ==> [:e | #kw ]).
self compile: p.
self assert: parser parse: 'foo:'.
self assert: result == #kw.
self assert: parser parse: 'foo '.
self assert: result == #unary.
!
testOverlappingTokenStar
p := (fooToken ==> [ :e | #foo ]) / (idToken ==> [:e | #id ]).
self compile: p star.
self assert: parser parse: 'foo bar foo bar'.
self assert: result first = #foo.
self assert: result second = #id.
self assert: result third = #foo.
self assert: result last = #id.
self assert: context tokenReadCount == 1 description: 'too many token reads?'.
!
testOverlappingTokenStar2
p := (fooToken / idToken).
self compile: p star.
self assert: parser parse: ' foo bar foo bar'.
self assert: result first inputValue = 'foo'.
self assert: result second inputValue = 'bar'.
self assert: result third inputValue = 'foo'.
self assert: result last inputValue = 'bar'.
self assert: context tokenReadCount == 1 description: 'too many token reads?'.
!
testSanityAsignment
self compile: assignmentToken.
self assert: parser parse: ':='.
self assert: result inputValue = ':='.
self assert: parser fail: ':f'
!
testSanityFoo
self compile: fooToken.
self assert: parser parse: 'foo'.
self assert: result inputValue = 'foo'.
self assert: parser parse: 'foobar' end: 3.
self assert: result inputValue = 'foo'.
self assert: parser fail: 'bar'.
!
testSanityId
self compile: idToken.
self assert: parser parse: 'hi'.
self assert: result inputValue = 'hi'.
self assert: parser parse: 'foo'.
self assert: result inputValue = 'foo'.
self assert: parser parse: 'hi:' end: 2.
self assert: result inputValue = 'hi'.
!
testSanityKeyword
self compile: keywordToken .
self assert: parser parse: 'hi:'.
self assert: result inputValue = 'hi:'.
self assert: parser fail: 'hi'.
!
testSanityUnary
self compile: unaryToken.
self assert: parser parse: 'hi'.
self assert: result inputValue = 'hi'.
self assert: parser parse: 'foo'.
self assert: result inputValue = 'foo'.
self assert: parser fail: 'hi:'
! !