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