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:#PPCRecognizerComponentVisitorTest
instanceVariableNames:'node result visitor'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Tests-Visitors'
!
!PPCRecognizerComponentVisitorTest methodsFor:'as yet unclassified'!
asNode: aPPParser
self error: 'deprecated'.
^ aPPParser asCompilerTree
!
assert: object type: class
self assert: object class == class
!
setUp
visitor := PPCRecognizerComponentVisitor new.
!
testAction
| letterNode |
letterNode := PPCMessagePredicateNode new
message: #isLetter;
yourself.
node := PPCActionNode new
block: [ :nodes | #foo ];
child: letterNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCMessagePredicateNode.
self assert: result = letterNode.
!
testAction2
| letterNode actionNode |
letterNode := PPCMessagePredicateNode new
predicate: #isLetter;
yourself.
actionNode := PPCActionNode new
block: #boo;
child: letterNode;
yourself.
node := PPCTokenNode new
child: actionNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCMessagePredicateNode.
self assert: result = letterNode.
!
testAction3
| letterNode actionNode |
letterNode := PPCMessagePredicateNode new
predicate: #isLetter;
yourself.
actionNode := PPCActionNode new
block: #foo;
child: letterNode;
yourself.
node := PPCActionNode new
block: #foo;
child: actionNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCMessagePredicateNode.
self assert: result = letterNode.
!
testNotAction
| literalNode actionNode |
literalNode := PPCLiteralNode new
literal: 'foo';
yourself.
actionNode := PPCActionNode new
block: #foo;
child: literalNode;
yourself.
node := PPCNotNode new
child: actionNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCNotNode.
self assert: result child type: PPCLiteralNode.
!
testNotAction2
| literalNode actionNode seqNode |
literalNode := PPCLiteralNode new
literal: 'foo';
yourself.
seqNode := PPCSequenceNode new
children: { literalNode . literalNode };
yourself.
actionNode := PPCActionNode new
block: #foo;
child: seqNode;
yourself.
node := PPCNotNode new
child: actionNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCNotNode.
self assert: result child type: PPCRecognizingSequenceNode.
self assert: result child firstChild type: PPCLiteralNode.
self assert: result child secondChild type: PPCLiteralNode.
!
testNotAction3
| literalNode actionNode seqNode |
literalNode := PPCLiteralNode new
literal: 'foo';
yourself.
seqNode := PPCSequenceNode new
children: { literalNode . literalNode };
yourself.
actionNode := PPCSymbolActionNode new
symbol: #second;
child: seqNode;
yourself.
node := PPCNotNode new
child: actionNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCNotNode.
self assert: result child type: PPCRecognizingSequenceNode.
self assert: result child firstChild type: PPCLiteralNode.
self assert: result child secondChild type: PPCLiteralNode.
!
testRecognizingSequence1
| letterNode1 letterNode2 |
letterNode1 := PPCCharacterNode new character: $a.
letterNode2 := PPCCharacterNode new character: $b.
node := PPCSequenceNode new
children: { letterNode1 . letterNode2 };
yourself.
result := visitor visit: node.
self assert: result type: PPCRecognizingSequenceNode.
self assert: result firstChild = letterNode1.
self assert: result secondChild = letterNode2.
!
testStarMessagePredicate
| starNode |
starNode := PPCStarMessagePredicateNode new
message: #isLetter;
yourself.
node := PPCTokenNode new
child: starNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCTokenStarMessagePredicateNode.
!
testStarMessagePredicate2
| starNode |
starNode := PPCStarMessagePredicateNode new
message: #isSeparator;
yourself.
node := PPCTokenNode new
child: starNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCTokenStarSeparatorNode.
!
testToken
| letterNode |
letterNode := PPCMessagePredicateNode new
message: #isLetter;
yourself.
node := PPCTokenNode new
child: letterNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCMessagePredicateNode.
self assert: result = letterNode.
!
testTrimmingToken
| letterNode tokenNode whitespaceNode |
letterNode := PPCMessagePredicateNode new
message: #isLetter;
yourself.
tokenNode := PPCTokenNode new
child: letterNode;
yourself.
whitespaceNode := PPCActionNode new
block: #foo;
child: letterNode;
yourself.
node := PPCTrimmingTokenNode new
child: tokenNode;
whitespace: whitespaceNode;
yourself.
result := visitor visit: node.
self assert: result type: PPCTrimmingTokenNode.
self assert: result child type: PPCMessagePredicateNode.
self assert: result child = letterNode.
self assert: result whitespace type: PPCMessagePredicateNode.
self assert: result whitespace = letterNode.
! !
!PPCRecognizerComponentVisitorTest class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !