diff --git a/Jakefile b/Jakefile index 2243d83..36d814f 100644 --- a/Jakefile +++ b/Jakefile @@ -429,3 +429,27 @@ task("clean", [], function () { } }); }); + +desc("Test"); +task("test", [], function () { + var Mocha = require("mocha"); + + var mocha = new Mocha({ + ui: "tdd" + }); + fs.readdirSync("./tests/").filter(function (filename) { + if (filename.indexOf("test-") === 0) { + var extensionIndex = filename.lastIndexOf(".js"); + if (extensionIndex !== -1 && extensionIndex === filename.length - ".js".length) { + return true; + } + } + + return false; + }).forEach(function (filename) { + mocha.addFile("./tests/" + filename); + }); + + mocha.run(); + // .\node_modules\.bin\mocha -u tdd tests/test*.js +}); diff --git a/package.json b/package.json index 6039026..33cc4d6 100644 --- a/package.json +++ b/package.json @@ -20,10 +20,12 @@ "url": "https://github.com/Arnavion/libjass" }, "scripts": { - "postinstall": "jake clean && jake --trace" + "postinstall": "jake clean && jake --trace", + "test": "jake test" }, "dependencies": { "jake": "latest", + "mocha": "~1.12", "pegjs": "0.7.0", "typescript": "0.9.1-1", "uglify-js": "~2" diff --git a/test/index.js b/tests/index.js similarity index 91% rename from test/index.js rename to tests/index.js index 5f0ea6b..bef6702 100644 --- a/test/index.js +++ b/tests/index.js @@ -29,6 +29,21 @@ var suite = null; var setup = null; var test = null; +var require = function (name) { + if (name === "../libjass.js") { + return libjass; + } + else if (name === "assert") { + return assert; + } + else if (name === "./parser-test.js") { + return parserTest; + } + else { + throw new Error("Cannot require unmocked module: " + name); + } +}; + (function () { var Suite = function (name, parent) { this.name = name; @@ -206,40 +221,6 @@ var assert = new function () { }; }; -var parserTest = function (description, input, rule, expected) { - var result = test(description, function () { - var actual = null; - - try { - actual = libjass.parser.parse(input, rule); - } - catch (parseException) { - if (expected === null) { - passed = true; - return; - } - else { - throw new Error("Expected parse to succeed but it threw an exception: " + parseException.message); - } - } - - if (expected === null) { - throw new Error("Expected parse to fail."); - } - else if (actual === null) { - throw new Error("Parse failed without throwing an exception."); - } - - assert.deepEqual(actual, expected); - }); - - result.customProperties = Object.create(null); - result.customProperties.input = input; - result.customProperties.rule = rule; - - return result; -}; - var Logger = function (outputDiv) { var testDiv = document.createElement("div"); testDiv.className = "test"; diff --git a/test/index.xhtml b/tests/index.xhtml similarity index 88% rename from test/index.xhtml rename to tests/index.xhtml index 076548c..f483db6 100644 --- a/test/index.xhtml +++ b/tests/index.xhtml @@ -34,10 +34,11 @@