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