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>t052import</title> 6 7 <!-- ANTLR includes --> 8 <script type="text/javascript" src="../../lib/antlr3-all.js"></script> 9 10 <script type="text/javascript" src="t052importS1.js"></script> 11 <script type="text/javascript" src="t052importM1_t052importS1.js"></script> 12 <script type="text/javascript" src="t052importM1Lexer.js"></script> 13 <script type="text/javascript" src="t052importM1Parser.js"></script> 14 15 <script type="text/javascript" src="t052importS2.js"></script> 16 <script type="text/javascript" src="t052importM2_t052importS2.js"></script> 17 <script type="text/javascript" src="t052importM2Lexer.js"></script> 18 <script type="text/javascript" src="t052importM2Parser.js"></script> 19 20 <script type="text/javascript" src="t052importS3.js"></script> 21 <script type="text/javascript" src="t052importM3_t052importS3.js"></script> 22 <script type="text/javascript" src="t052importM3Lexer.js"></script> 23 <script type="text/javascript" src="t052importM3Parser.js"></script> 24 25 <script type="text/javascript" src="t052importS4.js"></script> 26 <script type="text/javascript" src="t052importT4.js"></script> 27 <script type="text/javascript" src="t052importM4_t052importS4.js"></script> 28 <script type="text/javascript" src="t052importM4_t052importT4.js"></script> 29 <script type="text/javascript" src="t052importM4Lexer.js"></script> 30 <script type="text/javascript" src="t052importM4Parser.js"></script> 31 32 <script type="text/javascript" src="t052importS5.js"></script> 33 <script type="text/javascript" src="t052importT5.js"></script> 34 <script type="text/javascript" src="t052importM5_t052importS5.js"></script> 35 <script type="text/javascript" src="t052importM5_t052importT5.js"></script> 36 <script type="text/javascript" src="t052importM5Lexer.js"></script> 37 <script type="text/javascript" src="t052importM5Parser.js"></script> 38 39 <script type="text/javascript" src="t052importS6.js"></script> 40 <script type="text/javascript" src="t052importM6_t052importS6.js"></script> 41 <script type="text/javascript" src="t052importM6Lexer.js"></script> 42 <script type="text/javascript" src="t052importM6Parser.js"></script> 43 44 <script type="text/javascript" src="t052importS7.js"></script> 45 <script type="text/javascript" src="t052importM7_t052importS7.js"></script> 46 <script type="text/javascript" src="t052importM7.js"></script> 47 48 <script type="text/javascript" src="t052importS8.js"></script> 49 <script type="text/javascript" src="t052importM8_t052importS8.js"></script> 50 <script type="text/javascript" src="t052importM8.js"></script> 51 52 <!-- JsUnit include --> 53 <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> 54 55 <!-- Test Code --> 56 <script type="text/javascript"> 57 // Parser Tests 58 59 function execLexer(lexerCls, xinput) { 60 var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 61 lexer = new (EnhancedParser(lexerCls))(cstream), 62 token; 63 64 while (true) { 65 token = lexer.nextToken(); 66 if (!token || token.getType()===org.antlr.runtime.Token.EOF) { 67 break; 68 } 69 lexer.buf += token.getText(); 70 } 71 72 return lexer.buf; 73 } 74 75 function execParser(lexerCls, parserCls, grammarEntry, xinput) { 76 var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 77 lexer = new (EnhancedParser(lexerCls))(cstream), 78 tstream = new org.antlr.runtime.CommonTokenStream(lexer), 79 parser = new (EnhancedParser(parserCls))(tstream); 80 var r = parser[grammarEntry](); 81 82 return parser.buf; 83 } 84 85 function EnhancedParser(base) { 86 var T = function() { 87 T.superclass.constructor.apply(this, arguments); 88 this.traces = []; 89 this.buf = ""; 90 }; 91 92 org.antlr.lang.extend(T, base, { 93 capture: function(t) { 94 this.buf += t; 95 }, 96 traceIn: function(ruleName, ruleIndex) { 97 this.traces.push(">"+ruleName); 98 }, 99 traceOut: function(ruleName, ruleIndex) { 100 this.traces.push("<"+ruleName); 101 }, 102 reportError: function(input, re) { 103 throw re; 104 } 105 }); 106 107 return T; 108 } 109 110 function testDelegatorInvokesDelegateRule() { 111 var found = execParser(t052importM1Lexer, 112 t052importM1Parser, 113 "s", 114 "b"); 115 assertEquals("S.a", found); 116 } 117 118 function testDelegatorInvokesDelegateRuleWithArgs() { 119 var found = execParser(t052importM2Lexer, 120 t052importM2Parser, 121 "s", 122 "b"); 123 assertEquals("S.a1000", found); 124 } 125 126 function testDelegatorAccessesDelegateMembers() { 127 var found = execParser(t052importM3Lexer, 128 t052importM3Parser, 129 "s", 130 "b"); 131 assertEquals("foo", found); 132 } 133 134 function testDelegatorInvokesFirstVersionOfDelegateRule() { 135 var found = execParser(t052importM4Lexer, 136 t052importM4Parser, 137 "s", 138 "b"); 139 assertEquals("S.a", found); 140 } 141 142 function testDelegatesSeeSameTokenType() { 143 var found = execParser(t052importM5Lexer, 144 t052importM5Parser, 145 "s", 146 "aa"); 147 assertEquals("S.x T.y", found); 148 } 149 150 function testDelegatorRuleOverridesDelegate() { 151 var found = execParser(t052importM6Lexer, 152 t052importM6Parser, 153 "a", 154 "c"); 155 assertEquals("S.a", found); 156 } 157 158 // Lexer Tests 159 160 function testLexerDelegatorInvokesDelegateRule() { 161 var found = execLexer(t052importM7, "abc"); 162 assertEquals("S.A abc", found); 163 } 164 165 function testLexerDelegatorRuleOverridesDelegate() { 166 var found = execLexer(t052importM8, "a"); 167 assertEquals("M.A a", found); 168 } 169 </script> 170 171 </head> 172 <body> 173 <h1>t052import</h1> 174 </body> 175 </html> 176