1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* Test Infrastructure */ 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfunction loadFile(fileName, encoding) { 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var f = new java.io.File(fileName), 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver size = f.length(), 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isr, 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver fis = new java.io.FileInputStream(f); 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (encoding) { 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isr = new java.io.InputStreamReader(fis, encoding); 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } else { 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isr = new java.io.InputStreamReader(fis); 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /* Should use the ternary version of isr.read here, but can't figure 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * out how to create a Java char array from JS. . . 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @todo 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var charCode, data=[]; 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver while ((charCode = isr.read()) >= 0) { 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data.push(String.fromCharCode(charCode)); 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return data.join(""); 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvereval(loadFile("../../lib/antlr3-all.js")); 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvereval(loadFile("../../lib/antlr3-cli.js")); 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvereval(loadFile("PythonLexer.js")); 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvereval(loadFile("PythonParser.js")); 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvereval(loadFile("rhino-python.extensions")); 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* Parser Extensions */ 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvervar output = []; 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfunction xlog(msg) { 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver output.push(msg); 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfunction MyLexer() { 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver MyLexer.superclass.constructor.apply(this, arguments); 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 41324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverANTLR.lang.extend(MyLexer, PythonLexer, { 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver nextToken: function() { 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // keep track of this token's position in line because Python is 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // whitespace sensitive 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.startPos = this.getCharPositionInLine(); 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return MyLexer.superclass.nextToken.call(this); 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}); 49324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverMyLexer.prototype.emitErrorMessage = function(msg) {xlog(msg);} 50324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverPythonParser.prototype.emitErrorMessage = function(msg) {xlog(msg);} 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* Test */ 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfunction parse(text) { 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try { 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var input = new ANTLR.runtime.ANTLRStringStream(text); 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var lexer = new MyLexer(input); 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var tokens = new ANTLR.runtime.CommonTokenStream(lexer); 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.discardOffChannelTokens=true; 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var indentedSource = new PythonTokenSource(tokens); 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = new ANTLR.runtime.CommonTokenStream(indentedSource); 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var parser = new PythonParser(tokens); 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser.file_input(); 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } catch (e) { 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver xlog(e.toString()); 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } finally { 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvervar input = loadFile("rhino-python.input"); 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvervar expected = loadFile("rhino-python.output"); 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverparse(input); 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvervar actual = output.join("\n")+"\n"; 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif (actual==expected) { 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print("Test Passed!"); 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} else { 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print("Test Failed!"); 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print(actual); 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print(expected); 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 81