"use strict"; var path = require('path'); var assert = require('assert'); var fs = require('fs'); (function () { var kotlinJsLocation = process.env.KOTLIN_JS_LOCATION || path.resolve(__dirname, "../../../dist/js/kotlin.js"); var Module = require('module'); var originalRequire = Module.prototype.require; Module.prototype.require = function(id) { if (id === "kotlin") { id = kotlinJsLocation; } return originalRequire.call(this, id); }; })(); var kotlinJsTestLocation = process.env.KOTLIN_JS_TEST_LOCATION || path.resolve(__dirname, "../../../dist/js/kotlin-test.js"); var kotlin = require("kotlin"); var kotlinTest = require(kotlinJsTestLocation); supplyAsserter(kotlinTest); var requireFromString = require('require-from-string'); var baseDir = "out"; var model = generateModel(baseDir); exposeModel(model, path.resolve(baseDir)); function exposeModel(model, currentPath) { for (var property in model) { if (!model.hasOwnProperty(property)) { continue; } var childPath = path.join(currentPath, property); var item = model[property]; describe(property, function(childPath, item) { return function() { if (typeof item === "string") { it("", function () { var result = runTest(require(childPath), childPath); assert.equal("OK", result); }); } else if (typeof item === "object") { exposeModel(item, childPath); } } }(childPath, item)); } } /** * @param currentPath String * @returns String|{} */ function generateModel(currentPath) { var stats = fs.statSync(currentPath); if (stats.isDirectory()) { var result = {}; var files = fs.readdirSync(currentPath); var empty = true; for (var i = 0; i < files.length; ++i) { var child = files[i]; var childModel = generateModel(path.join(currentPath, child)); if (childModel !== void 0) { result[child] = childModel; empty = false; } } return !empty ? result : void 0; } else if (stats.isFile()) { if (currentPath.endsWith(".node.js")) { return currentPath; } else { return void 0; } } else { return void 0; } } function runTest(testRunner, location) { var text = ""; var fs = require('fs'); var basePath = path.dirname(location); return testRunner(function(fileNames, moduleName) { text += 'module.exports = function(kotlin) {\n'; text += "var exports = void 0;"; for (var i = 0; i < fileNames.length; ++i) { text += fs.readFileSync(path.resolve(basePath, fileNames[i])) + "\n"; } text += 'var resultModule = typeof emulatedModules != "undefined" ? emulatedModules.' + moduleName + ' : null;\n'; text += "resultModule = resultModule || this." + moduleName + ";\n"; text += 'return resultModule || ' + moduleName + ';\n'; text += "};"; return requireFromString(text).call({ "kotlin-test": kotlinTest }, kotlin); }); } function supplyAsserter(kotlinTest) { kotlinTest.kotlin.test.overrideAsserter_wbnzx$(kotlinTest.kotlin.test.DefaultAsserter); }