diff --git a/acorn_loose.js b/acorn_loose.js index 4c5806a179..9b739da101 100644 --- a/acorn_loose.js +++ b/acorn_loose.js @@ -786,35 +786,6 @@ return finishNode(node, "NewExpression"); } - function parseTemplate() { - var node = startNode(); - node.expressions = []; - node.quasis = []; - inTemplate = true; - next(); - for (;;) { - var elem = startNode(); - elem.value = {cooked: tokVal, raw: input.slice(tokStart, tokEnd)}; - elem.tail = false; - next(); - node.quasis.push(finishNode(elem, "TemplateElement")); - if (tokType === _bquote) { // '`', end of template - elem.tail = true; - break; - } - inTemplate = false; - expect(_dollarBraceL); - node.expressions.push(parseExpression()); - inTemplate = true; - // hack to include previously skipped space - tokPos = tokEnd; - expect(_braceR); - } - inTemplate = false; - next(); - return finishNode(node, "TemplateLiteral"); - } - function parseObj(isClass, isStatement) { var node = startNode(); if (isClass) { diff --git a/test/driver.js b/test/driver.js index cbd6cc3a04..c76b8f91a4 100644 --- a/test/driver.js +++ b/test/driver.js @@ -52,12 +52,15 @@ else callback("ok", test.code); } } catch(e) { - if (test.error && e instanceof SyntaxError) { + if (!(e instanceof SyntaxError)) { + throw e; + } + if (test.error) { if (e.message == test.error) callback("ok", test.code); else callback("fail", test.code, "Expected error message: " + test.error + "\nGot error message: " + e.message); } else { - callback("error", test.code, !(e instanceof SyntaxError) && e.stack || e.message || e.toString()); + callback("error", test.code, e.message || e.toString()); } } } diff --git a/test/index.html b/test/index.html index 96a9d952c5..ef80eb7b15 100644 --- a/test/index.html +++ b/test/index.html @@ -3,23 +3,12 @@ Acorn test suite + - - + + + + diff --git a/test/run.js b/test/run.js index 04001c3d56..fefcaed6a7 100644 --- a/test/run.js +++ b/test/run.js @@ -1,56 +1,104 @@ -var driver = require("./driver.js"); -require("./tests.js"); -require("./tests-harmony.js"); +(function() { + var driver; -var stats, modes = { - Normal: { - config: { - parse: (typeof require === "undefined" ? window.acorn : require("../acorn.js")).parse + if (typeof require !== "undefined") { + driver = require("./driver.js"); + require("./tests.js"); + require("./tests-harmony.js"); + } else { + driver = window; + } + + var htmlLog = typeof document === "object" && document.getElementById('log'); + var htmlGroup; + + function group(name) { + if (htmlLog) { + htmlGroup = document.createElement("ul"); + var item = document.createElement("li"); + item.textContent = name; + item.appendChild(htmlGroup); + htmlLog.appendChild(item); } - }, - Loose: { - config: { - parse: (typeof require === "undefined") ? window.acorn_loose : require("../acorn_loose").parse_dammit, - loose: true, - filter: function (test) { - var opts = test.options || {}; - if (opts.loose === false) return false; - return (opts.ecmaVersion || 5) <= 6; - } + if (typeof console === "object" && console.group) { + console.group(name); } } -}; -function report(state, code, message) { - if (state != "ok") {++stats.failed; console.log(code, message);} - ++stats.testsRun; -} + function groupEnd() { + htmlGroup = null; + if (typeof console === "object" && console.groupEnd) { + console.groupEnd(name); + } + } -for (var name in modes) { - var mode = modes[name]; - stats = mode.stats = {testsRun: 0, failed: 0}; - var t0 = +new Date; - driver.runTests(mode.config, report); - mode.stats.duration = +new Date - t0; -} + function log(title, message) { + if (htmlGroup) { + var elem = document.createElement("li"); + elem.innerHTML = "" + title + " " + message; + htmlGroup.appendChild(elem); + } + if (typeof console === "object") console.log(title, message); + } -function outputStats(name, stats) { - console.log(name + ": " + stats.testsRun + " tests run in " + stats.duration + "ms; " + - (stats.failed ? stats.failed + " failures." : "all passed.")); -} + var stats, modes = { + Normal: { + config: { + parse: (typeof require === "undefined" ? window.acorn : require("../acorn.js")).parse + } + }, + Loose: { + config: { + parse: (typeof require === "undefined" ? window.acorn : require("../acorn_loose")).parse_dammit, + loose: true, + filter: function (test) { + var opts = test.options || {}; + if (opts.loose === false) return false; + return (opts.ecmaVersion || 5) <= 6; + } + } + } + }; -var total = {testsRun: 0, failed: 0, duration: 0}; + function report(state, code, message) { + if (state != "ok") {++stats.failed; log(code, message);} + ++stats.testsRun; + } -for (var name in modes) { - var stats = modes[name].stats; - outputStats(name + " parser", stats); - for (var key in stats) total[key] += stats[key]; -} + group("Errors"); -outputStats("Total", total); + for (var name in modes) { + var mode = modes[name]; + stats = mode.stats = {testsRun: 0, failed: 0}; + var t0 = +new Date; + driver.runTests(mode.config, report); + mode.stats.duration = +new Date - t0; + } -if (total.failed) { - process.stdout.write("", function() { - process.exit(1); - }); -} + groupEnd(); + + function outputStats(name, stats) { + log(name + ":", stats.testsRun + " tests run in " + stats.duration + "ms; " + + (stats.failed ? stats.failed + " failures." : "all passed.")); + } + + var total = {testsRun: 0, failed: 0, duration: 0}; + + group("Stats"); + + for (var name in modes) { + var stats = modes[name].stats; + outputStats(name + " parser", stats); + for (var key in stats) total[key] += stats[key]; + } + + outputStats("Total", total); + + groupEnd(); + + if (total.failed && typeof process === "object") { + process.stdout.write("", function() { + process.exit(1); + }); + } +})();