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]);
|
||
} |