Merged with PetitCompiler-JanKurs.20150510144201, PetitCompiler-Tests-JanKurs.20150510144201, PetitCompiler-Extras-Tests-JanKurs.20150510144201, PetitCompiler-Benchmarks-JanKurs.20150510144201
Name: PetitCompiler-JanKurs.20150510144201
Author: JanKurs
Time: 10-05-2015, 04:42:29.192 PM
UUID: 58a4786b-1182-4904-8b44-a13d3918f244
Name: PetitCompiler-Tests-JanKurs.20150510144201
Author: JanKurs
Time: 10-05-2015, 04:32:12.870 PM
UUID: 2a8fd41a-331b-4dcf-a7a3-752a50ce86e7
Name: PetitCompiler-Extras-Tests-JanKurs.20150510144201
Author: JanKurs
Time: 10-05-2015, 04:59:25.308 PM
UUID: ef43bd1a-be60-4e88-b749-8b635622c969
Name: PetitCompiler-Benchmarks-JanKurs.20150510144201
Author: JanKurs
Time: 10-05-2015, 05:04:54.561 PM
UUID: d8e764fd-016b-46e2-9fc1-17c38c18f0e5
"{ Package: 'stx:goodies/petitparser/compiler/tests' }"
"{ NameSpace: Smalltalk }"
TestCase subclass:#PPCInliningVisitorTest
instanceVariableNames:'node result visitor'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Tests-Visitors'
!
!PPCInliningVisitorTest methodsFor:'as yet unclassified'!
assert: object type: class
self assert: object class == class
!
setUp
visitor := PPCInliningVisitor new.
!
testCharacterNode
node := PPCCharacterNode new
character: $a;
yourself.
result := visitor visit: node.
self assert: result type: PPCCharacterNode.
self assert: result isMarkedForInline not.
self assert: result character = $a.
!
testCharacterNode2
| charNode |
charNode := PPCCharacterNode new
character: $a;
yourself.
node := PPCStarNode new
child: charNode;
yourself.
result := visitor visit: node.
self assert: result child type: PPCCharacterNode.
self assert: result child isMarkedForInline.
self assert: result child character = $a.
!
testLiteralNode
| literalNode |
literalNode := PPCLiteralNode new
literal: 'foo';
yourself.
node := PPCOptionalNode new
child: literalNode;
yourself.
result := visitor visit: node.
self assert: result child type: PPCLiteralNode.
self assert: result child isMarkedForInline.
self assert: result child literal = 'foo'.
!
testNil
node := PPCNilNode new.
result := visitor visit: node.
self assert: result type: PPCNilNode.
self assert: result isMarkedForInline not.
!
testNil2
node := PPCStarNode new
child: PPCNilNode new;
yourself.
result := visitor visit: node.
self assert: result type: PPCStarNode.
self assert: result child type: PPCNilNode.
self assert: result child isMarkedForInline.
!
testNotLiteralNode
| notLiteralNode |
notLiteralNode := PPCNotLiteralNode new
literal: 'foo';
yourself.
node := PPCOptionalNode new
child: notLiteralNode;
yourself.
result := visitor visit: node.
self assert: result child type: PPCNotLiteralNode.
self assert: result child isMarkedForInline.
self assert: result child literal = 'foo'.
!
testPluggable
| pluggableNode |
pluggableNode := PPCPluggableNode new
block: [:ctx | nil] asParser.
node := PPCSequenceNode new
children: { pluggableNode };
yourself.
result := visitor visit: node.
((Smalltalk respondsTo:#isSmalltalkX) and:[ Smalltalk isSmalltalkX ]) ifTrue:[
self skipIf: true description: 'skipped test, inlining of pluggable nodes not supported!!'.
].
self assert: result children first type: PPCPluggableNode.
self assert: result children first isMarkedForInline.
"Modified: / 01-05-2015 / 14:22:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
testSequenceInline
| charNode1 charNode2 |
charNode1 := PPCCharacterNode new
character: $a;
yourself.
charNode2 := PPCCharacterNode new
character: $b;
yourself.
node := PPCSequenceNode new
children: { charNode1 . charNode2 };
yourself.
result := visitor visit: node.
self assert: result type: PPCSequenceNode .
self assert: result children first type: PPCCharacterNode.
self assert: result children second type: PPCCharacterNode.
!
testTokenStarMessagePredicateNode
| tokenNode |
tokenNode := (PPCTokenStarMessagePredicateNode new)
child: PPCSentinelNode new;
yourself.
node := PPCForwardNode new
child: tokenNode;
yourself.
result := visitor visit: node.
self assert: result child type: PPCTokenStarMessagePredicateNode.
self assert: result child isMarkedForInline.
!
testTokenStarSeparatorNode
| tokenNode |
tokenNode := (PPCTokenStarSeparatorNode new)
name: #name;
message: #message;
child: PPCNilNode new;
yourself.
node := PPCForwardNode new
child: tokenNode;
yourself.
result := visitor visit: node.
self assert: result child type: PPCTokenStarSeparatorNode.
self assert: result child isMarkedForInline.
self assert: result child child type: PPCNilNode.
! !