xref: /aosp_15_r20/external/antlr/runtime/JavaScript/tests/functional/t048rewrite.html (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2*16467b97STreehugger Robot<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3*16467b97STreehugger Robot<head>
4*16467b97STreehugger Robot<meta http-equiv="content-type" content="text/html;charset=utf-8" />
5*16467b97STreehugger Robot<title>t048rewrite</title>
6*16467b97STreehugger Robot
7*16467b97STreehugger Robot<!-- ANTLR includes -->
8*16467b97STreehugger Robot<script type="text/javascript" src="../../lib/antlr3-all.js"></script>
9*16467b97STreehugger Robot<script type="text/javascript" src="t048rewrite.js"></script>
10*16467b97STreehugger Robot
11*16467b97STreehugger Robot<!-- JsUnit include -->
12*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
13*16467b97STreehugger Robot
14*16467b97STreehugger Robot<!-- Test Code -->
15*16467b97STreehugger Robot<script type="text/javascript">
16*16467b97STreehugger Robot    var TLexer = function() {
17*16467b97STreehugger Robot        TLexer.superclass.constructor.apply(this, arguments);
18*16467b97STreehugger Robot    };
19*16467b97STreehugger Robot    org.antlr.lang.extend(TLexer, t048rewrite, {
20*16467b97STreehugger Robot        recover: function(re) {
21*16467b97STreehugger Robot            /* don't recover, just crash */
22*16467b97STreehugger Robot            throw re;
23*16467b97STreehugger Robot        }
24*16467b97STreehugger Robot    });
25*16467b97STreehugger Robot
26*16467b97STreehugger Robot    function _parse(xinput) {
27*16467b97STreehugger Robot        var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
28*16467b97STreehugger Robot            lexer = new TLexer(cstream),
29*16467b97STreehugger Robot            tstream = new org.antlr.runtime.TokenRewriteStream(lexer);
30*16467b97STreehugger Robot        tstream.LT(1); // fill buffer
31*16467b97STreehugger Robot        return tstream;
32*16467b97STreehugger Robot    }
33*16467b97STreehugger Robot
34*16467b97STreehugger Robot    function testInsertBeforeIndex0() {
35*16467b97STreehugger Robot        var tokens = _parse("abc");
36*16467b97STreehugger Robot        tokens.insertBefore(0,"0");
37*16467b97STreehugger Robot
38*16467b97STreehugger Robot        var result = tokens.toString(),
39*16467b97STreehugger Robot            expecting = "0abc";
40*16467b97STreehugger Robot        assertEquals(result, expecting);
41*16467b97STreehugger Robot    }
42*16467b97STreehugger Robot
43*16467b97STreehugger Robot    function testInsertAfterLastIndex() {
44*16467b97STreehugger Robot        var tokens = _parse("abc");
45*16467b97STreehugger Robot        tokens.insertAfter(2,"x");
46*16467b97STreehugger Robot
47*16467b97STreehugger Robot        var result = tokens.toString(),
48*16467b97STreehugger Robot            expecting = "abcx";
49*16467b97STreehugger Robot        assertEquals(result, expecting);
50*16467b97STreehugger Robot    }
51*16467b97STreehugger Robot
52*16467b97STreehugger Robot    function test2InsertBeforeAfterMiddleIndex() {
53*16467b97STreehugger Robot        var tokens = _parse("abc");
54*16467b97STreehugger Robot        tokens.insertBefore(1,"x");
55*16467b97STreehugger Robot        tokens.insertAfter(1, "x");
56*16467b97STreehugger Robot
57*16467b97STreehugger Robot        var result = tokens.toString(),
58*16467b97STreehugger Robot            expecting = "axbxc";
59*16467b97STreehugger Robot        assertEquals(result, expecting);
60*16467b97STreehugger Robot    }
61*16467b97STreehugger Robot
62*16467b97STreehugger Robot    function testReplaceIndex0() {
63*16467b97STreehugger Robot        var tokens = _parse("abc");
64*16467b97STreehugger Robot        tokens.replace(0,"x");
65*16467b97STreehugger Robot
66*16467b97STreehugger Robot        var result = tokens.toString(),
67*16467b97STreehugger Robot            expecting = "xbc";
68*16467b97STreehugger Robot        assertEquals(result, expecting);
69*16467b97STreehugger Robot    }
70*16467b97STreehugger Robot
71*16467b97STreehugger Robot    function testReplaceLastIndex() {
72*16467b97STreehugger Robot        var tokens = _parse("abc");
73*16467b97STreehugger Robot        tokens.replace(2,"x");
74*16467b97STreehugger Robot
75*16467b97STreehugger Robot        var result = tokens.toString(),
76*16467b97STreehugger Robot            expecting = "abx";
77*16467b97STreehugger Robot        assertEquals(result, expecting);
78*16467b97STreehugger Robot    }
79*16467b97STreehugger Robot
80*16467b97STreehugger Robot    function testReplaceMiddleIndex() {
81*16467b97STreehugger Robot        var tokens = _parse("abc");
82*16467b97STreehugger Robot        tokens.replace(1,"x");
83*16467b97STreehugger Robot
84*16467b97STreehugger Robot        var result = tokens.toString(),
85*16467b97STreehugger Robot            expecting = "axc";
86*16467b97STreehugger Robot        assertEquals(result, expecting);
87*16467b97STreehugger Robot    }
88*16467b97STreehugger Robot
89*16467b97STreehugger Robot    function test2ReplaceMiddleIndex() {
90*16467b97STreehugger Robot        var tokens = _parse("abc");
91*16467b97STreehugger Robot        tokens.replace(1,"x");
92*16467b97STreehugger Robot        tokens.replace(1,"y");
93*16467b97STreehugger Robot
94*16467b97STreehugger Robot        var result = tokens.toString(),
95*16467b97STreehugger Robot            expecting = "ayc";
96*16467b97STreehugger Robot        assertEquals(result, expecting);
97*16467b97STreehugger Robot    }
98*16467b97STreehugger Robot
99*16467b97STreehugger Robot    function testReplaceThenDeleteMiddleIndex() {
100*16467b97STreehugger Robot        var tokens = _parse("abc");
101*16467b97STreehugger Robot        tokens.replace(1,"x");
102*16467b97STreehugger Robot        tokens.remove(1);
103*16467b97STreehugger Robot
104*16467b97STreehugger Robot        var result = tokens.toString(),
105*16467b97STreehugger Robot            expecting = "ac";
106*16467b97STreehugger Robot        assertEquals(result, expecting);
107*16467b97STreehugger Robot    }
108*16467b97STreehugger Robot
109*16467b97STreehugger Robot    function testReplaceThenInsertSameIndex() {
110*16467b97STreehugger Robot        var tokens = _parse("abc");
111*16467b97STreehugger Robot        tokens.replace(0,"x");
112*16467b97STreehugger Robot        tokens.insertBefore(0,"0");
113*16467b97STreehugger Robot
114*16467b97STreehugger Robot        var result = tokens.toString(),
115*16467b97STreehugger Robot            expecting = "0xbc";
116*16467b97STreehugger Robot        assertEquals(result, expecting);
117*16467b97STreehugger Robot    }
118*16467b97STreehugger Robot
119*16467b97STreehugger Robot    function testReplaceThen2InsertSameIndex() {
120*16467b97STreehugger Robot        var tokens = _parse("abc");
121*16467b97STreehugger Robot        tokens.replace(0,"x");
122*16467b97STreehugger Robot        tokens.insertBefore(0,"y");
123*16467b97STreehugger Robot        tokens.insertBefore(0,"z");
124*16467b97STreehugger Robot
125*16467b97STreehugger Robot        var result = tokens.toString(),
126*16467b97STreehugger Robot            expecting = "zyxbc";
127*16467b97STreehugger Robot        assertEquals(result, expecting);
128*16467b97STreehugger Robot    }
129*16467b97STreehugger Robot
130*16467b97STreehugger Robot    function testInsertThenReplaceSameIndex() {
131*16467b97STreehugger Robot        var tokens = _parse("abc");
132*16467b97STreehugger Robot        tokens.insertBefore(0,"0");
133*16467b97STreehugger Robot        tokens.replace(0,"x");
134*16467b97STreehugger Robot
135*16467b97STreehugger Robot        var result = tokens.toString(),
136*16467b97STreehugger Robot            expecting = "0xbc";
137*16467b97STreehugger Robot        assertEquals(result, expecting);
138*16467b97STreehugger Robot    }
139*16467b97STreehugger Robot
140*16467b97STreehugger Robot    function test2InsertMiddleIndex() {
141*16467b97STreehugger Robot        var tokens = _parse("abc");
142*16467b97STreehugger Robot        tokens.insertBefore(1,"x");
143*16467b97STreehugger Robot        tokens.insertBefore(1,"y");
144*16467b97STreehugger Robot
145*16467b97STreehugger Robot        var result = tokens.toString(),
146*16467b97STreehugger Robot            expecting = "ayxbc";
147*16467b97STreehugger Robot        assertEquals(result, expecting);
148*16467b97STreehugger Robot    }
149*16467b97STreehugger Robot
150*16467b97STreehugger Robot    function test2InsertThenReplaceIndex0() {
151*16467b97STreehugger Robot        var tokens = _parse("abc");
152*16467b97STreehugger Robot        tokens.insertBefore(0,"x");
153*16467b97STreehugger Robot        tokens.insertBefore(0,"y");
154*16467b97STreehugger Robot        tokens.replace(0,"z");
155*16467b97STreehugger Robot
156*16467b97STreehugger Robot        var result = tokens.toString(),
157*16467b97STreehugger Robot            expecting = "yxzbc";
158*16467b97STreehugger Robot        assertEquals(result, expecting);
159*16467b97STreehugger Robot    }
160*16467b97STreehugger Robot
161*16467b97STreehugger Robot    function testReplaceThenInsertBeforeLastIndex() {
162*16467b97STreehugger Robot        var tokens = _parse("abc");
163*16467b97STreehugger Robot        tokens.replace(2,"x");
164*16467b97STreehugger Robot        tokens.insertBefore(2,"y");
165*16467b97STreehugger Robot
166*16467b97STreehugger Robot        var result = tokens.toString(),
167*16467b97STreehugger Robot            expecting = "abyx";
168*16467b97STreehugger Robot        assertEquals(result, expecting);
169*16467b97STreehugger Robot    }
170*16467b97STreehugger Robot
171*16467b97STreehugger Robot    function testInsertThenReplaceLastIndex() {
172*16467b97STreehugger Robot        var tokens = _parse("abc");
173*16467b97STreehugger Robot        tokens.insertBefore(2,"y");
174*16467b97STreehugger Robot        tokens.replace(2,"x");
175*16467b97STreehugger Robot
176*16467b97STreehugger Robot        var result = tokens.toString(),
177*16467b97STreehugger Robot            expecting = "abyx";
178*16467b97STreehugger Robot        assertEquals(result, expecting);
179*16467b97STreehugger Robot    }
180*16467b97STreehugger Robot
181*16467b97STreehugger Robot    function testReplaceThenInsertLastIndex() {
182*16467b97STreehugger Robot        var tokens = _parse("abc");
183*16467b97STreehugger Robot        tokens.replace(2,"x");
184*16467b97STreehugger Robot        tokens.insertAfter(2,"y");
185*16467b97STreehugger Robot
186*16467b97STreehugger Robot        var result = tokens.toString(),
187*16467b97STreehugger Robot            expecting = "abxy";
188*16467b97STreehugger Robot        assertEquals(result, expecting);
189*16467b97STreehugger Robot    }
190*16467b97STreehugger Robot
191*16467b97STreehugger Robot    function testReplaceRangeThenInsertInMiddle() {
192*16467b97STreehugger Robot        var tokens = _parse("abcccba");
193*16467b97STreehugger Robot        tokens.replace(2,4,"x");
194*16467b97STreehugger Robot        tokens.insertBefore(3,"y");
195*16467b97STreehugger Robot
196*16467b97STreehugger Robot        var result = tokens.toString(),
197*16467b97STreehugger Robot            expecting = "abxba";
198*16467b97STreehugger Robot        assertEquals(result, expecting);
199*16467b97STreehugger Robot    }
200*16467b97STreehugger Robot
201*16467b97STreehugger Robot    function testReplaceRangeThenInsertAtLeftEdge() {
202*16467b97STreehugger Robot        var tokens = _parse("abcccba");
203*16467b97STreehugger Robot        tokens.replace(2,4,"x");
204*16467b97STreehugger Robot        tokens.insertBefore(2,"y");
205*16467b97STreehugger Robot
206*16467b97STreehugger Robot        var result = tokens.toString(),
207*16467b97STreehugger Robot            expecting = "abyxba";
208*16467b97STreehugger Robot        assertEquals(result, expecting);
209*16467b97STreehugger Robot    }
210*16467b97STreehugger Robot
211*16467b97STreehugger Robot    function testReplaceRangeThenInsertAtRightEdge() {
212*16467b97STreehugger Robot        var tokens = _parse("abcccba");
213*16467b97STreehugger Robot        tokens.replace(2,4,"x");
214*16467b97STreehugger Robot        tokens.insertBefore(4,"y");
215*16467b97STreehugger Robot
216*16467b97STreehugger Robot        var result = tokens.toString(),
217*16467b97STreehugger Robot            expecting = "abxba";
218*16467b97STreehugger Robot        assertEquals(result, expecting);
219*16467b97STreehugger Robot    }
220*16467b97STreehugger Robot
221*16467b97STreehugger Robot    function testReplaceRangeThenInsertAfterRightEdge() {
222*16467b97STreehugger Robot        var tokens = _parse("abcccba");
223*16467b97STreehugger Robot        tokens.replace(2,4,"x");
224*16467b97STreehugger Robot        tokens.insertAfter(4,"y");
225*16467b97STreehugger Robot
226*16467b97STreehugger Robot        var result = tokens.toString(),
227*16467b97STreehugger Robot            expecting = "abxyba";
228*16467b97STreehugger Robot        assertEquals(result, expecting);
229*16467b97STreehugger Robot    }
230*16467b97STreehugger Robot
231*16467b97STreehugger Robot    function testReplaceAll() {
232*16467b97STreehugger Robot        var tokens = _parse("abcccba");
233*16467b97STreehugger Robot        tokens.replace(0,6,"x");
234*16467b97STreehugger Robot
235*16467b97STreehugger Robot        var result = tokens.toString(),
236*16467b97STreehugger Robot            expecting = "x";
237*16467b97STreehugger Robot        assertEquals(result, expecting);
238*16467b97STreehugger Robot    }
239*16467b97STreehugger Robot
240*16467b97STreehugger Robot    function testReplaceSubsetThenFetch() {
241*16467b97STreehugger Robot        var tokens = _parse("abcccba");
242*16467b97STreehugger Robot        tokens.replace(2,4,"xyz");
243*16467b97STreehugger Robot
244*16467b97STreehugger Robot        var result = tokens.toString(0,6),
245*16467b97STreehugger Robot            expecting = "abxyzba";
246*16467b97STreehugger Robot        assertEquals(result, expecting);
247*16467b97STreehugger Robot    }
248*16467b97STreehugger Robot
249*16467b97STreehugger Robot    function testReplaceThenReplaceSuperset() {
250*16467b97STreehugger Robot        var tokens = _parse("abcccba");
251*16467b97STreehugger Robot        tokens.replace(2,4,"xyz");
252*16467b97STreehugger Robot        tokens.replace(2,5,"foo");
253*16467b97STreehugger Robot
254*16467b97STreehugger Robot        var result = tokens.toString(),
255*16467b97STreehugger Robot            expecting = "abfooa";
256*16467b97STreehugger Robot        assertEquals(result, expecting);
257*16467b97STreehugger Robot    }
258*16467b97STreehugger Robot
259*16467b97STreehugger Robot    function testReplaceThenReplaceLowerIndexedSuperset() {
260*16467b97STreehugger Robot        var tokens = _parse("abcccba");
261*16467b97STreehugger Robot        tokens.replace(2,4,"xyz");
262*16467b97STreehugger Robot        tokens.replace(1,3,"foo");
263*16467b97STreehugger Robot
264*16467b97STreehugger Robot        var result = tokens.toString(),
265*16467b97STreehugger Robot            expecting = "afoocba";
266*16467b97STreehugger Robot        assertEquals(result, expecting);
267*16467b97STreehugger Robot    }
268*16467b97STreehugger Robot
269*16467b97STreehugger Robot    function testReplaceSingleMiddleThenOverlappingSuperset() {
270*16467b97STreehugger Robot        var tokens = _parse("abcba");
271*16467b97STreehugger Robot        tokens.replace(2,2,"xyz");
272*16467b97STreehugger Robot        tokens.replace(0,3,"foo");
273*16467b97STreehugger Robot
274*16467b97STreehugger Robot        var result = tokens.toString(),
275*16467b97STreehugger Robot            expecting = "fooa";
276*16467b97STreehugger Robot        assertEquals(result, expecting);
277*16467b97STreehugger Robot    }
278*16467b97STreehugger Robot
279*16467b97STreehugger Robot</script>
280*16467b97STreehugger Robot
281*16467b97STreehugger Robot</head>
282*16467b97STreehugger Robot<body>
283*16467b97STreehugger Robot    <h1>t048rewrite</h1>
284*16467b97STreehugger Robot</body>
285*16467b97STreehugger Robot</html>
286