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