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