analyzer/tests/PPRewriterTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 24 Nov 2015 19:37:14 +0100
changeset 553 d83cb4945d5e
parent 425 0a5c4929af56
permissions -rw-r--r--
Oops, forgot to export PETITCOMPILER_DATA_DIRECTORY variable ...so Smalltalk code could not read it. Also fixed test for "include" scripts so they are not downloaded again when already downloaded.
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
425
0a5c4929af56 Fixed dependencies (requires stx/goodies/petitparser/tests to load properly)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 402
diff changeset
     3
"{ NameSpace: Smalltalk }"
0a5c4929af56 Fixed dependencies (requires stx/goodies/petitparser/tests to load properly)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 402
diff changeset
     4
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
PPAbstractParserTest subclass:#PPRewriterTest
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'rewriter'
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'PetitAnalyzer-Tests'
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
!PPRewriterTest methodsFor:'running'!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
setUp
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	rewriter := PPRewriter new
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
! !
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!PPRewriterTest methodsFor:'testing'!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
testDuplicationRemoval
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	| duplicate before between after result |
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
	duplicate := PPPattern any.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	before := PPListPattern any.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	between := PPListPattern any.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	after := PPListPattern any.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    27
	rewriter replace: before / duplicate / between / duplicate / after with: before / duplicate / between / after.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	result := rewriter execute: $a asParser / $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    30
	self assert: result children size equals: 1.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    31
	self assert: result children first literal equals: $a.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	result := rewriter execute: $b asParser / $a asParser / $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    34
	self assert: result children size equals: 2.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    35
	self assert: result children first literal equals: $b.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    36
	self assert: result children last literal equals: $a.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	result := rewriter execute: $a asParser / $b asParser / $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    39
	self assert: result children size equals: 2.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    40
	self assert: result children first literal equals: $a.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    41
	self assert: result children last literal equals: $b.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	result := rewriter execute: $a asParser / $a asParser / $b asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    44
	self assert: result children size equals: 2.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    45
	self assert: result children first literal equals: $a.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    46
	self assert: result children last literal equals: $b
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
testPatternRemoval
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	| pattern result |
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	pattern := PPPattern class: PPLiteralObjectParser.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    52
	rewriter replace: pattern / pattern with: pattern.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	result := rewriter execute: $a asParser / $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    55
	self assert: result class equals: PPLiteralObjectParser.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    56
	self assert: result literal equals: $a.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	result := rewriter execute: $a asParser / $a asParser / $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	self deny: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    59
	self assert: result class equals: PPChoiceParser.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    60
	self assert: result children size equals: 3
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
testPatternReplacement
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	| pattern result |
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
	pattern := PPPattern class: PPLiteralObjectParser.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    66
	rewriter replace: pattern with: pattern , pattern.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
	result := rewriter execute: $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    69
	self assert: result class equals: PPSequenceParser.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    70
	self assert: result children first literal equals: $a.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    71
	self assert: result children last literal equals: $a.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	result := rewriter execute: #any asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	self deny: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    74
	self assert: result class equals: PPPredicateObjectParser
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
testReplaceLiteral
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	| result |
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    79
	rewriter replace: $a asParser with: $b asParser.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
	result := rewriter execute: $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    82
	self assert: result literal equals: $b.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	result := rewriter execute: $c asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	self deny: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    85
	self assert: result literal equals: $c.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	result := rewriter execute: $a asParser , $b asParser , $c asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    88
	self assert: result children size equals: 3.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    89
	self assert: result children first literal equals: $b.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    90
	self assert: result children last literal equals: $c
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
testSwapTwoPattern
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
	| first second result |
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	first := PPPattern any.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	second := PPPattern any.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
    97
	rewriter replace: first , second with: second , first.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
	result := rewriter execute: $a asParser , $b asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   100
	self assert: result children first literal equals: $b.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   101
	self assert: result children last literal equals: $a.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
	result := rewriter execute: $a asParser / $b asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
	self deny: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   104
	self assert: result children first literal equals: $a.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   105
	self assert: result children last literal equals: $b
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
testWrapLiteral
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
	| result |
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   110
	rewriter replace: $a asParser withValueFrom: [ :parser | parser token ].
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
	result := rewriter execute: $a asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
	self assert: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   113
	self assert: result class equals: PPTokenParser.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   114
	self assert: result children first literal equals: $a.
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
	result := rewriter execute: $c asParser.
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
	self deny: rewriter hasChanged.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   117
	self assert: result literal equals: $c.
209
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.
402
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   120
	self assert: result children first class equals: PPTokenParser.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   121
	self assert: result children first children first literal equals: $a.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   122
	self assert: result children last class equals: PPLiteralObjectParser.
1d7503124bc8 Reverted back change from `assert: x equals: y` to assert: (x = u).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 382
diff changeset
   123
	self assert: result children last literal equals: $b
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
! !
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
!PPRewriterTest class methodsFor:'documentation'!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
version
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    ^ '$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
   130
!
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
version_CVS
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPRewriterTest.st,v 1.1 2014-03-04 15:43:01 cg Exp $'
382
1825151d6455 Added target `mcz` to export .mcz package out of Smalltalk/X package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   134
!
1825151d6455 Added target `mcz` to export .mcz package out of Smalltalk/X package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   135
1825151d6455 Added target `mcz` to export .mcz package out of Smalltalk/X package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   136
version_HG
1825151d6455 Added target `mcz` to export .mcz package out of Smalltalk/X package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   137
1825151d6455 Added target `mcz` to export .mcz package out of Smalltalk/X package.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   138
    ^ '$Changeset: <not expanded> $'
209
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
! !
27b919ed87da initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140