rhino-python.prog revision 324c4644fee44b9898524c09511bd33c3f12e2df
1/* Test Infrastructure */
2
3function loadFile(fileName, encoding) {
4    var f = new java.io.File(fileName),
5        size = f.length(),
6        isr,
7        fis = new java.io.FileInputStream(f);
8    if (encoding) {
9        isr = new java.io.InputStreamReader(fis, encoding);
10    } else {
11        isr = new java.io.InputStreamReader(fis);
12    }
13
14    /* Should use the ternary version of isr.read here, but can't figure
15     * out how to create a Java char array from JS. . .
16     * @todo
17     */
18    var charCode, data=[];
19    while ((charCode = isr.read()) >= 0) {
20        data.push(String.fromCharCode(charCode));
21    }
22    return data.join("");
23}
24
25eval(loadFile("../../lib/antlr3-all.js"));
26eval(loadFile("../../lib/antlr3-cli.js"));
27eval(loadFile("PythonLexer.js"));
28eval(loadFile("PythonParser.js"));
29eval(loadFile("rhino-python.extensions"));
30
31/* Parser Extensions */
32
33var output = [];
34function xlog(msg) {
35    output.push(msg);
36}
37
38function MyLexer() {
39    MyLexer.superclass.constructor.apply(this, arguments);
40}
41ANTLR.lang.extend(MyLexer, PythonLexer, {
42    nextToken: function() {
43        // keep track of this token's position in line because Python is
44        // whitespace sensitive
45        this.startPos = this.getCharPositionInLine();
46        return MyLexer.superclass.nextToken.call(this);
47    }
48});
49MyLexer.prototype.emitErrorMessage = function(msg) {xlog(msg);}
50PythonParser.prototype.emitErrorMessage = function(msg) {xlog(msg);}
51
52/* Test */
53
54function parse(text) {
55    try {
56        var input = new ANTLR.runtime.ANTLRStringStream(text);
57        var lexer = new MyLexer(input);
58        var tokens = new ANTLR.runtime.CommonTokenStream(lexer);
59        tokens.discardOffChannelTokens=true;
60        var indentedSource = new PythonTokenSource(tokens);
61        tokens = new ANTLR.runtime.CommonTokenStream(indentedSource);
62        var parser = new PythonParser(tokens);
63        parser.file_input();
64    } catch (e) {
65        xlog(e.toString());
66    } finally {
67    }
68}
69
70var input = loadFile("rhino-python.input");
71var expected = loadFile("rhino-python.output");
72parse(input);
73var actual = output.join("\n")+"\n";
74if (actual==expected) {
75    print("Test Passed!");
76} else {
77    print("Test Failed!");
78    print(actual);
79    print(expected);
80}
81