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