Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Unified Diff: test/mjsunit/wasm/errors.js

Issue 2421453002: [wasm] Implement {Compile,Runtime}Error; fix traps from start function (Closed)
Patch Set: Fix merge artefact Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/common/wasm/wasm-module-runner.cc ('k') | test/mjsunit/wasm/table.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/wasm/errors.js
diff --git a/test/mjsunit/wasm/errors.js b/test/mjsunit/wasm/errors.js
new file mode 100644
index 0000000000000000000000000000000000000000..97ce89998b2eec60a6dbe64c1cec748684b46265
--- /dev/null
+++ b/test/mjsunit/wasm/errors.js
@@ -0,0 +1,134 @@
+// Copyright 2016 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.
+
+// Flags: --expose-wasm
+
+'use strict';
+
+load("test/mjsunit/wasm/wasm-constants.js");
+load("test/mjsunit/wasm/wasm-module-builder.js");
+
+function module(bytes) {
+ let buffer = bytes;
+ if (typeof buffer === 'string') {
+ buffer = new ArrayBuffer(bytes.length);
+ let view = new Uint8Array(buffer);
+ for (let i = 0; i < bytes.length; ++i) {
+ view[i] = bytes.charCodeAt(i);
+ }
+ }
+ return new WebAssembly.Module(buffer);
+}
+
+function instance(bytes, imports = {}) {
+ return new WebAssembly.Instance(module(bytes), imports);
+}
+
+function builder() {
+ return new WasmModuleBuilder;
+}
+
+function assertCompileError(bytes) {
+ assertThrows(() => module(bytes), WebAssembly.CompileError);
+}
+
+function assertLinkError(bytes, imports = {}) {
+ assertThrows(() => instance(bytes, imports), TypeError);
+}
+
+function assertRuntimeError(bytes, imports = {}) {
+ assertThrows(() => instance(bytes, imports).exports.run(),
+ WebAssembly.RuntimeError);
+}
+
+function assertConversionError(bytes, imports = {}) {
+ assertThrows(() => instance(bytes, imports).exports.run(), TypeError);
+}
+
+(function TestDecodingError() {
+ assertCompileError("");
+ assertCompileError("X");
+ assertCompileError("\0x00asm");
+})();
+
+(function TestValidationError() {
+ assertCompileError(builder().addFunction("f", kSig_i_v).end().toBuffer());
+ assertCompileError(builder().addFunction("f", kSig_i_v).addBody([
+ kExprReturn
+ ]).end().toBuffer());
+ assertCompileError(builder().addFunction("f", kSig_v_v).addBody([
+ kExprGetLocal, 0
+ ]).end().toBuffer());
+ assertCompileError(builder().addStart(0).toBuffer());
+})();
+
+(function TestLinkingError() {
+ let b;
+
+ b = builder();
+ b.addImportWithModule("foo", "bar", kSig_v_v);
+ assertLinkError(b.toBuffer(), {});
+ b = builder();
+ b.addImportWithModule("foo", "bar", kSig_v_v);
+ assertLinkError(b.toBuffer(), {foo: {}});
+ b = builder();
+ b.addImportWithModule("foo", "bar", kSig_v_v);
+ assertLinkError(b.toBuffer(), {foo: {bar: 9}});
+
+ b = builder();
+ b.addImportedGlobal("foo", "bar", kAstI32);
+ assertLinkError(b.toBuffer(), {});
+ // TODO(titzer): implement stricter import checks for globals.
+ // b = builder();
+ // b.addImportedGlobal("foo", "bar", kAstI32);
+ // assertLinkError(b.toBuffer(), {foo: {}});
+ // b = builder();
+ // b.addImportedGlobal("foo", "bar", kAstI32);
+ // assertLinkError(b.toBuffer(), {foo: {bar: ""}});
+ // b = builder();
+ // b.addImportedGlobal("foo", "bar", kAstI32);
+ // assertLinkError(b.toBuffer(), {foo: {bar: () => 9}});
+
+ b = builder();
+ b.addImportedMemory("foo", "bar");
+ assertLinkError(b.toBuffer(), {});
+ b = builder();
+ b.addImportedMemory("foo", "bar");
+ assertLinkError(b.toBuffer(), {foo: {}});
+ // TODO(titzer): implement stricter import checks for globals.
+ // b = builder();
+ // b.addImportedMemory("foo", "bar", 1);
+ // assertLinkError(b.toBuffer(),
+ // {foo: {bar: new WebAssembly.Memory({initial: 0})}});
+})();
+
+(function TestTrapError() {
+ assertRuntimeError(builder().addFunction("run", kSig_v_v).addBody([
+ kExprUnreachable
+ ]).exportFunc().end().toBuffer());
+
+ assertRuntimeError(builder().addFunction("run", kSig_v_v).addBody([
+ kExprI32Const, 1,
+ kExprI32Const, 0,
+ kExprI32DivS,
+ kExprDrop
+ ]).exportFunc().end().toBuffer());
+
+ assertRuntimeError(builder().addFunction("run", kSig_v_v).addBody([
+ ]).exportFunc().end().
+ addFunction("start", kSig_v_v).addBody([
+ kExprUnreachable
+ ]).end().addStart(1).toBuffer());
+})();
+
+(function TestConversionError() {
+ let b = builder();
+ b.addImportWithModule("foo", "bar", kSig_v_l);
+ assertConversionError(b.addFunction("run", kSig_v_v).addBody([
+ kExprI64Const, 0, kExprCallFunction, 0
+ ]).exportFunc().end().toBuffer());
+ assertConversionError(builder().addFunction("run", kSig_l_v).addBody([
+ kExprI64Const, 0
+ ]).exportFunc().end().toBuffer());
+})();
« no previous file with comments | « test/common/wasm/wasm-module-runner.cc ('k') | test/mjsunit/wasm/table.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698