# HG changeset patch # User Claus Gittinger # Date 1393947781 -3600 # Node ID 27b919ed87daae4787639b4a6961ec0d0042aefb # Parent 42c859858c78cd7bce294a9d00be6b5fb0a4aa15 initial checkin diff -r 42c859858c78 -r 27b919ed87da 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 $' +! ! +