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>t058rewriteAST</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 10*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST1Lexer.js"></script> 11*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST1Parser.js"></script> 12*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST2Lexer.js"></script> 13*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST2Parser.js"></script> 14*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST3Lexer.js"></script> 15*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST3Parser.js"></script> 16*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST4Lexer.js"></script> 17*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST4Parser.js"></script> 18*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST5Lexer.js"></script> 19*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST5Parser.js"></script> 20*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST6Lexer.js"></script> 21*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST6Parser.js"></script> 22*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST7Lexer.js"></script> 23*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST7Parser.js"></script> 24*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST8Lexer.js"></script> 25*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST8Parser.js"></script> 26*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST9Lexer.js"></script> 27*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST9Parser.js"></script> 28*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST10Lexer.js"></script> 29*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST10Parser.js"></script> 30*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST11Lexer.js"></script> 31*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST11Parser.js"></script> 32*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST12Lexer.js"></script> 33*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST12Parser.js"></script> 34*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST13Lexer.js"></script> 35*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST13Parser.js"></script> 36*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST14Lexer.js"></script> 37*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST14Parser.js"></script> 38*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST15Lexer.js"></script> 39*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST15Parser.js"></script> 40*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST16Lexer.js"></script> 41*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST16Parser.js"></script> 42*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST17Lexer.js"></script> 43*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST17Parser.js"></script> 44*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST18Lexer.js"></script> 45*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST18Parser.js"></script> 46*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST19Lexer.js"></script> 47*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST19Parser.js"></script> 48*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST20Lexer.js"></script> 49*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST20Parser.js"></script> 50*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST21Lexer.js"></script> 51*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST21Parser.js"></script> 52*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST22Lexer.js"></script> 53*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST22Parser.js"></script> 54*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST23Lexer.js"></script> 55*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST23Parser.js"></script> 56*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST24Lexer.js"></script> 57*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST24Parser.js"></script> 58*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST25Lexer.js"></script> 59*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST25Parser.js"></script> 60*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST26Lexer.js"></script> 61*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST26Parser.js"></script> 62*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST27Lexer.js"></script> 63*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST27Parser.js"></script> 64*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST28Lexer.js"></script> 65*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST28Parser.js"></script> 66*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST29Lexer.js"></script> 67*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST29Parser.js"></script> 68*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST30Lexer.js"></script> 69*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST30Parser.js"></script> 70*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST31Lexer.js"></script> 71*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST31Parser.js"></script> 72*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST32Lexer.js"></script> 73*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST32Parser.js"></script> 74*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST33Lexer.js"></script> 75*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST33Parser.js"></script> 76*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST34Lexer.js"></script> 77*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST34Parser.js"></script> 78*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST35Lexer.js"></script> 79*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST35Parser.js"></script> 80*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST36Lexer.js"></script> 81*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST36Parser.js"></script> 82*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST37Lexer.js"></script> 83*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST37Parser.js"></script> 84*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST38Lexer.js"></script> 85*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST38Parser.js"></script> 86*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST39Lexer.js"></script> 87*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST39Parser.js"></script> 88*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST40Lexer.js"></script> 89*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST40Parser.js"></script> 90*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST41Lexer.js"></script> 91*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST41Parser.js"></script> 92*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST42Lexer.js"></script> 93*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST42Parser.js"></script> 94*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST43Lexer.js"></script> 95*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST43Parser.js"></script> 96*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST44Lexer.js"></script> 97*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST44Parser.js"></script> 98*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST45Lexer.js"></script> 99*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST45Parser.js"></script> 100*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST46Lexer.js"></script> 101*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST46Parser.js"></script> 102*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST47Lexer.js"></script> 103*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST47Parser.js"></script> 104*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST48Lexer.js"></script> 105*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST48Parser.js"></script> 106*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST49Lexer.js"></script> 107*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST49Parser.js"></script> 108*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST50Lexer.js"></script> 109*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST50Parser.js"></script> 110*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST51Lexer.js"></script> 111*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST51Parser.js"></script> 112*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST52Lexer.js"></script> 113*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST52Parser.js"></script> 114*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST53Lexer.js"></script> 115*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST53Parser.js"></script> 116*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST54Lexer.js"></script> 117*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST54Parser.js"></script> 118*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST55Lexer.js"></script> 119*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST55Parser.js"></script> 120*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST56Lexer.js"></script> 121*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST56Parser.js"></script> 122*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST57Lexer.js"></script> 123*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST57Parser.js"></script> 124*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST58Lexer.js"></script> 125*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST58Parser.js"></script> 126*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST59Lexer.js"></script> 127*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST59Parser.js"></script> 128*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST60Lexer.js"></script> 129*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST60Parser.js"></script> 130*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST61Lexer.js"></script> 131*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST61Parser.js"></script> 132*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST62Lexer.js"></script> 133*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST62Parser.js"></script> 134*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST63Lexer.js"></script> 135*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST63Parser.js"></script> 136*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST64Lexer.js"></script> 137*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST64Parser.js"></script> 138*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST65Lexer.js"></script> 139*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST65Parser.js"></script> 140*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST66Lexer.js"></script> 141*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST66Parser.js"></script> 142*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST67Lexer.js"></script> 143*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST67Parser.js"></script> 144*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST68Lexer.js"></script> 145*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST68Parser.js"></script> 146*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST69Lexer.js"></script> 147*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST69Parser.js"></script> 148*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST70Lexer.js"></script> 149*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST70Parser.js"></script> 150*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST71Lexer.js"></script> 151*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST71Parser.js"></script> 152*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST72Lexer.js"></script> 153*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST72Parser.js"></script> 154*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST73Lexer.js"></script> 155*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST73Parser.js"></script> 156*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST74Lexer.js"></script> 157*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST74Parser.js"></script> 158*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST75Lexer.js"></script> 159*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST75Parser.js"></script> 160*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST76Lexer.js"></script> 161*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST76Parser.js"></script> 162*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST77Lexer.js"></script> 163*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST77Parser.js"></script> 164*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST78Lexer.js"></script> 165*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST78Parser.js"></script> 166*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST79Lexer.js"></script> 167*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST79Parser.js"></script> 168*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST80Lexer.js"></script> 169*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST80Parser.js"></script> 170*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST81Lexer.js"></script> 171*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST81Parser.js"></script> 172*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST82Lexer.js"></script> 173*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST82Parser.js"></script> 174*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST83Lexer.js"></script> 175*16467b97STreehugger Robot<script type="text/javascript" src="t058rewriteAST83Parser.js"></script> 176*16467b97STreehugger Robot 177*16467b97STreehugger Robot<!-- JsUnit include --> 178*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> 179*16467b97STreehugger Robot 180*16467b97STreehugger Robot<!-- Test Code --> 181*16467b97STreehugger Robot<script type="text/javascript"> 182*16467b97STreehugger Robot // Parser Tests 183*16467b97STreehugger Robot 184*16467b97STreehugger Robot function execParser(lexerCls, parserCls, grammarEntry, xinput, expectErrors) { 185*16467b97STreehugger Robot var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 186*16467b97STreehugger Robot lexer = new (EnhancedParser(lexerCls))(cstream), 187*16467b97STreehugger Robot tstream = new org.antlr.runtime.CommonTokenStream(lexer), 188*16467b97STreehugger Robot parser = new (EnhancedParser(parserCls))(tstream); 189*16467b97STreehugger Robot var r = parser[grammarEntry](); 190*16467b97STreehugger Robot 191*16467b97STreehugger Robot if (!expectErrors) { 192*16467b97STreehugger Robot throw parser._errors[0]; 193*16467b97STreehugger Robot assertEquals(parser._errors.length, 0); 194*16467b97STreehugger Robot } 195*16467b97STreehugger Robot 196*16467b97STreehugger Robot var result = ""; 197*16467b97STreehugger Robot if (r) { 198*16467b97STreehugger Robot if (r.result) { 199*16467b97STreehugger Robot result += r.result 200*16467b97STreehugger Robot } 201*16467b97STreehugger Robot if (r.getTree()) { 202*16467b97STreehugger Robot result += r.getTree().toStringTree(); 203*16467b97STreehugger Robot } 204*16467b97STreehugger Robot } 205*16467b97STreehugger Robot 206*16467b97STreehugger Robot if (!expectErrors) { 207*16467b97STreehugger Robot return result; 208*16467b97STreehugger Robot } else { 209*16467b97STreehugger Robot return [result, parser._errors]; 210*16467b97STreehugger Robot } 211*16467b97STreehugger Robot } 212*16467b97STreehugger Robot 213*16467b97STreehugger Robot function EnhancedParser(base) { 214*16467b97STreehugger Robot var T = function() { 215*16467b97STreehugger Robot T.superclass.constructor.apply(this, arguments); 216*16467b97STreehugger Robot this.traces = []; 217*16467b97STreehugger Robot this.buf = ""; 218*16467b97STreehugger Robot this._errors = []; 219*16467b97STreehugger Robot }; 220*16467b97STreehugger Robot 221*16467b97STreehugger Robot org.antlr.lang.extend(T, base, { 222*16467b97STreehugger Robot capture: function(t) { 223*16467b97STreehugger Robot this.buf += t; 224*16467b97STreehugger Robot }, 225*16467b97STreehugger Robot traceIn: function(ruleName, ruleIndex) { 226*16467b97STreehugger Robot this.traces.push(">"+ruleName); 227*16467b97STreehugger Robot }, 228*16467b97STreehugger Robot traceOut: function(ruleName, ruleIndex) { 229*16467b97STreehugger Robot this.traces.push("<"+ruleName); 230*16467b97STreehugger Robot }, 231*16467b97STreehugger Robot emitErrorMessage: function(msg) { 232*16467b97STreehugger Robot this._errors.push(msg); 233*16467b97STreehugger Robot } 234*16467b97STreehugger Robot }); 235*16467b97STreehugger Robot 236*16467b97STreehugger Robot return T; 237*16467b97STreehugger Robot } 238*16467b97STreehugger Robot 239*16467b97STreehugger Robotfunction testDelete() { 240*16467b97STreehugger Robot var found = execParser(t058rewriteAST1Lexer, t058rewriteAST1Parser, "a", "abc 34"); 241*16467b97STreehugger Robot assertEquals("", found); 242*16467b97STreehugger Robot} 243*16467b97STreehugger Robot 244*16467b97STreehugger Robotfunction testSingleToken() { 245*16467b97STreehugger Robot var found = execParser(t058rewriteAST2Lexer, t058rewriteAST2Parser, "a", "abc"); 246*16467b97STreehugger Robot assertEquals("abc", found); 247*16467b97STreehugger Robot} 248*16467b97STreehugger Robot 249*16467b97STreehugger Robotfunction testSingleTokenToNewNode() { 250*16467b97STreehugger Robot var found = execParser(t058rewriteAST3Lexer, t058rewriteAST3Parser, "a", "abc"); 251*16467b97STreehugger Robot assertEquals("x", found); 252*16467b97STreehugger Robot} 253*16467b97STreehugger Robot 254*16467b97STreehugger Robotfunction testSingleTokenToNewNodeRoot() { 255*16467b97STreehugger Robot var found = execParser(t058rewriteAST4Lexer, t058rewriteAST4Parser, "a", "abc"); 256*16467b97STreehugger Robot assertEquals("(x INT)", found); 257*16467b97STreehugger Robot} 258*16467b97STreehugger Robot 259*16467b97STreehugger Robotfunction testSingleTokenToNewNode2() { 260*16467b97STreehugger Robot // Allow creation of new nodes w/o args. 261*16467b97STreehugger Robot var found = execParser(t058rewriteAST5Lexer, t058rewriteAST5Parser, "a", "abc"); 262*16467b97STreehugger Robot assertEquals("ID", found); 263*16467b97STreehugger Robot} 264*16467b97STreehugger Robot 265*16467b97STreehugger Robotfunction testSingleCharLiteral() { 266*16467b97STreehugger Robot var found = execParser(t058rewriteAST6Lexer, t058rewriteAST6Parser, "a", "c"); 267*16467b97STreehugger Robot assertEquals("c", found); 268*16467b97STreehugger Robot} 269*16467b97STreehugger Robot 270*16467b97STreehugger Robotfunction testSingleStringLiteral() { 271*16467b97STreehugger Robot var found = execParser(t058rewriteAST7Lexer, t058rewriteAST7Parser, "a", "ick"); 272*16467b97STreehugger Robot assertEquals("ick", found); 273*16467b97STreehugger Robot} 274*16467b97STreehugger Robot 275*16467b97STreehugger Robotfunction testSingleRule() { 276*16467b97STreehugger Robot var found = execParser(t058rewriteAST8Lexer, t058rewriteAST8Parser, "a", "abc"); 277*16467b97STreehugger Robot assertEquals("abc", found); 278*16467b97STreehugger Robot} 279*16467b97STreehugger Robot 280*16467b97STreehugger Robotfunction testReorderTokens() { 281*16467b97STreehugger Robot var found = execParser(t058rewriteAST9Lexer, t058rewriteAST9Parser, "a", "abc 34"); 282*16467b97STreehugger Robot assertEquals("34 abc", found); 283*16467b97STreehugger Robot} 284*16467b97STreehugger Robot 285*16467b97STreehugger Robotfunction testReorderTokenAndRule() { 286*16467b97STreehugger Robot var found = execParser(t058rewriteAST10Lexer, t058rewriteAST10Parser, "a", "abc 34"); 287*16467b97STreehugger Robot assertEquals("34 abc", found); 288*16467b97STreehugger Robot} 289*16467b97STreehugger Robot 290*16467b97STreehugger Robotfunction testTokenTree() { 291*16467b97STreehugger Robot var found = execParser(t058rewriteAST11Lexer, t058rewriteAST11Parser, "a", "abc 34"); 292*16467b97STreehugger Robot assertEquals("(34 abc)", found); 293*16467b97STreehugger Robot} 294*16467b97STreehugger Robot 295*16467b97STreehugger Robotfunction testTokenTreeAfterOtherStuff() { 296*16467b97STreehugger Robot var found = execParser(t058rewriteAST12Lexer, t058rewriteAST12Parser, "a", "void abc 34"); 297*16467b97STreehugger Robot assertEquals("void (34 abc)", found); 298*16467b97STreehugger Robot} 299*16467b97STreehugger Robot 300*16467b97STreehugger Robotfunction testNestedTokenTreeWithOuterLoop() { 301*16467b97STreehugger Robot // verify that ID and INT both iterate over outer index variable 302*16467b97STreehugger Robot var found = execParser(t058rewriteAST13Lexer, t058rewriteAST13Parser, "a", "a 1 b 2"); 303*16467b97STreehugger Robot assertEquals("(DUH a (DUH 1)) (DUH b (DUH 2))", found); 304*16467b97STreehugger Robot} 305*16467b97STreehugger Robot 306*16467b97STreehugger Robotfunction testOptionalSingleToken() { 307*16467b97STreehugger Robot var found = execParser(t058rewriteAST14Lexer, t058rewriteAST14Parser, "a", "abc"); 308*16467b97STreehugger Robot assertEquals("abc", found); 309*16467b97STreehugger Robot} 310*16467b97STreehugger Robot 311*16467b97STreehugger Robotfunction testClosureSingleToken() { 312*16467b97STreehugger Robot var found = execParser(t058rewriteAST15Lexer, t058rewriteAST15Parser, "a", "a b"); 313*16467b97STreehugger Robot assertEquals("a b", found); 314*16467b97STreehugger Robot} 315*16467b97STreehugger Robot 316*16467b97STreehugger Robotfunction testPositiveClosureSingleToken() { 317*16467b97STreehugger Robot var found = execParser(t058rewriteAST16Lexer, t058rewriteAST16Parser, "a", "a b"); 318*16467b97STreehugger Robot assertEquals("a b", found); 319*16467b97STreehugger Robot} 320*16467b97STreehugger Robot 321*16467b97STreehugger Robotfunction testOptionalSingleRule() { 322*16467b97STreehugger Robot var found = execParser(t058rewriteAST17Lexer, t058rewriteAST17Parser, "a", "abc"); 323*16467b97STreehugger Robot assertEquals("abc", found); 324*16467b97STreehugger Robot} 325*16467b97STreehugger Robot 326*16467b97STreehugger Robotfunction testClosureSingleRule() { 327*16467b97STreehugger Robot var found = execParser(t058rewriteAST18Lexer, t058rewriteAST18Parser, "a", "a b"); 328*16467b97STreehugger Robot assertEquals("a b", found); 329*16467b97STreehugger Robot} 330*16467b97STreehugger Robot 331*16467b97STreehugger Robotfunction testClosureOfLabel() { 332*16467b97STreehugger Robot var found = execParser(t058rewriteAST19Lexer, t058rewriteAST19Parser, "a", "a b"); 333*16467b97STreehugger Robot assertEquals("a b", found); 334*16467b97STreehugger Robot} 335*16467b97STreehugger Robot 336*16467b97STreehugger Robotfunction testOptionalLabelNoListLabel() { 337*16467b97STreehugger Robot var found = execParser(t058rewriteAST20Lexer, t058rewriteAST20Parser, "a", "a"); 338*16467b97STreehugger Robot assertEquals("a", found); 339*16467b97STreehugger Robot} 340*16467b97STreehugger Robot 341*16467b97STreehugger Robotfunction testPositiveClosureSingleRule() { 342*16467b97STreehugger Robot var found = execParser(t058rewriteAST21Lexer, t058rewriteAST21Parser, "a", "a b"); 343*16467b97STreehugger Robot assertEquals("a b", found); 344*16467b97STreehugger Robot} 345*16467b97STreehugger Robot 346*16467b97STreehugger Robotfunction testSinglePredicateT() { 347*16467b97STreehugger Robot var found = execParser(t058rewriteAST22Lexer, t058rewriteAST22Parser, "a", "abc"); 348*16467b97STreehugger Robot assertEquals("abc", found); 349*16467b97STreehugger Robot} 350*16467b97STreehugger Robot 351*16467b97STreehugger Robotfunction testSinglePredicateF() { 352*16467b97STreehugger Robot var found = execParser(t058rewriteAST23Lexer, t058rewriteAST23Parser, "a", "abc"); 353*16467b97STreehugger Robot assertEquals("", found); 354*16467b97STreehugger Robot} 355*16467b97STreehugger Robot 356*16467b97STreehugger Robotfunction testMultiplePredicate() { 357*16467b97STreehugger Robot var found = execParser(t058rewriteAST24Lexer, t058rewriteAST24Parser, "a", "a 2"); 358*16467b97STreehugger Robot assertEquals("2", found); 359*16467b97STreehugger Robot} 360*16467b97STreehugger Robot 361*16467b97STreehugger Robotfunction testMultiplePredicateTrees() { 362*16467b97STreehugger Robot var found = execParser(t058rewriteAST25Lexer, t058rewriteAST25Parser, "a", "a 2"); 363*16467b97STreehugger Robot assertEquals("(2 a)", found); 364*16467b97STreehugger Robot} 365*16467b97STreehugger Robot 366*16467b97STreehugger Robotfunction testSimpleTree() { 367*16467b97STreehugger Robot var found = execParser(t058rewriteAST26Lexer, t058rewriteAST26Parser, "a", "-34"); 368*16467b97STreehugger Robot assertEquals("(- 34)", found); 369*16467b97STreehugger Robot} 370*16467b97STreehugger Robot 371*16467b97STreehugger Robotfunction testSimpleTree2() { 372*16467b97STreehugger Robot var found = execParser(t058rewriteAST27Lexer, t058rewriteAST27Parser, "a", "+ 34"); 373*16467b97STreehugger Robot assertEquals("(34 +)", found); 374*16467b97STreehugger Robot} 375*16467b97STreehugger Robot 376*16467b97STreehugger Robotfunction testNestedTrees() { 377*16467b97STreehugger Robot var found = execParser(t058rewriteAST28Lexer, t058rewriteAST28Parser, "a", "var a:int; b:float;"); 378*16467b97STreehugger Robot assertEquals("(var (: a int) (: b float))", found); 379*16467b97STreehugger Robot} 380*16467b97STreehugger Robot 381*16467b97STreehugger Robotfunction testImaginaryTokenCopy() { 382*16467b97STreehugger Robot var found = execParser(t058rewriteAST29Lexer, t058rewriteAST29Parser, "a", "a,b,c"); 383*16467b97STreehugger Robot assertEquals("(VAR a) (VAR b) (VAR c)", found); 384*16467b97STreehugger Robot} 385*16467b97STreehugger Robot 386*16467b97STreehugger Robotfunction testTokenUnreferencedOnLeftButDefined() { 387*16467b97STreehugger Robot var found = execParser(t058rewriteAST30Lexer, t058rewriteAST30Parser, "a", "a"); 388*16467b97STreehugger Robot assertEquals("ID", found); 389*16467b97STreehugger Robot} 390*16467b97STreehugger Robot 391*16467b97STreehugger Robotfunction testImaginaryTokenCopySetText() { 392*16467b97STreehugger Robot var found = execParser(t058rewriteAST31Lexer, t058rewriteAST31Parser, "a", "a,b,c"); 393*16467b97STreehugger Robot assertEquals("(var a) (var b) (var c)", found); 394*16467b97STreehugger Robot} 395*16467b97STreehugger Robot 396*16467b97STreehugger Robotfunction testImaginaryTokenNoCopyFromToken() { 397*16467b97STreehugger Robot var found = execParser(t058rewriteAST32Lexer, t058rewriteAST32Parser, "a", "{a b c}"); 398*16467b97STreehugger Robot assertEquals("({ a b c)", found); 399*16467b97STreehugger Robot} 400*16467b97STreehugger Robot 401*16467b97STreehugger Robotfunction testImaginaryTokenNoCopyFromTokenSetText() { 402*16467b97STreehugger Robot var found = execParser(t058rewriteAST33Lexer, t058rewriteAST33Parser, "a", "{a b c}"); 403*16467b97STreehugger Robot assertEquals("(block a b c)", found); 404*16467b97STreehugger Robot} 405*16467b97STreehugger Robot 406*16467b97STreehugger Robotfunction testMixedRewriteAndAutoAST() { 407*16467b97STreehugger Robot var found = execParser(t058rewriteAST34Lexer, t058rewriteAST34Parser, "a", "a 1 2"); 408*16467b97STreehugger Robot assertEquals("(2 1 a)", found); 409*16467b97STreehugger Robot} 410*16467b97STreehugger Robot 411*16467b97STreehugger Robotfunction testSubruleWithRewrite() { 412*16467b97STreehugger Robot var found = execParser(t058rewriteAST35Lexer, t058rewriteAST35Parser, "a", "a 1 2 3"); 413*16467b97STreehugger Robot assertEquals("1 a 2 3", found); 414*16467b97STreehugger Robot} 415*16467b97STreehugger Robot 416*16467b97STreehugger Robotfunction testSubruleWithRewrite2() { 417*16467b97STreehugger Robot var found = execParser(t058rewriteAST36Lexer, t058rewriteAST36Parser, "a", "int a; int b=3;"); 418*16467b97STreehugger Robot assertEquals("(TYPE int a) (TYPE int b 3)", found); 419*16467b97STreehugger Robot} 420*16467b97STreehugger Robot 421*16467b97STreehugger Robotfunction testNestedRewriteShutsOffAutoAST() { 422*16467b97STreehugger Robot var found = execParser(t058rewriteAST37Lexer, t058rewriteAST37Parser, "a", "a b c d; 42"); 423*16467b97STreehugger Robot assertEquals("d 42", found); 424*16467b97STreehugger Robot} 425*16467b97STreehugger Robot 426*16467b97STreehugger Robotfunction testRewriteActions() { 427*16467b97STreehugger Robot var found = execParser(t058rewriteAST38Lexer, t058rewriteAST38Parser, "a", "3"); 428*16467b97STreehugger Robot assertEquals("(9 3)", found); 429*16467b97STreehugger Robot} 430*16467b97STreehugger Robot 431*16467b97STreehugger Robotfunction testRewriteActions2() { 432*16467b97STreehugger Robot var found = execParser(t058rewriteAST39Lexer, t058rewriteAST39Parser, "a", "3"); 433*16467b97STreehugger Robot assertEquals("9 3", found); 434*16467b97STreehugger Robot} 435*16467b97STreehugger Robot 436*16467b97STreehugger Robotfunction testRefToOldValue() { 437*16467b97STreehugger Robot var found = execParser(t058rewriteAST40Lexer, t058rewriteAST40Parser, "a", "3+4+5"); 438*16467b97STreehugger Robot assertEquals("(+ (+ 3 4) 5)", found); 439*16467b97STreehugger Robot} 440*16467b97STreehugger Robot 441*16467b97STreehugger Robotfunction testCopySemanticsForRules() { 442*16467b97STreehugger Robot var found = execParser(t058rewriteAST41Lexer, t058rewriteAST41Parser, "a", "3"); 443*16467b97STreehugger Robot assertEquals("(3 3)", found); 444*16467b97STreehugger Robot} 445*16467b97STreehugger Robot 446*16467b97STreehugger Robotfunction testCopySemanticsForRules2() { 447*16467b97STreehugger Robot // copy type as a root for each invocation of (...)+ in rewrite 448*16467b97STreehugger Robot var found = execParser(t058rewriteAST42Lexer, t058rewriteAST42Parser, "a", "int a,b,c;"); 449*16467b97STreehugger Robot assertEquals("(int a) (int b) (int c)", found); 450*16467b97STreehugger Robot} 451*16467b97STreehugger Robot 452*16467b97STreehugger Robotfunction testCopySemanticsForRules3() { 453*16467b97STreehugger Robot // copy type *and* modifier even though it's optional 454*16467b97STreehugger Robot // for each invocation of (...)+ in rewrite 455*16467b97STreehugger Robot var found = execParser(t058rewriteAST43Lexer, t058rewriteAST43Parser, "a", "public int a,b,c;"); 456*16467b97STreehugger Robot assertEquals("(int public a) (int public b) (int public c)", found); 457*16467b97STreehugger Robot} 458*16467b97STreehugger Robot 459*16467b97STreehugger Robotfunction testCopySemanticsForRules3Double() { 460*16467b97STreehugger Robot // copy type *and* modifier even though it's optional 461*16467b97STreehugger Robot // for each invocation of (...)+ in rewrite 462*16467b97STreehugger Robot var found = execParser(t058rewriteAST44Lexer, t058rewriteAST44Parser, "a", "public int a,b,c;"); 463*16467b97STreehugger Robot assertEquals("(int public a) (int public b) (int public c) (int public a) (int public b) (int public c)", found); 464*16467b97STreehugger Robot} 465*16467b97STreehugger Robot 466*16467b97STreehugger Robotfunction testCopySemanticsForRules4() { 467*16467b97STreehugger Robot // copy type *and* modifier even though it's optional 468*16467b97STreehugger Robot // for each invocation of (...)+ in rewrite 469*16467b97STreehugger Robot var found = execParser(t058rewriteAST45Lexer, t058rewriteAST45Parser, "a", "public int a,b,c;"); 470*16467b97STreehugger Robot assertEquals("(int (MOD public) a) (int (MOD public) b) (int (MOD public) c)", found); 471*16467b97STreehugger Robot} 472*16467b97STreehugger Robot 473*16467b97STreehugger Robotfunction testCopySemanticsLists() { 474*16467b97STreehugger Robot var found = execParser(t058rewriteAST46Lexer, t058rewriteAST46Parser, "a", "a,b,c;"); 475*16467b97STreehugger Robot assertEquals("a b c a b c", found); 476*16467b97STreehugger Robot} 477*16467b97STreehugger Robot 478*16467b97STreehugger Robotfunction testCopyRuleLabel() { 479*16467b97STreehugger Robot var found = execParser(t058rewriteAST47Lexer, t058rewriteAST47Parser, "a", "a"); 480*16467b97STreehugger Robot assertEquals("a a", found); 481*16467b97STreehugger Robot} 482*16467b97STreehugger Robot 483*16467b97STreehugger Robotfunction testCopyRuleLabel2() { 484*16467b97STreehugger Robot var found = execParser(t058rewriteAST48Lexer, t058rewriteAST48Parser, "a", "a"); 485*16467b97STreehugger Robot assertEquals("(a a)", found); 486*16467b97STreehugger Robot} 487*16467b97STreehugger Robot 488*16467b97STreehugger Robotfunction testQueueingOfTokens() { 489*16467b97STreehugger Robot var found = execParser(t058rewriteAST49Lexer, t058rewriteAST49Parser, "a", "int a,b,c;"); 490*16467b97STreehugger Robot assertEquals("(int a b c)", found); 491*16467b97STreehugger Robot} 492*16467b97STreehugger Robot 493*16467b97STreehugger Robotfunction testCopyOfTokens() { 494*16467b97STreehugger Robot var found = execParser(t058rewriteAST50Lexer, t058rewriteAST50Parser, "a", "int a;"); 495*16467b97STreehugger Robot assertEquals("int a int a", found); 496*16467b97STreehugger Robot} 497*16467b97STreehugger Robot 498*16467b97STreehugger Robotfunction testTokenCopyInLoop() { 499*16467b97STreehugger Robot var found = execParser(t058rewriteAST51Lexer, t058rewriteAST51Parser, "a", "int a,b,c;"); 500*16467b97STreehugger Robot assertEquals("(int a) (int b) (int c)", found); 501*16467b97STreehugger Robot} 502*16467b97STreehugger Robot 503*16467b97STreehugger Robotfunction testTokenCopyInLoopAgainstTwoOthers() { 504*16467b97STreehugger Robot // must smear 'int' copies across as root of multiple trees 505*16467b97STreehugger Robot var found = execParser(t058rewriteAST52Lexer, t058rewriteAST52Parser, "a", "int a:1,b:2,c:3;"); 506*16467b97STreehugger Robot assertEquals("(int a 1) (int b 2) (int c 3)", found); 507*16467b97STreehugger Robot} 508*16467b97STreehugger Robot 509*16467b97STreehugger Robotfunction testListRefdOneAtATime() { 510*16467b97STreehugger Robot var found = execParser(t058rewriteAST53Lexer, t058rewriteAST53Parser, "a", "a b c"); 511*16467b97STreehugger Robot assertEquals("a b c", found); 512*16467b97STreehugger Robot} 513*16467b97STreehugger Robot 514*16467b97STreehugger Robotfunction testSplitListWithLabels() { 515*16467b97STreehugger Robot var found = execParser(t058rewriteAST54Lexer, t058rewriteAST54Parser, "a", "a b c"); 516*16467b97STreehugger Robot assertEquals("a VAR b c", found); 517*16467b97STreehugger Robot} 518*16467b97STreehugger Robot 519*16467b97STreehugger Robotfunction testComplicatedMelange() { 520*16467b97STreehugger Robot var found = execParser(t058rewriteAST55Lexer, t058rewriteAST55Parser, "a", "a a b b b c c c d"); 521*16467b97STreehugger Robot assertEquals("a a b b b c c c d", found); 522*16467b97STreehugger Robot} 523*16467b97STreehugger Robot 524*16467b97STreehugger Robotfunction testRuleLabel() { 525*16467b97STreehugger Robot var found = execParser(t058rewriteAST56Lexer, t058rewriteAST56Parser, "a", "a"); 526*16467b97STreehugger Robot assertEquals("a", found); 527*16467b97STreehugger Robot} 528*16467b97STreehugger Robot 529*16467b97STreehugger Robotfunction testAmbiguousRule() { 530*16467b97STreehugger Robot var found = execParser(t058rewriteAST57Lexer, t058rewriteAST57Parser, 531*16467b97STreehugger Robot "a", "abc 34"); 532*16467b97STreehugger Robot assertEquals("34", found); 533*16467b97STreehugger Robot} 534*16467b97STreehugger Robot 535*16467b97STreehugger Robotfunction testRuleListLabel() { 536*16467b97STreehugger Robot var found = execParser(t058rewriteAST58Lexer, t058rewriteAST58Parser, "a", "a b"); 537*16467b97STreehugger Robot assertEquals("a b", found); 538*16467b97STreehugger Robot} 539*16467b97STreehugger Robot 540*16467b97STreehugger Robotfunction testRuleListLabel2() { 541*16467b97STreehugger Robot var found = execParser(t058rewriteAST59Lexer, t058rewriteAST59Parser, "a", "a b"); 542*16467b97STreehugger Robot assertEquals("a b", found); 543*16467b97STreehugger Robot} 544*16467b97STreehugger Robot 545*16467b97STreehugger Robotfunction testOptional() { 546*16467b97STreehugger Robot var found = execParser(t058rewriteAST60Lexer, t058rewriteAST60Parser, "a", "a"); 547*16467b97STreehugger Robot assertEquals("a", found); 548*16467b97STreehugger Robot} 549*16467b97STreehugger Robot 550*16467b97STreehugger Robotfunction testOptional2() { 551*16467b97STreehugger Robot var found = execParser(t058rewriteAST61Lexer, t058rewriteAST61Parser, "a", "a b"); 552*16467b97STreehugger Robot assertEquals("a b", found); 553*16467b97STreehugger Robot} 554*16467b97STreehugger Robot 555*16467b97STreehugger Robotfunction testOptional3() { 556*16467b97STreehugger Robot var found = execParser(t058rewriteAST62Lexer, t058rewriteAST62Parser, "a", "a b"); 557*16467b97STreehugger Robot assertEquals("a b", found); 558*16467b97STreehugger Robot} 559*16467b97STreehugger Robot 560*16467b97STreehugger Robotfunction testOptional4() { 561*16467b97STreehugger Robot var found = execParser(t058rewriteAST63Lexer, t058rewriteAST63Parser, "a", "a b"); 562*16467b97STreehugger Robot assertEquals("a b", found); 563*16467b97STreehugger Robot} 564*16467b97STreehugger Robot 565*16467b97STreehugger Robotfunction testOptional5() { 566*16467b97STreehugger Robot var found = execParser(t058rewriteAST64Lexer, t058rewriteAST64Parser, "a", "a"); 567*16467b97STreehugger Robot assertEquals("a", found); 568*16467b97STreehugger Robot} 569*16467b97STreehugger Robot 570*16467b97STreehugger Robotfunction testArbitraryExprType() { 571*16467b97STreehugger Robot var found = execParser(t058rewriteAST65Lexer, t058rewriteAST65Parser, "a", "a b"); 572*16467b97STreehugger Robot assertEquals("", found); 573*16467b97STreehugger Robot} 574*16467b97STreehugger Robot 575*16467b97STreehugger Robotfunction testSet() { 576*16467b97STreehugger Robot var found = execParser(t058rewriteAST66Lexer, t058rewriteAST66Parser, "a", "2 a 34 de"); 577*16467b97STreehugger Robot assertEquals("2 34 a de", found); 578*16467b97STreehugger Robot} 579*16467b97STreehugger Robot 580*16467b97STreehugger Robotfunction testSet2() { 581*16467b97STreehugger Robot var found = execParser(t058rewriteAST67Lexer, t058rewriteAST67Parser, "a", "2"); 582*16467b97STreehugger Robot assertEquals("2", found); 583*16467b97STreehugger Robot} 584*16467b97STreehugger Robot 585*16467b97STreehugger Robot/* 586*16467b97STreehugger Robot * @fails - the grammar shouldn't be valid, but is 587*16467b97STreehugger Robot * 588*16467b97STreehugger Robotfunction testSetWithLabel() { 589*16467b97STreehugger Robot var found = execParser(t058rewriteAST68Lexer, t058rewriteAST68Parser, "a", "2"); 590*16467b97STreehugger Robot assertEquals("2", found); 591*16467b97STreehugger Robot} 592*16467b97STreehugger Robot*/ 593*16467b97STreehugger Robot 594*16467b97STreehugger Robotfunction testRewriteAction() { 595*16467b97STreehugger Robot var found = execParser(t058rewriteAST69Lexer, t058rewriteAST69Parser, "r", "25"); 596*16467b97STreehugger Robot assertEquals("25.0", found); 597*16467b97STreehugger Robot} 598*16467b97STreehugger Robot 599*16467b97STreehugger Robotfunction testOptionalSubruleWithoutRealElements() { 600*16467b97STreehugger Robot // copy type *and* modifier even though it's optional 601*16467b97STreehugger Robot // for each invocation of (...)+ in rewrite 602*16467b97STreehugger Robot var found = execParser(t058rewriteAST70Lexer, t058rewriteAST70Parser, "modulo", "modulo abc (x y)"); 603*16467b97STreehugger Robot assertEquals("(modulo abc (PARMS x y))", found); 604*16467b97STreehugger Robot} 605*16467b97STreehugger Robot 606*16467b97STreehugger Robot//// C A R D I N A L I T Y I S S U E S 607*16467b97STreehugger Robot 608*16467b97STreehugger Robotfunction testCardinality() { 609*16467b97STreehugger Robot try { 610*16467b97STreehugger Robot execParser(t058rewriteAST71Lexer, t058rewriteAST71Parser, "a", "a b 3 4 5"); 611*16467b97STreehugger Robot fail(); 612*16467b97STreehugger Robot } catch(e) { 613*16467b97STreehugger Robot assertEquals(e.getMessage(), "token ID"); 614*16467b97STreehugger Robot } 615*16467b97STreehugger Robot} 616*16467b97STreehugger Robot 617*16467b97STreehugger Robot 618*16467b97STreehugger Robotfunction testCardinality2() { 619*16467b97STreehugger Robot try { 620*16467b97STreehugger Robot execParser(t058rewriteAST72Lexer, t058rewriteAST72Parser, "a", "a b"); 621*16467b97STreehugger Robot fail(); 622*16467b97STreehugger Robot } catch(e) { 623*16467b97STreehugger Robot assertEquals(e.getMessage(), "token ID"); 624*16467b97STreehugger Robot } 625*16467b97STreehugger Robot} 626*16467b97STreehugger Robot 627*16467b97STreehugger Robotfunction testCardinality3() { 628*16467b97STreehugger Robot try { 629*16467b97STreehugger Robot execParser(t058rewriteAST73Lexer, t058rewriteAST73Parser, "a", "3"); 630*16467b97STreehugger Robot fail(); 631*16467b97STreehugger Robot } catch(e) { 632*16467b97STreehugger Robot assertEquals(e.getMessage(), "token ID"); 633*16467b97STreehugger Robot } 634*16467b97STreehugger Robot} 635*16467b97STreehugger Robot 636*16467b97STreehugger Robotfunction testLoopCardinality() { 637*16467b97STreehugger Robot try { 638*16467b97STreehugger Robot execParser(t058rewriteAST74Lexer, t058rewriteAST74Parser, "a", "3"); 639*16467b97STreehugger Robot fail(); 640*16467b97STreehugger Robot } catch(e) { 641*16467b97STreehugger Robot assert(e instanceof org.antlr.runtime.tree.RewriteEarlyExitException); 642*16467b97STreehugger Robot } 643*16467b97STreehugger Robot} 644*16467b97STreehugger Robot 645*16467b97STreehugger Robotfunction testWildcard() { 646*16467b97STreehugger Robot var found = execParser(t058rewriteAST75Lexer, t058rewriteAST75Parser, "a", "abc 34"); 647*16467b97STreehugger Robot assertEquals("34\n", found); 648*16467b97STreehugger Robot} 649*16467b97STreehugger Robot 650*16467b97STreehugger Robot// E R R O R S 651*16467b97STreehugger Robot 652*16467b97STreehugger Robotfunction testExtraTokenInSimpleDecl() { 653*16467b97STreehugger Robot var retval = execParser(t058rewriteAST76Lexer, t058rewriteAST76Parser, "decl", "int 34 x=1;", 654*16467b97STreehugger Robot true); 655*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 656*16467b97STreehugger Robot assertArrayEquals(["line 1:4 extraneous input '34' expecting ID"], 657*16467b97STreehugger Robot errors); 658*16467b97STreehugger Robot assertEquals("(EXPR int x 1)", found) // tree gets correct x and 1 tokens 659*16467b97STreehugger Robot} 660*16467b97STreehugger Robot 661*16467b97STreehugger Robot 662*16467b97STreehugger Robotfunction testMissingIDInSimpleDecl() { 663*16467b97STreehugger Robot var retval = execParser(t058rewriteAST77Lexer, t058rewriteAST77Parser, "decl", "int =1;", 664*16467b97STreehugger Robot true); 665*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 666*16467b97STreehugger Robot assertArrayEquals(["line 1:4 missing ID at '='"], errors); 667*16467b97STreehugger Robot assertEquals("(EXPR int <missing ID> 1)", found) // tree gets invented ID token 668*16467b97STreehugger Robot} 669*16467b97STreehugger Robot 670*16467b97STreehugger Robotfunction testMissingSetInSimpleDecl() { 671*16467b97STreehugger Robot var retval = execParser(t058rewriteAST78Lexer, t058rewriteAST78Parser, "decl", "x=1;", 672*16467b97STreehugger Robot true); 673*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 674*16467b97STreehugger Robot assertArrayEquals(["line 1:0 mismatched input 'x' expecting set null"], 675*16467b97STreehugger Robot errors); 676*16467b97STreehugger Robot assertEquals("(EXPR <error: x> x 1)", found) // tree gets invented ID token 677*16467b97STreehugger Robot} 678*16467b97STreehugger Robot 679*16467b97STreehugger Robotfunction testMissingTokenGivesErrorNode() { 680*16467b97STreehugger Robot var retval = execParser(t058rewriteAST79Lexer, t058rewriteAST79Parser, "a", "abc", 681*16467b97STreehugger Robot true); 682*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 683*16467b97STreehugger Robot assertArrayEquals(["line 0:-1 missing INT at '<EOF>'"], errors); 684*16467b97STreehugger Robot // doesn't do in-line recovery for sets (yet?); 685*16467b97STreehugger Robot assertEquals("abc <missing INT>", found); 686*16467b97STreehugger Robot} 687*16467b97STreehugger Robot 688*16467b97STreehugger Robotfunction testExtraTokenGivesErrorNode() { 689*16467b97STreehugger Robot var retval = execParser(t058rewriteAST80Lexer, t058rewriteAST80Parser, "a", "abc ick 34", 690*16467b97STreehugger Robot true); 691*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 692*16467b97STreehugger Robot assertArrayEquals(["line 1:4 extraneous input 'ick' expecting INT"], 693*16467b97STreehugger Robot errors); 694*16467b97STreehugger Robot assertEquals("abc 34", found); 695*16467b97STreehugger Robot} 696*16467b97STreehugger Robot 697*16467b97STreehugger Robotfunction testMissingFirstTokenGivesErrorNode() { 698*16467b97STreehugger Robot var retval = execParser(t058rewriteAST81Lexer, t058rewriteAST81Parser, "a", "34", true); 699*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 700*16467b97STreehugger Robot assertArrayEquals(["line 1:0 missing ID at '34'"], errors); 701*16467b97STreehugger Robot assertEquals("<missing ID> 34", found); 702*16467b97STreehugger Robot} 703*16467b97STreehugger Robot 704*16467b97STreehugger Robotfunction testMissingFirstTokenGivesErrorNode2() { 705*16467b97STreehugger Robot var retval = execParser(t058rewriteAST82Lexer, t058rewriteAST82Parser, "a", "34", true); 706*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 707*16467b97STreehugger Robot // finds an error at the first token, 34, and re-syncs. 708*16467b97STreehugger Robot // re-synchronizing does not consume a token because 34 follows 709*16467b97STreehugger Robot // ref to rule b (start of c). It then matches 34 in c. 710*16467b97STreehugger Robot assertArrayEquals(["line 1:0 mismatched input '34' expecting ID"], errors); 711*16467b97STreehugger Robot assertEquals("<mismatched token: [@0,0:1='34',<5>,1:0], resync=34> 34", found); 712*16467b97STreehugger Robot} 713*16467b97STreehugger Robot 714*16467b97STreehugger Robotfunction testNoViableAltGivesErrorNode() { 715*16467b97STreehugger Robot var retval = execParser(t058rewriteAST83Lexer, t058rewriteAST83Parser, "a", "*", true); 716*16467b97STreehugger Robot var found = retval[0], errors = retval[1]; 717*16467b97STreehugger Robot // finds an error at the first token, 34, and re-syncs. 718*16467b97STreehugger Robot // re-synchronizing does not consume a token because 34 follows 719*16467b97STreehugger Robot // ref to rule b (start of c). It then matches 34 in c. 720*16467b97STreehugger Robot assertArrayEquals(["line 1:0 no viable alternative at input '*'"], 721*16467b97STreehugger Robot errors); 722*16467b97STreehugger Robot assertEquals("<unexpected: [@0,0:0='*',<6>,1:0], resync=*>", 723*16467b97STreehugger Robot found); 724*16467b97STreehugger Robot} 725*16467b97STreehugger Robot</script> 726*16467b97STreehugger Robot 727*16467b97STreehugger Robot</head> 728*16467b97STreehugger Robot<body> 729*16467b97STreehugger Robot <h1>t058rewriteAST</h1> 730*16467b97STreehugger Robot</body> 731*16467b97STreehugger Robot</html> 732*16467b97STreehugger Robot 733