initial checkin
authorClaus Gittinger <cg@exept.de>
Tue, 04 Mar 2014 16:43:01 +0100
changeset 209 27b919ed87da
parent 208 42c859858c78
child 210 d9e67752b114
initial checkin
analyzer/tests/PPRewriterTest.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/analyzer/tests/PPRewriterTest.st	Tue Mar 04 16:43:01 2014 +0100
@@ -0,0 +1,161 @@
+"{ Package: 'stx:goodies/petitparser/analyzer/tests' }"
+
+PPAbstractParserTest subclass:#PPRewriterTest
+	instanceVariableNames:'rewriter'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitAnalyzer-Tests'
+!
+
+
+!PPRewriterTest methodsFor:'running'!
+
+setUp
+	rewriter := PPRewriter new
+! !
+
+!PPRewriterTest methodsFor:'testing'!
+
+testDuplicationRemoval
+	| duplicate before between after result |
+	duplicate := PPPattern any.
+	before := PPListPattern any.
+	between := PPListPattern any.
+	after := PPListPattern any.
+	rewriter
+		replace: before / duplicate / between / duplicate / after
+		with: before / duplicate / between / after.
+	
+	result := rewriter execute: $a asParser / $a asParser.
+	self assert: rewriter hasChanged.
+	self assert: result children size = 1.
+	self assert: result children first literal = $a.
+	
+	result := rewriter execute: $b asParser / $a asParser / $a asParser.
+	self assert: rewriter hasChanged.
+	self assert: result children size = 2.
+	self assert: result children first literal = $b.
+	self assert: result children last literal = $a.
+	
+	result := rewriter execute: $a asParser / $b asParser / $a asParser.
+	self assert: rewriter hasChanged.
+	self assert: result children size = 2.
+	self assert: result children first literal = $a.
+	self assert: result children last literal = $b.
+	
+	result := rewriter execute: $a asParser / $a asParser / $b asParser.
+	self assert: rewriter hasChanged.
+	self assert: result children size = 2.
+	self assert: result children first literal = $a.
+	self assert: result children last literal = $b	
+!
+
+testPatternRemoval
+	| pattern result |
+	pattern := PPPattern class: PPLiteralObjectParser.
+	rewriter
+		replace: pattern / pattern
+		with: pattern.
+	
+	result := rewriter execute: $a asParser / $a asParser.
+	self assert: rewriter hasChanged.
+	self assert: result class = PPLiteralObjectParser.
+	self assert: result literal = $a.
+	
+	result := rewriter execute: $a asParser / $a asParser / $a asParser.
+	self deny: rewriter hasChanged.
+	self assert: result class = PPChoiceParser.
+	self assert: result children size = 3
+!
+
+testPatternReplacement
+	| pattern result |
+	pattern := PPPattern class: PPLiteralObjectParser.
+	rewriter
+		replace: pattern
+		with: pattern , pattern.
+	
+	result := rewriter execute: $a asParser.
+	self assert: rewriter hasChanged.
+	self assert: result class = PPSequenceParser.
+	self assert: result children first literal = $a.
+	self assert: result children last literal = $a.
+	
+	result := rewriter execute: #any asParser.
+	self deny: rewriter hasChanged.
+	self assert: result class = PPPredicateObjectParser
+!
+
+testReplaceLiteral
+	| result |
+	rewriter
+		replace: $a asParser 
+		with: $b asParser.
+	
+	result := rewriter execute: $a asParser.
+	self assert: rewriter hasChanged.
+	self assert: result literal = $b.
+	
+	result := rewriter execute: $c asParser.
+	self deny: rewriter hasChanged.
+	self assert: result literal = $c.
+	
+	result := rewriter execute: $a asParser , $b asParser , $c asParser.
+	self assert: rewriter hasChanged.
+	self assert: result children size = 3.
+	self assert: result children first literal = $b.
+	self assert: result children last literal = $c
+!
+
+testSwapTwoPattern
+	| first second result |
+	first := PPPattern any.
+	second := PPPattern any.
+	rewriter
+		replace: first , second
+		with: second , first.
+	
+	result := rewriter execute: $a asParser , $b asParser.
+	self assert: rewriter hasChanged.
+	self assert: result children first literal = $b.
+	self assert: result children last literal = $a.
+	
+	result := rewriter execute: $a asParser / $b asParser.
+	self deny: rewriter hasChanged.
+	self assert: result children first literal = $a.
+	self assert: result children last literal = $b
+!
+
+testWrapLiteral
+	| result |
+	rewriter
+		replace: $a asParser
+		withValueFrom: [ :parser | parser token ].
+	
+	result := rewriter execute: $a asParser.
+	self assert: rewriter hasChanged.
+	self assert: result class = PPTokenParser.
+	self assert: result children first literal = $a.
+	
+	result := rewriter execute: $c asParser.
+	self deny: rewriter hasChanged.
+	self assert: result literal = $c.
+	
+	result := rewriter execute: $a asParser , $b asParser.
+	self assert: rewriter hasChanged.
+	self assert: result children first class = PPTokenParser.
+	self assert: result children first children first literal = $a.
+	self assert: result children last class = PPLiteralObjectParser.
+	self assert: result children last literal = $b
+! !
+
+!PPRewriterTest class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPRewriterTest.st,v 1.1 2014-03-04 15:43:01 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPRewriterTest.st,v 1.1 2014-03-04 15:43:01 cg Exp $'
+! !
+