67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
|
"use strict";
|
|||
|
|
|||
|
var TestDiscovery = require("./helper/test-discovery");
|
|||
|
var path = require("path");
|
|||
|
var argv = require("yargs").argv;
|
|||
|
var child_process = require("child_process");
|
|||
|
|
|||
|
var testSuite;
|
|||
|
if (argv.language) {
|
|||
|
testSuite = TestDiscovery.loadSomeTests(__dirname + "/languages", argv.language);
|
|||
|
} else {
|
|||
|
// load complete test suite
|
|||
|
testSuite = TestDiscovery.loadAllTests(__dirname + "/languages");
|
|||
|
}
|
|||
|
|
|||
|
// define tests for all tests in all languages in the test suite
|
|||
|
for (var language in testSuite) {
|
|||
|
if (!testSuite.hasOwnProperty(language)) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
(function (language, testFiles) {
|
|||
|
describe("Testing language '" + language + "'", function () {
|
|||
|
this.timeout(10000);
|
|||
|
|
|||
|
// Each set of tests runs in its own child process
|
|||
|
var child;
|
|||
|
before(function () {
|
|||
|
child = child_process.fork(__dirname + "/run-child.js", ['--language=' + language], {
|
|||
|
stdio: 'inherit'
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
after(function () {
|
|||
|
child.kill();
|
|||
|
});
|
|||
|
|
|||
|
testFiles.forEach(
|
|||
|
function (filePath) {
|
|||
|
var fileName = path.basename(filePath, path.extname(filePath));
|
|||
|
|
|||
|
it("– should pass test case '" + fileName + "'",
|
|||
|
function (done) {
|
|||
|
|
|||
|
child.removeAllListeners('message');
|
|||
|
child.on('message', function (o) {
|
|||
|
// We have to delay the call,
|
|||
|
// otherwise the first message is received
|
|||
|
// over and over again.
|
|||
|
setTimeout(function() {
|
|||
|
if (o.error) {
|
|||
|
throw JSON.parse(o.error);
|
|||
|
} else if (o.success) {
|
|||
|
done();
|
|||
|
}
|
|||
|
}, 1);
|
|||
|
});
|
|||
|
child.send({
|
|||
|
filePath: filePath
|
|||
|
});
|
|||
|
}
|
|||
|
);
|
|||
|
}
|
|||
|
);
|
|||
|
});
|
|||
|
})(language, testSuite[language]);
|
|||
|
}
|