| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <meta http-equiv="content-type" content="text/html;charset=utf-8" /> |
| <title>t048rewrite</title> |
| |
| <!-- ANTLR includes --> |
| <script type="text/javascript" src="../../lib/antlr3-all.js"></script> |
| <script type="text/javascript" src="t048rewrite.js"></script> |
| |
| <!-- JsUnit include --> |
| <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> |
| |
| <!-- Test Code --> |
| <script type="text/javascript"> |
| var TLexer = function() { |
| TLexer.superclass.constructor.apply(this, arguments); |
| }; |
| org.antlr.lang.extend(TLexer, t048rewrite, { |
| recover: function(re) { |
| /* don't recover, just crash */ |
| throw re; |
| } |
| }); |
| |
| function _parse(xinput) { |
| var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), |
| lexer = new TLexer(cstream), |
| tstream = new org.antlr.runtime.TokenRewriteStream(lexer); |
| tstream.LT(1); // fill buffer |
| return tstream; |
| } |
| |
| function testInsertBeforeIndex0() { |
| var tokens = _parse("abc"); |
| tokens.insertBefore(0,"0"); |
| |
| var result = tokens.toString(), |
| expecting = "0abc"; |
| assertEquals(result, expecting); |
| } |
| |
| function testInsertAfterLastIndex() { |
| var tokens = _parse("abc"); |
| tokens.insertAfter(2,"x"); |
| |
| var result = tokens.toString(), |
| expecting = "abcx"; |
| assertEquals(result, expecting); |
| } |
| |
| function test2InsertBeforeAfterMiddleIndex() { |
| var tokens = _parse("abc"); |
| tokens.insertBefore(1,"x"); |
| tokens.insertAfter(1, "x"); |
| |
| var result = tokens.toString(), |
| expecting = "axbxc"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceIndex0() { |
| var tokens = _parse("abc"); |
| tokens.replace(0,"x"); |
| |
| var result = tokens.toString(), |
| expecting = "xbc"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceLastIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(2,"x"); |
| |
| var result = tokens.toString(), |
| expecting = "abx"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceMiddleIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(1,"x"); |
| |
| var result = tokens.toString(), |
| expecting = "axc"; |
| assertEquals(result, expecting); |
| } |
| |
| function test2ReplaceMiddleIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(1,"x"); |
| tokens.replace(1,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "ayc"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceThenDeleteMiddleIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(1,"x"); |
| tokens.remove(1); |
| |
| var result = tokens.toString(), |
| expecting = "ac"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceThenInsertSameIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(0,"x"); |
| tokens.insertBefore(0,"0"); |
| |
| var result = tokens.toString(), |
| expecting = "0xbc"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceThen2InsertSameIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(0,"x"); |
| tokens.insertBefore(0,"y"); |
| tokens.insertBefore(0,"z"); |
| |
| var result = tokens.toString(), |
| expecting = "zyxbc"; |
| assertEquals(result, expecting); |
| } |
| |
| function testInsertThenReplaceSameIndex() { |
| var tokens = _parse("abc"); |
| tokens.insertBefore(0,"0"); |
| tokens.replace(0,"x"); |
| |
| var result = tokens.toString(), |
| expecting = "0xbc"; |
| assertEquals(result, expecting); |
| } |
| |
| function test2InsertMiddleIndex() { |
| var tokens = _parse("abc"); |
| tokens.insertBefore(1,"x"); |
| tokens.insertBefore(1,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "ayxbc"; |
| assertEquals(result, expecting); |
| } |
| |
| function test2InsertThenReplaceIndex0() { |
| var tokens = _parse("abc"); |
| tokens.insertBefore(0,"x"); |
| tokens.insertBefore(0,"y"); |
| tokens.replace(0,"z"); |
| |
| var result = tokens.toString(), |
| expecting = "yxzbc"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceThenInsertBeforeLastIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(2,"x"); |
| tokens.insertBefore(2,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "abyx"; |
| assertEquals(result, expecting); |
| } |
| |
| function testInsertThenReplaceLastIndex() { |
| var tokens = _parse("abc"); |
| tokens.insertBefore(2,"y"); |
| tokens.replace(2,"x"); |
| |
| var result = tokens.toString(), |
| expecting = "abyx"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceThenInsertLastIndex() { |
| var tokens = _parse("abc"); |
| tokens.replace(2,"x"); |
| tokens.insertAfter(2,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "abxy"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceRangeThenInsertInMiddle() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(2,4,"x"); |
| tokens.insertBefore(3,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "abxba"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceRangeThenInsertAtLeftEdge() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(2,4,"x"); |
| tokens.insertBefore(2,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "abyxba"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceRangeThenInsertAtRightEdge() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(2,4,"x"); |
| tokens.insertBefore(4,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "abxba"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceRangeThenInsertAfterRightEdge() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(2,4,"x"); |
| tokens.insertAfter(4,"y"); |
| |
| var result = tokens.toString(), |
| expecting = "abxyba"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceAll() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(0,6,"x"); |
| |
| var result = tokens.toString(), |
| expecting = "x"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceSubsetThenFetch() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(2,4,"xyz"); |
| |
| var result = tokens.toString(0,6), |
| expecting = "abxyzba"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceThenReplaceSuperset() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(2,4,"xyz"); |
| tokens.replace(2,5,"foo"); |
| |
| var result = tokens.toString(), |
| expecting = "abfooa"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceThenReplaceLowerIndexedSuperset() { |
| var tokens = _parse("abcccba"); |
| tokens.replace(2,4,"xyz"); |
| tokens.replace(1,3,"foo"); |
| |
| var result = tokens.toString(), |
| expecting = "afoocba"; |
| assertEquals(result, expecting); |
| } |
| |
| function testReplaceSingleMiddleThenOverlappingSuperset() { |
| var tokens = _parse("abcba"); |
| tokens.replace(2,2,"xyz"); |
| tokens.replace(0,3,"foo"); |
| |
| var result = tokens.toString(), |
| expecting = "fooa"; |
| assertEquals(result, expecting); |
| } |
| |
| </script> |
| |
| </head> |
| <body> |
| <h1>t048rewrite</h1> |
| </body> |
| </html> |