108 lines
3.4 KiB
JavaScript
Vendored
108 lines
3.4 KiB
JavaScript
Vendored
"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);
|
|
} |