analyzer/tests/PPRewriterTest.st
changeset 209 27b919ed87da
child 382 1825151d6455
equal deleted inserted replaced
208:42c859858c78 209:27b919ed87da
       
     1 "{ Package: 'stx:goodies/petitparser/analyzer/tests' }"
       
     2 
       
     3 PPAbstractParserTest subclass:#PPRewriterTest
       
     4 	instanceVariableNames:'rewriter'
       
     5 	classVariableNames:''
       
     6 	poolDictionaries:''
       
     7 	category:'PetitAnalyzer-Tests'
       
     8 !
       
     9 
       
    10 
       
    11 !PPRewriterTest methodsFor:'running'!
       
    12 
       
    13 setUp
       
    14 	rewriter := PPRewriter new
       
    15 ! !
       
    16 
       
    17 !PPRewriterTest methodsFor:'testing'!
       
    18 
       
    19 testDuplicationRemoval
       
    20 	| duplicate before between after result |
       
    21 	duplicate := PPPattern any.
       
    22 	before := PPListPattern any.
       
    23 	between := PPListPattern any.
       
    24 	after := PPListPattern any.
       
    25 	rewriter
       
    26 		replace: before / duplicate / between / duplicate / after
       
    27 		with: before / duplicate / between / after.
       
    28 	
       
    29 	result := rewriter execute: $a asParser / $a asParser.
       
    30 	self assert: rewriter hasChanged.
       
    31 	self assert: result children size = 1.
       
    32 	self assert: result children first literal = $a.
       
    33 	
       
    34 	result := rewriter execute: $b asParser / $a asParser / $a asParser.
       
    35 	self assert: rewriter hasChanged.
       
    36 	self assert: result children size = 2.
       
    37 	self assert: result children first literal = $b.
       
    38 	self assert: result children last literal = $a.
       
    39 	
       
    40 	result := rewriter execute: $a asParser / $b asParser / $a asParser.
       
    41 	self assert: rewriter hasChanged.
       
    42 	self assert: result children size = 2.
       
    43 	self assert: result children first literal = $a.
       
    44 	self assert: result children last literal = $b.
       
    45 	
       
    46 	result := rewriter execute: $a asParser / $a asParser / $b asParser.
       
    47 	self assert: rewriter hasChanged.
       
    48 	self assert: result children size = 2.
       
    49 	self assert: result children first literal = $a.
       
    50 	self assert: result children last literal = $b	
       
    51 !
       
    52 
       
    53 testPatternRemoval
       
    54 	| pattern result |
       
    55 	pattern := PPPattern class: PPLiteralObjectParser.
       
    56 	rewriter
       
    57 		replace: pattern / pattern
       
    58 		with: pattern.
       
    59 	
       
    60 	result := rewriter execute: $a asParser / $a asParser.
       
    61 	self assert: rewriter hasChanged.
       
    62 	self assert: result class = PPLiteralObjectParser.
       
    63 	self assert: result literal = $a.
       
    64 	
       
    65 	result := rewriter execute: $a asParser / $a asParser / $a asParser.
       
    66 	self deny: rewriter hasChanged.
       
    67 	self assert: result class = PPChoiceParser.
       
    68 	self assert: result children size = 3
       
    69 !
       
    70 
       
    71 testPatternReplacement
       
    72 	| pattern result |
       
    73 	pattern := PPPattern class: PPLiteralObjectParser.
       
    74 	rewriter
       
    75 		replace: pattern
       
    76 		with: pattern , pattern.
       
    77 	
       
    78 	result := rewriter execute: $a asParser.
       
    79 	self assert: rewriter hasChanged.
       
    80 	self assert: result class = PPSequenceParser.
       
    81 	self assert: result children first literal = $a.
       
    82 	self assert: result children last literal = $a.
       
    83 	
       
    84 	result := rewriter execute: #any asParser.
       
    85 	self deny: rewriter hasChanged.
       
    86 	self assert: result class = PPPredicateObjectParser
       
    87 !
       
    88 
       
    89 testReplaceLiteral
       
    90 	| result |
       
    91 	rewriter
       
    92 		replace: $a asParser 
       
    93 		with: $b asParser.
       
    94 	
       
    95 	result := rewriter execute: $a asParser.
       
    96 	self assert: rewriter hasChanged.
       
    97 	self assert: result literal = $b.
       
    98 	
       
    99 	result := rewriter execute: $c asParser.
       
   100 	self deny: rewriter hasChanged.
       
   101 	self assert: result literal = $c.
       
   102 	
       
   103 	result := rewriter execute: $a asParser , $b asParser , $c asParser.
       
   104 	self assert: rewriter hasChanged.
       
   105 	self assert: result children size = 3.
       
   106 	self assert: result children first literal = $b.
       
   107 	self assert: result children last literal = $c
       
   108 !
       
   109 
       
   110 testSwapTwoPattern
       
   111 	| first second result |
       
   112 	first := PPPattern any.
       
   113 	second := PPPattern any.
       
   114 	rewriter
       
   115 		replace: first , second
       
   116 		with: second , first.
       
   117 	
       
   118 	result := rewriter execute: $a asParser , $b asParser.
       
   119 	self assert: rewriter hasChanged.
       
   120 	self assert: result children first literal = $b.
       
   121 	self assert: result children last literal = $a.
       
   122 	
       
   123 	result := rewriter execute: $a asParser / $b asParser.
       
   124 	self deny: rewriter hasChanged.
       
   125 	self assert: result children first literal = $a.
       
   126 	self assert: result children last literal = $b
       
   127 !
       
   128 
       
   129 testWrapLiteral
       
   130 	| result |
       
   131 	rewriter
       
   132 		replace: $a asParser
       
   133 		withValueFrom: [ :parser | parser token ].
       
   134 	
       
   135 	result := rewriter execute: $a asParser.
       
   136 	self assert: rewriter hasChanged.
       
   137 	self assert: result class = PPTokenParser.
       
   138 	self assert: result children first literal = $a.
       
   139 	
       
   140 	result := rewriter execute: $c asParser.
       
   141 	self deny: rewriter hasChanged.
       
   142 	self assert: result literal = $c.
       
   143 	
       
   144 	result := rewriter execute: $a asParser , $b asParser.
       
   145 	self assert: rewriter hasChanged.
       
   146 	self assert: result children first class = PPTokenParser.
       
   147 	self assert: result children first children first literal = $a.
       
   148 	self assert: result children last class = PPLiteralObjectParser.
       
   149 	self assert: result children last literal = $b
       
   150 ! !
       
   151 
       
   152 !PPRewriterTest class methodsFor:'documentation'!
       
   153 
       
   154 version
       
   155     ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPRewriterTest.st,v 1.1 2014-03-04 15:43:01 cg Exp $'
       
   156 !
       
   157 
       
   158 version_CVS
       
   159     ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPRewriterTest.st,v 1.1 2014-03-04 15:43:01 cg Exp $'
       
   160 ! !
       
   161