Index: test/mjsunit/wasm/instantiate-module-basic.js |
diff --git a/test/mjsunit/wasm/instantiate-module-basic.js b/test/mjsunit/wasm/instantiate-module-basic.js |
index 72a3425c906de342f569d108b40871c6fae6807b..92cdc14ff915391eeb2dd2dcd78c1708729d2b9e 100644 |
--- a/test/mjsunit/wasm/instantiate-module-basic.js |
+++ b/test/mjsunit/wasm/instantiate-module-basic.js |
@@ -58,3 +58,98 @@ CheckInstance(new WebAssembly.Instance(module)); |
let promise = WebAssembly.compile(buffer); |
promise.then(module => CheckInstance(new WebAssembly.Instance(module))); |
+ |
+// Negative tests. |
+(function InvalidModules() { |
+ let invalid_cases = [undefined, 1, "", "a", {some:1, obj: "b"}]; |
+ let len = invalid_cases.length; |
+ for (var i = 0; i < len; ++i) { |
+ try { |
+ let instance = new WebAssembly.Instance(1); |
+ assertUnreachable("should not be able to instantiate invalid modules."); |
+ } catch (e) { |
+ assertContains("Argument 0", e.toString()); |
+ } |
+ } |
+})(); |
+ |
+// Compile async an invalid blob. |
+(function InvalidBinaryAsyncCompilation() { |
+ let builder = new WasmModuleBuilder(); |
+ builder.addFunction("f", kSig_i_i) |
+ .addBody([kExprCallImport, kArity0, 0]); |
+ let promise = WebAssembly.compile(builder.toBuffer()); |
+ promise |
+ .then(compiled => |
+ assertUnreachable("should not be able to compile invalid blob.")) |
+ .catch(e => assertContains("invalid signature index", e.toString())); |
+})(); |
+ |
+// Multiple instances tests. |
+(function ManyInstances() { |
+ let compiled_module = new WebAssembly.Module(buffer); |
+ let instance_1 = new WebAssembly.Instance(compiled_module); |
+ let instance_2 = new WebAssembly.Instance(compiled_module); |
+ assertTrue(instance_1 != instance_2); |
+})(); |
+ |
+(function ManyInstancesAsync() { |
+ let promise = WebAssembly.compile(buffer); |
+ promise.then(compiled_module => { |
+ let instance_1 = new WebAssembly.Instance(compiled_module); |
+ let instance_2 = new WebAssembly.Instance(compiled_module); |
+ assertTrue(instance_1 != instance_2); |
+ }); |
+})(); |
+ |
+(function InstancesAreIsolatedFromEachother() { |
+ var builder = new WasmModuleBuilder(); |
+ builder.addMemory(1,1, true); |
+ var kSig_v_i = makeSig([kAstI32], []); |
+ var signature = builder.addType(kSig_v_i); |
+ builder.addImport("some_value", kSig_i); |
+ builder.addImport("writer", signature); |
+ |
+ builder.addFunction("main", kSig_i_i) |
+ .addBody([ |
+ kExprI32Const, 1, |
+ kExprGetLocal, 0, |
+ kExprI32LoadMem, 0, 0, |
+ kExprCallIndirect, kArity1, signature, |
+ kExprGetLocal,0, |
+ kExprI32LoadMem,0, 0, |
+ kExprCallImport, kArity0, 0, |
+ kExprI32Add |
+ ]).exportFunc(); |
+ |
+ // writer(mem[i]); |
+ // return mem[i] + some_value(); |
+ builder.addFunction("_wrap_writer", signature) |
+ .addBody([ |
+ kExprGetLocal, 0, |
+ kExprCallImport, kArity1, 1]); |
+ builder.appendToTable([0, 1]); |
+ |
+ |
+ var module = new WebAssembly.Module(builder.toBuffer()); |
+ var mem_1 = new ArrayBuffer(4); |
+ var mem_2 = new ArrayBuffer(4); |
+ var view_1 = new Int32Array(mem_1); |
+ var view_2 = new Int32Array(mem_2); |
+ |
+ view_1[0] = 42; |
+ view_2[0] = 1000; |
+ |
+ var outval_1; |
+ var outval_2; |
+ var i1 = new WebAssembly.Instance(module, {some_value: () => 1, |
+ writer: (x)=>outval_1 = x }, mem_1); |
+ var i2 = new WebAssembly.Instance(module, {some_value: () => 2, |
+ writer: (x)=>outval_2 = x }, mem_2); |
+ |
+ assertEquals(43, i1.exports.main(0)); |
+ assertEquals(1002, i2.exports.main(0)); |
+ |
+ assertEquals(42, outval_1); |
+ assertEquals(1000, outval_2); |
+})(); |