<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>t015calc</title>

<!-- ANTLR includes -->
<script type="text/javascript" src="../../lib/antlr3-all.js"></script>
<script type="text/javascript" src="t015calcLexer.js"></script>
<script type="text/javascript" src="t015calcParser.js"></script>


<!-- JsUnit include -->
<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>

<!-- Test Code -->
<script type="text/javascript">
    function _evaluate(expr, expected, errors) {
        var cstream = new org.antlr.runtime.ANTLRStringStream(expr),
            lexer = new t015calcLexer(cstream),
            tstream = new org.antlr.runtime.CommonTokenStream(lexer),
            parser = new t015calcParser(tstream);

        var result = parser.evaluate();
        assertEquals(result, expected);
        if (!errors) {
            assertUndefined(parser.reportedErrors);
        } else {
            assertEquals(parser.reportedErrors.length, errors.length);
        }
    }

    function testValid01() {
        _evaluate("1 + 2", 3);
    }


    function testValid02() {
        _evaluate("1 + 2 * 3", 7);
    }


    function testValid03() {
        _evaluate("10 / 2", 5);
    }


    function testValid04() {
        _evaluate("6 + 2*(3+1) - 4", 10);
    }


    function testMalformedInput() {
        _evaluate("6 - (2*1", 4, ["mismatched token at pos 8"]);
    }
        
    // FIXME: most parse errors result in TypeErrors in action code, because
    // rules return None, which is then added/multiplied... to integers.
    // evaluate("6 - foo 2", 4, ["some error"])
</script>

</head>
<body>
    <h1>t015calc</h1>
</body>
</html>
