From 44f7aff2b75849c7969e1ad0b45dab45f4bbdfd5 Mon Sep 17 00:00:00 2001 From: keeyipchan Date: Sat, 26 Jan 2013 18:12:39 -0800 Subject: [PATCH] Add testAssert() for arbitrary tests; fix skinLineComments() passing off-by-1 character to onComment(slice(.., end)) --- acorn.js | 2 +- test/driver.js | 10 +++++++++- test/tests.js | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/acorn.js b/acorn.js index f473bad68d..b00096460b 100644 --- a/acorn.js +++ b/acorn.js @@ -497,7 +497,7 @@ ch = input.charCodeAt(tokPos); } if (options.onComment) - options.onComment(false, input.slice(start + 2, tokPos - 1), start, tokPos, + options.onComment(false, input.slice(start + 2, tokPos), start, tokPos, startLoc, options.locations && curLineLoc()); } diff --git a/test/driver.js b/test/driver.js index 285461f076..729550cbde 100644 --- a/test/driver.js +++ b/test/driver.js @@ -8,6 +8,9 @@ exports.testFail = function(code, message, options) { tests.push({code: code, error: message, options: options}); }; + exports.testAssert = function(code, assert, options) { + tests.push({code: code, assert: assert, options: options}); + }; exports.runTests = function(callback) { var opts = {locations: true}; @@ -17,7 +20,12 @@ var ast = acorn.parse(test.code, test.options || opts); if (test.error) callback("fail", test.code, "Expected error message: " + test.error + "\nBut parsing succeeded."); - else { + else if (test.assert) { + var error = test.assert(ast); + if (error) callback("fail", test.code, + "\n Assertion failed:\n " + error); + else callback("ok", test.code); + } else { var mis = misMatch(test.ast, ast); if (!mis) callback("ok", test.code); else callback("fail", test.code, mis); diff --git a/test/tests.js b/test/tests.js index 0c97a6ffc6..7e14ad7a33 100644 --- a/test/tests.js +++ b/test/tests.js @@ -4,6 +4,7 @@ if (typeof exports != "undefined") { var test = require("./driver.js").test; var testFail = require("./driver.js").testFail; + var testAssert = require("./driver.js").testAssert; } test("this\n", { @@ -26716,3 +26717,55 @@ testFail("(function a(package) { \"use strict\"; })", testFail("var this = 10;", "Unexpected token (1:4)"); testFail("throw\n10;", "Illegal newline after throw (1:5)"); + +// Assertion Tests +(function() { + var actualComments = [], + expectedComments = [ + " Bear class", + " Whatever", + [" 1", + " 2", + " 3" + ].join('\n'), + "stuff" + ]; + testAssert( + function TestComments() { + // Bear class + function Bear(x,y,z) { + this.position = [x||0,y||0,z||0] + } + + Bear.prototype.roar = function(message) { + return 'RAWWW: ' + message; // Whatever + }; + + function Cat() { + /* 1 + 2 + 3*/ + } + + Cat.prototype.roar = function(message) { + return 'MEOOWW: ' + /*stuff*/ message; + }; + }.toString(), + function assert(ast) { + if (actualComments.length !== expectedComments.length) { + return JSON.stringify(actualComments) + " !== " + JSON.stringify(expectedComments); + } else { + for (var i=0, n=actualComments.length; i < n; i++) { + if (actualComments[i] !== expectedComments[i]) + return JSON.stringify(actualComments[i]) + ' !== ' + JSON.stringify(expectedComments[i]); + } + } + }, + { + onComment: function(isMultiline, text) { + actualComments.push(text); + } + } + ); +})(); +