blob: ae40b8b089edb5a9a6cd92a17139b5fc92661fdf [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
const [testfile, ...options] = WScript.Arguments;
if (!testfile) {
throw new Error("Missing testfile");
}
const verbose = options.indexOf("-verbose") !== -1;
const self = this;
const setTimeout = WScript.SetTimeout;
const clearTimeout = WScript.ClearTimeout;
WScript.Flag(`-wasmMaxTableSize:${(Math.pow(2,32)-1)|0}`);
self.addEventListener = function() {};
class ConsoleTestEnvironment {
on_tests_ready() {
runTests();
this.all_loaded = true;
}
// Invoked after setup() has been called to notify the test environment
// of changes to the test harness properties.
on_new_harness_properties(properties) {}
// Should return a new unique default test name.
next_default_test_name() {
return this.nextName = (this.nextName | 0) + 1;
}
// Should return the test harness timeout duration in milliseconds.
test_timeout() {
return null;
}
add_on_loaded_callback() {}
// Should return the global scope object.
global_scope() {
return self;
}
}
function chakra_create_test_environment() {
return new ConsoleTestEnvironment();
}
WScript.LoadScriptFile("testsuite/harness/sync_index.js");
WScript.LoadScriptFile("testsuite/harness/wasm-constants.js");
WScript.LoadScriptFile("testsuite/harness/wasm-module-builder.js");
WScript.LoadScript(read("testsuite/harness/testharness.js")
// Use our text environment
.replace(" = create_test_environment", " = chakra_create_test_environment"));
function reportResult(tests, harness_status) {
const status_text_harness = {
[harness_status.OK]: "OK",
[harness_status.ERROR]: "Error",
[harness_status.TIMEOUT]: "Timeout",
};
const firstTest = tests[0] || {};
const status_text = {
[firstTest.PASS]: "Pass",
[firstTest.FAIL]: "Fail",
[firstTest.TIMEOUT]: "Timeout",
[firstTest.NOTRUN]: "Not Run",
};
const status_number = tests.reduce((all, test) => {
var status = status_text[test.status];
all[status] = (all[status]|0) + 1;
return all;
}, {});
function get_assertion(test) {
if (test.properties.hasOwnProperty("assert")) {
if (Array.isArray(test.properties.assert)) {
return test.properties.assert.join(" ");
}
return test.properties.assert;
}
return "";
}
const testsReport = tests.map(test => {
const stack = verbose ? test.stack : "";
return `${status_text[test.status]} ${test.name} ${get_assertion(test)} ${test.message || ""}${stack ? "\n" + stack : stack}`;
});
console.log(`Harness Status: ${status_text_harness[harness_status.status]}
Found ${tests.length} tests: ${Object.keys(status_number).map(key => `${key} = ${status_number[key]}`).join(" ")}
${testsReport.join("\n")}`);
}
function runTests() {
add_completion_callback((...args) => {
try {
reportResult(...args);
} catch (e) {
console.log(e);
}
});
WScript.LoadScriptFile(testfile);
}