compiler/tests/PPCNodeCompilingTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Apr 2015 23:43:14 +0200
changeset 438 20598d7ce9fa
parent 422 116d2b2af905
permissions -rw-r--r--
Updated to PetitCompiler-JanKurs.100, PetitCompiler-Tests-JanKurs.44 and PetitCompiler-Benchmarks-JanKurs.4 Name: PetitCompiler-JanKurs.100 Author: JanKurs Time: 30-04-2015, 10:48:52.165 AM UUID: 80196870-5921-46d9-ac20-a43bf5c2f3c2 Name: PetitCompiler-Tests-JanKurs.44 Author: JanKurs Time: 30-04-2015, 10:49:22.489 AM UUID: 348c02e8-18ce-48f6-885d-fcff4516a298 Name: PetitCompiler-Benchmarks-JanKurs.4 Author: JanKurs Time: 30-04-2015, 10:58:44.890 AM UUID: 18cadb42-f9ef-45fb-82e9-8469ade56c8b

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

"{ NameSpace: Smalltalk }"

PPAbstractParserTest subclass:#PPCNodeCompilingTest
	instanceVariableNames:'parser context tree result'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Tests-Nodes'
!


!PPCNodeCompilingTest methodsFor:'context'!

context	
	^ context := PPCProfilingContext new
! !

!PPCNodeCompilingTest methodsFor:'test support'!

assert: whatever parse: input
	result := super assert: whatever parse: input.
!

compileTree: root 
	^ self compileTree: root arguments: PPCArguments default
!

compileTree: root arguments: arguments
	|  configuration |
	arguments profile: true.
	
	configuration := PPCPluggableConfiguration on: [ :_self | 
		_self specialize.
		_self specialize.
		_self tokenize.
		_self inline.
		_self merge.
		_self generate.
	].

	^ configuration compile: root arguments: arguments.
!

tearDown
	| class |

	class := (Smalltalk at: #PPGeneratedParser ifAbsent: [nil]).
	class notNil ifTrue:[ 
		class removeFromSystem
	].
! !

!PPCNodeCompilingTest methodsFor:'tests - guard'!

testSequenceTokenGuard

	tree := PPCSequenceNode new
		children: { 
			'foo' asParser trimmingToken asCompilerTree optimizeTree. 
			'bar' asParser trimmingToken asCompilerTree optimizeTree. 
		}
		yourself.
	parser := self compileTree: tree.
	
	self assert: parser parse: 'foobar'.
	self assert: result first inputValue = 'foo'.
	self assert: result second inputValue = 'bar'.	

	self assert: parser parse: ' foobar'.
	self assert: result first inputValue = 'foo'.
	self assert: result second inputValue = 'bar'.	

	self assert: parser fail: ' foo'.
!

testTrimmingTokenGuard

	tree := PPCChoiceNode new
		children: { 
			'foo' asParser trimmingToken asCompilerTree optimizeTree. 
			'bar' asParser trimmingToken asCompilerTree optimizeTree
		}
		yourself.
	parser := self compileTree: tree.
	
	self assert: parser parse: 'foo'.
	self assert: result inputValue = 'foo'.	

	self assert: parser parse: 'bar'.
	self assert: result inputValue = 'bar'.	

	self assert: parser parse: ' foo'.
	self assert: result inputValue = 'foo'.	

	self assert: parser parse: ' bar'.	
	self assert: result inputValue = 'bar'.

	self assert: parser fail: 'zorg'.
	self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'token' ]).
! !

!PPCNodeCompilingTest class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !