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);
+ });
+ }
+})();