analyzer/tests/PPRewriterTest.st
changeset 402 1d7503124bc8
parent 382 1825151d6455
child 425 0a5c4929af56
equal deleted inserted replaced
401:538267cab6ec 402:1d7503124bc8
    20 	| duplicate before between after result |
    20 	| duplicate before between after result |
    21 	duplicate := PPPattern any.
    21 	duplicate := PPPattern any.
    22 	before := PPListPattern any.
    22 	before := PPListPattern any.
    23 	between := PPListPattern any.
    23 	between := PPListPattern any.
    24 	after := PPListPattern any.
    24 	after := PPListPattern any.
    25 	rewriter
    25 	rewriter replace: before / duplicate / between / duplicate / after with: before / duplicate / between / after.
    26 		replace: before / duplicate / between / duplicate / after
       
    27 		with: before / duplicate / between / after.
       
    28 	
       
    29 	result := rewriter execute: $a asParser / $a asParser.
    26 	result := rewriter execute: $a asParser / $a asParser.
    30 	self assert: rewriter hasChanged.
    27 	self assert: rewriter hasChanged.
    31 	self assert: result children size = 1.
    28 	self assert: result children size equals: 1.
    32 	self assert: result children first literal = $a.
    29 	self assert: result children first literal equals: $a.
    33 	
       
    34 	result := rewriter execute: $b asParser / $a asParser / $a asParser.
    30 	result := rewriter execute: $b asParser / $a asParser / $a asParser.
    35 	self assert: rewriter hasChanged.
    31 	self assert: rewriter hasChanged.
    36 	self assert: result children size = 2.
    32 	self assert: result children size equals: 2.
    37 	self assert: result children first literal = $b.
    33 	self assert: result children first literal equals: $b.
    38 	self assert: result children last literal = $a.
    34 	self assert: result children last literal equals: $a.
    39 	
       
    40 	result := rewriter execute: $a asParser / $b asParser / $a asParser.
    35 	result := rewriter execute: $a asParser / $b asParser / $a asParser.
    41 	self assert: rewriter hasChanged.
    36 	self assert: rewriter hasChanged.
    42 	self assert: result children size = 2.
    37 	self assert: result children size equals: 2.
    43 	self assert: result children first literal = $a.
    38 	self assert: result children first literal equals: $a.
    44 	self assert: result children last literal = $b.
    39 	self assert: result children last literal equals: $b.
    45 	
       
    46 	result := rewriter execute: $a asParser / $a asParser / $b asParser.
    40 	result := rewriter execute: $a asParser / $a asParser / $b asParser.
    47 	self assert: rewriter hasChanged.
    41 	self assert: rewriter hasChanged.
    48 	self assert: result children size = 2.
    42 	self assert: result children size equals: 2.
    49 	self assert: result children first literal = $a.
    43 	self assert: result children first literal equals: $a.
    50 	self assert: result children last literal = $b	
    44 	self assert: result children last literal equals: $b
    51 !
    45 !
    52 
    46 
    53 testPatternRemoval
    47 testPatternRemoval
    54 	| pattern result |
    48 	| pattern result |
    55 	pattern := PPPattern class: PPLiteralObjectParser.
    49 	pattern := PPPattern class: PPLiteralObjectParser.
    56 	rewriter
    50 	rewriter replace: pattern / pattern with: pattern.
    57 		replace: pattern / pattern
       
    58 		with: pattern.
       
    59 	
       
    60 	result := rewriter execute: $a asParser / $a asParser.
    51 	result := rewriter execute: $a asParser / $a asParser.
    61 	self assert: rewriter hasChanged.
    52 	self assert: rewriter hasChanged.
    62 	self assert: result class = PPLiteralObjectParser.
    53 	self assert: result class equals: PPLiteralObjectParser.
    63 	self assert: result literal = $a.
    54 	self assert: result literal equals: $a.
    64 	
       
    65 	result := rewriter execute: $a asParser / $a asParser / $a asParser.
    55 	result := rewriter execute: $a asParser / $a asParser / $a asParser.
    66 	self deny: rewriter hasChanged.
    56 	self deny: rewriter hasChanged.
    67 	self assert: result class = PPChoiceParser.
    57 	self assert: result class equals: PPChoiceParser.
    68 	self assert: result children size = 3
    58 	self assert: result children size equals: 3
    69 !
    59 !
    70 
    60 
    71 testPatternReplacement
    61 testPatternReplacement
    72 	| pattern result |
    62 	| pattern result |
    73 	pattern := PPPattern class: PPLiteralObjectParser.
    63 	pattern := PPPattern class: PPLiteralObjectParser.
    74 	rewriter
    64 	rewriter replace: pattern with: pattern , pattern.
    75 		replace: pattern
       
    76 		with: pattern , pattern.
       
    77 	
       
    78 	result := rewriter execute: $a asParser.
    65 	result := rewriter execute: $a asParser.
    79 	self assert: rewriter hasChanged.
    66 	self assert: rewriter hasChanged.
    80 	self assert: result class = PPSequenceParser.
    67 	self assert: result class equals: PPSequenceParser.
    81 	self assert: result children first literal = $a.
    68 	self assert: result children first literal equals: $a.
    82 	self assert: result children last literal = $a.
    69 	self assert: result children last literal equals: $a.
    83 	
       
    84 	result := rewriter execute: #any asParser.
    70 	result := rewriter execute: #any asParser.
    85 	self deny: rewriter hasChanged.
    71 	self deny: rewriter hasChanged.
    86 	self assert: result class = PPPredicateObjectParser
    72 	self assert: result class equals: PPPredicateObjectParser
    87 !
    73 !
    88 
    74 
    89 testReplaceLiteral
    75 testReplaceLiteral
    90 	| result |
    76 	| result |
    91 	rewriter
    77 	rewriter replace: $a asParser with: $b asParser.
    92 		replace: $a asParser 
       
    93 		with: $b asParser.
       
    94 	
       
    95 	result := rewriter execute: $a asParser.
    78 	result := rewriter execute: $a asParser.
    96 	self assert: rewriter hasChanged.
    79 	self assert: rewriter hasChanged.
    97 	self assert: result literal = $b.
    80 	self assert: result literal equals: $b.
    98 	
       
    99 	result := rewriter execute: $c asParser.
    81 	result := rewriter execute: $c asParser.
   100 	self deny: rewriter hasChanged.
    82 	self deny: rewriter hasChanged.
   101 	self assert: result literal = $c.
    83 	self assert: result literal equals: $c.
   102 	
       
   103 	result := rewriter execute: $a asParser , $b asParser , $c asParser.
    84 	result := rewriter execute: $a asParser , $b asParser , $c asParser.
   104 	self assert: rewriter hasChanged.
    85 	self assert: rewriter hasChanged.
   105 	self assert: result children size = 3.
    86 	self assert: result children size equals: 3.
   106 	self assert: result children first literal = $b.
    87 	self assert: result children first literal equals: $b.
   107 	self assert: result children last literal = $c
    88 	self assert: result children last literal equals: $c
   108 !
    89 !
   109 
    90 
   110 testSwapTwoPattern
    91 testSwapTwoPattern
   111 	| first second result |
    92 	| first second result |
   112 	first := PPPattern any.
    93 	first := PPPattern any.
   113 	second := PPPattern any.
    94 	second := PPPattern any.
   114 	rewriter
    95 	rewriter replace: first , second with: second , first.
   115 		replace: first , second
       
   116 		with: second , first.
       
   117 	
       
   118 	result := rewriter execute: $a asParser , $b asParser.
    96 	result := rewriter execute: $a asParser , $b asParser.
   119 	self assert: rewriter hasChanged.
    97 	self assert: rewriter hasChanged.
   120 	self assert: result children first literal = $b.
    98 	self assert: result children first literal equals: $b.
   121 	self assert: result children last literal = $a.
    99 	self assert: result children last literal equals: $a.
   122 	
       
   123 	result := rewriter execute: $a asParser / $b asParser.
   100 	result := rewriter execute: $a asParser / $b asParser.
   124 	self deny: rewriter hasChanged.
   101 	self deny: rewriter hasChanged.
   125 	self assert: result children first literal = $a.
   102 	self assert: result children first literal equals: $a.
   126 	self assert: result children last literal = $b
   103 	self assert: result children last literal equals: $b
   127 !
   104 !
   128 
   105 
   129 testWrapLiteral
   106 testWrapLiteral
   130 	| result |
   107 	| result |
   131 	rewriter
   108 	rewriter replace: $a asParser withValueFrom: [ :parser | parser token ].
   132 		replace: $a asParser
       
   133 		withValueFrom: [ :parser | parser token ].
       
   134 	
       
   135 	result := rewriter execute: $a asParser.
   109 	result := rewriter execute: $a asParser.
   136 	self assert: rewriter hasChanged.
   110 	self assert: rewriter hasChanged.
   137 	self assert: result class = PPTokenParser.
   111 	self assert: result class equals: PPTokenParser.
   138 	self assert: result children first literal = $a.
   112 	self assert: result children first literal equals: $a.
   139 	
       
   140 	result := rewriter execute: $c asParser.
   113 	result := rewriter execute: $c asParser.
   141 	self deny: rewriter hasChanged.
   114 	self deny: rewriter hasChanged.
   142 	self assert: result literal = $c.
   115 	self assert: result literal equals: $c.
   143 	
       
   144 	result := rewriter execute: $a asParser , $b asParser.
   116 	result := rewriter execute: $a asParser , $b asParser.
   145 	self assert: rewriter hasChanged.
   117 	self assert: rewriter hasChanged.
   146 	self assert: result children first class = PPTokenParser.
   118 	self assert: result children first class equals: PPTokenParser.
   147 	self assert: result children first children first literal = $a.
   119 	self assert: result children first children first literal equals: $a.
   148 	self assert: result children last class = PPLiteralObjectParser.
   120 	self assert: result children last class equals: PPLiteralObjectParser.
   149 	self assert: result children last literal = $b
   121 	self assert: result children last literal equals: $b
   150 ! !
   122 ! !
   151 
   123 
   152 !PPRewriterTest class methodsFor:'documentation'!
   124 !PPRewriterTest class methodsFor:'documentation'!
   153 
   125 
   154 version
   126 version