From eb9b5edffb8c5acb0abdff0729901f95dbd3ccac Mon Sep 17 00:00:00 2001 From: eholk Date: Tue, 31 Jan 2017 11:28:12 -0800 Subject: [PATCH] [wasm] include JS conformance tests in Wasm mjsunit tests BUG= Review-Url: https://codereview.chromium.org/2660903003 Cr-Commit-Position: refs/heads/master@{#42821} --- .gitignore | 1 + DEPS | 4 ++ test/mjsunit/mjsunit.isolate | 5 +- test/mjsunit/wasm/jsapi-harness.js | 78 ++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 test/mjsunit/wasm/jsapi-harness.js diff --git a/.gitignore b/.gitignore index a63f48fd42..90aa082419 100644 --- a/.gitignore +++ b/.gitignore @@ -98,3 +98,4 @@ v8.ignition_dispatches_table.json /test/fuzzer/wasm_asmjs.tar.gz /src/inspector/build/closure-compiler.tar.gz /src/inspector/build/closure-compiler +/test/wasm-js diff --git a/DEPS b/DEPS index 8768036fff..9c31c66dc1 100644 --- a/DEPS +++ b/DEPS @@ -40,6 +40,10 @@ deps = { Var("chromium_url") + "/external/github.com/test262-utils/test262-harness-py.git" + "@" + "0f2acdd882c84cff43b9d60df7574a1901e2cdcd", "v8/tools/clang": Var("chromium_url") + "/chromium/src/tools/clang.git" + "@" + "960cc3ec8c679adad9b6f9019f737c8cd9ad0a75", +# TODO(eholk): once the Wasm JS API Conformance Suite is finalized, mirror it in +# a chromium repo like the other deps. + "v8/test/wasm-js": + "https://github.com/bnjbvr/wasm-spec.git" + "@" + "190bd270e148a532082f6eb1b97dea5302800485", } deps_os = { diff --git a/test/mjsunit/mjsunit.isolate b/test/mjsunit/mjsunit.isolate index 6ebd801eac..f98cbdb023 100644 --- a/test/mjsunit/mjsunit.isolate +++ b/test/mjsunit/mjsunit.isolate @@ -14,11 +14,12 @@ '../../tools/profviz/composer.js', '../../tools/splaytree.js', '../../tools/tickprocessor.js', - '../../tools/dumpcpp.js' + '../../tools/dumpcpp.js', + '../wasm-js/', ], }, 'includes': [ '../../src/d8.isolate', '../../tools/testrunner/testrunner.isolate', ], -} \ No newline at end of file +} diff --git a/test/mjsunit/wasm/jsapi-harness.js b/test/mjsunit/wasm/jsapi-harness.js new file mode 100644 index 0000000000..6e4642bea5 --- /dev/null +++ b/test/mjsunit/wasm/jsapi-harness.js @@ -0,0 +1,78 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// TODO(eholk): Once we have stable test IDs, use those as the key instead. +// See https://github.com/WebAssembly/spec/issues/415 +const known_failures = { + "'WebAssembly.Module.customSections' method": + 'https://bugs.chromium.org/p/v8/issues/detail?id=5815', + "'WebAssembly.Table.prototype.get' method": + 'https://bugs.chromium.org/p/v8/issues/detail?id=5507', + "'WebAssembly.Table.prototype.set' method": + 'https://bugs.chromium.org/p/v8/issues/detail?id=5507', +}; + +let failures = []; + +let last_promise = new Promise((resolve, reject) => { resolve(); }); + +function test(func, description) { + let maybeErr; + try { func(); } + catch(e) { maybeErr = e; } + if (typeof maybeErr !== 'undefined') { + print(`${description}: FAIL. ${maybeErr}`); + failures.push(description); + } else { + print(`${description}: PASS.`); + } +} + +function promise_test(func, description) { + last_promise = last_promise.then(func) + .then(_ => { print(`${description}: PASS.`); }) + .catch(err => { + print(`${description}: FAIL. ${err}`); + failures.push(description); + }); +} + +let assert_equals = assertEquals; +let assert_true = assertEquals.bind(null, true); +let assert_false = assertEquals.bind(null, false); + +function assert_unreached(description) { + throw new Error(`unreachable:\n${description}`); +} + +function assertErrorMessage(f, ctor, test) { + try { f(); } + catch (e) { + assert_true(e instanceof ctor, "expected exception " + ctor.name + ", got " + e); + return; + } + assert_true(false, "expected exception " + ctor.name + ", no exception thrown"); +}; + +load("test/wasm-js/test/lib/wasm-constants.js"); +load("test/wasm-js/test/lib/wasm-module-builder.js"); +load("test/wasm-js/test/js-api/jsapi.js"); + +last_promise.then(_ => { + if (failures.length > 0) { + let unexpected = false; + print("Some tests FAILED:"); + for (let i in failures) { + if (known_failures[failures[i]]) { + print(` ${failures[i]} [KNOWN: ${known_failures[failures[i]]}]`); + } else { + print(` ${failures[i]}`); + unexpected = true; + } + } + if (unexpected) { + quit(1); + } + } +});