64 lines
1.7 KiB
JavaScript
Vendored
64 lines
1.7 KiB
JavaScript
Vendored
// 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));
|