blob: 60e284256a027f91dec8b69a7c95b9754b1198d1 [file] [log] [blame]
// Note right now it works only for IR tests.
// With IDEA 2018.3 or later you can just activate required js and run "run IR test in node.js" configuration.
// Add to this array your path to test files or provide it as argument.
var anotherFiles = [""];
var vm = require('vm');
var fs = require('fs');
// Change working dir to root of project
var testDataPathFromRoot = "js/js.translator/testData";
var cwd = process.cwd();
if (cwd.endsWith(testDataPathFromRoot)) {
process.chdir(cwd.substr(0, cwd.length - testDataPathFromRoot.length));
}
var filesFromArgs = process.argv.slice(2);
function toAbsolutePath(path) {
if (fs.existsSync(path) && fs.statSync(path).isFile()) {
return fs.realpathSync(path)
}
return "";
}
// TODO autodetect common js files and other js files
// Filter out all except existing js files and transform all paths to absolute
var files = [].concat(filesFromArgs, anotherFiles)
.map(toAbsolutePath)
.filter(function(path) {
return path.endsWith(".js")
});
// Find runtime path
var runtimeHeader = "// RUNTIME: ";
var runtimeFiles = [];
files.forEach(function (path) {
var code = fs.readFileSync(path, 'utf8');
var firstLine = code.substr(0, code.indexOf("\n"));
if (firstLine.startsWith(runtimeHeader)) {
runtimeFiles = JSON.parse(firstLine.slice(runtimeHeader.length))
.map(toAbsolutePath);
}
});
var allFiles = [].concat(runtimeFiles, files);
// Evaluate files and run box function
var sandbox = {};
vm.createContext(sandbox);
allFiles.forEach(function(path) {
var code = fs.readFileSync(path, 'utf8');
vm.runInContext(code, sandbox, {
filename: path
})
});
// TODO: Support multimodule tests
console.log(vm.runInContext("main.box()", sandbox));