Add testAssert() for arbitrary tests; fix skinLineComments() passing off-by-1 character to onComment(slice(.., end))
This commit is contained in:
parent
17a0094694
commit
44f7aff2b7
2
acorn.js
2
acorn.js
@ -497,7 +497,7 @@
|
|||||||
ch = input.charCodeAt(tokPos);
|
ch = input.charCodeAt(tokPos);
|
||||||
}
|
}
|
||||||
if (options.onComment)
|
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());
|
startLoc, options.locations && curLineLoc());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,9 @@
|
|||||||
exports.testFail = function(code, message, options) {
|
exports.testFail = function(code, message, options) {
|
||||||
tests.push({code: code, error: message, options: 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) {
|
exports.runTests = function(callback) {
|
||||||
var opts = {locations: true};
|
var opts = {locations: true};
|
||||||
@ -17,7 +20,12 @@
|
|||||||
var ast = acorn.parse(test.code, test.options || opts);
|
var ast = acorn.parse(test.code, test.options || opts);
|
||||||
if (test.error) callback("fail", test.code,
|
if (test.error) callback("fail", test.code,
|
||||||
"Expected error message: " + test.error + "\nBut parsing succeeded.");
|
"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);
|
var mis = misMatch(test.ast, ast);
|
||||||
if (!mis) callback("ok", test.code);
|
if (!mis) callback("ok", test.code);
|
||||||
else callback("fail", test.code, mis);
|
else callback("fail", test.code, mis);
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
if (typeof exports != "undefined") {
|
if (typeof exports != "undefined") {
|
||||||
var test = require("./driver.js").test;
|
var test = require("./driver.js").test;
|
||||||
var testFail = require("./driver.js").testFail;
|
var testFail = require("./driver.js").testFail;
|
||||||
|
var testAssert = require("./driver.js").testAssert;
|
||||||
}
|
}
|
||||||
|
|
||||||
test("this\n", {
|
test("this\n", {
|
||||||
@ -26716,3 +26717,55 @@ testFail("(function a(package) { \"use strict\"; })",
|
|||||||
testFail("var this = 10;", "Unexpected token (1:4)");
|
testFail("var this = 10;", "Unexpected token (1:4)");
|
||||||
|
|
||||||
testFail("throw\n10;", "Illegal newline after throw (1:5)");
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user