Index: test/mjsunit/wasm/js-api.js |
diff --git a/test/mjsunit/wasm/js-api.js b/test/mjsunit/wasm/js-api.js |
index 1e91cfa5aeb912f77c88a7ed2b60ea8cce7736e4..540718b7c3c2e91280cfdbdc42c42810d22b5893 100644 |
--- a/test/mjsunit/wasm/js-api.js |
+++ b/test/mjsunit/wasm/js-api.js |
@@ -41,6 +41,12 @@ let importingModuleBinary = (() => { |
return new Int8Array(builder.toBuffer()); |
})(); |
+let memoryImportingModuleBinary = (() => { |
+ var builder = new WasmModuleBuilder(); |
+ builder.addImportedMemory("", "my_memory"); |
+ return new Int8Array(builder.toBuffer()); |
+})(); |
+ |
let moduleBinaryImporting2Memories = (() => { |
var builder = new WasmModuleBuilder(); |
builder.addImportedMemory("", "memory1"); |
@@ -256,10 +262,16 @@ let Instance = WebAssembly.Instance; |
assertEq(Instance, instanceDesc.value); |
assertEq(Instance.length, 1); |
assertEq(Instance.name, "Instance"); |
+ |
assertErrorMessage(() => Instance(), TypeError, /constructor without new is forbidden/); |
assertErrorMessage(() => new Instance(1), TypeError, "first argument must be a WebAssembly.Module"); |
assertErrorMessage(() => new Instance({}), TypeError, "first argument must be a WebAssembly.Module"); |
assertErrorMessage(() => new Instance(emptyModule, null), TypeError, "second argument must be an object"); |
+assertErrorMessage(() => new Instance(importingModule, null), TypeError, ""); |
+assertErrorMessage(() => new Instance(importingModule, undefined), TypeError, ""); |
+assertErrorMessage(() => new Instance(importingModule, {"":{g:()=>{}}}), LinkError, ""); |
+assertErrorMessage(() => new Instance(importingModule, {t:{f:()=>{}}}), LinkError, ""); |
+ |
assertEq(new Instance(emptyModule) instanceof Instance, true); |
assertEq(new Instance(emptyModule, {}) instanceof Instance, true); |
@@ -560,55 +572,63 @@ function assertCompileSuccess(bytes) { |
assertCompileSuccess(emptyModuleBinary); |
assertCompileSuccess(emptyModuleBinary.buffer); |
-if (false) { // TODO: implement WebAssembly.instantiate |
- // 'WebAssembly.instantiate' data property |
- let instantiateDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'instantiate'); |
- assertEq(typeof instantiateDesc.value, "function"); |
- assertEq(instantiateDesc.writable, true); |
- assertEq(instantiateDesc.enumerable, false); |
- assertEq(instantiateDesc.configurable, true); |
- |
- // 'WebAssembly.instantiate' function |
- let instantiate = WebAssembly.instantiate; |
- assertEq(instantiate, instantiateDesc.value); |
- assertEq(instantiate.length, 2); |
- assertEq(instantiate.name, "instantiate"); |
- function assertInstantiateError(args, err, msg) { |
- var error = null; |
- try { |
- instantiate(...args).catch(e => error = e); |
- } catch(e) { |
- error = e; |
- } |
- drainJobQueue(); |
- assertEq(error instanceof err, true); |
- assertEq(Boolean(error.stack.match("jsapi.js")), true); |
- assertEq(Boolean(error.message.match(msg)), true); |
- } |
- assertInstantiateError([], TypeError, /requires more than 0 arguments/); |
- assertInstantiateError([undefined], TypeError, /first argument must be a WebAssembly.Module, ArrayBuffer or typed array object/); |
- assertInstantiateError([1], TypeError, /first argument must be a WebAssembly.Module, ArrayBuffer or typed array object/); |
- assertInstantiateError([{}], TypeError, /first argument must be a WebAssembly.Module, ArrayBuffer or typed array object/); |
- assertInstantiateError([new Uint8Array()], CompileError, /failed to match magic number/); |
- assertInstantiateError([new ArrayBuffer()], CompileError, /failed to match magic number/); |
- assertInstantiateError([importingModule], TypeError, /second argument must be an object/); |
- assertInstantiateError([importingModule, null], TypeError, /second argument must be an object/); |
- assertInstantiateError([importingModuleBinary, null], TypeError, /second argument must be an object/); |
- function assertInstantiateSuccess(module, imports) { |
- var result = null; |
- instantiate(module, imports).then(r => result = r); |
- drainJobQueue(); |
- if (module instanceof Module) { |
- assertEq(result instanceof Instance, true); |
- } else { |
- assertEq(result.module instanceof Module, true); |
- assertEq(result.instance instanceof Instance, true); |
- } |
+// 'WebAssembly.instantiate' data property |
+let instantiateDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'instantiate'); |
+assertEq(typeof instantiateDesc.value, "function"); |
+assertEq(instantiateDesc.writable, true); |
+assertEq(instantiateDesc.enumerable, false); |
+assertEq(instantiateDesc.configurable, true); |
+ |
+// 'WebAssembly.instantiate' function |
+let instantiate = WebAssembly.instantiate; |
+assertEq(instantiate, instantiateDesc.value); |
+assertEq(instantiate.length, 1); |
+assertEq(instantiate.name, "instantiate"); |
+function assertInstantiateError(args, err, msg) { |
+ var error = null; |
+ try { |
+ instantiate(...args).catch(e => error = e); |
+ } catch(e) { |
+ error = e; |
} |
- assertInstantiateSuccess(emptyModule); |
- assertInstantiateSuccess(emptyModuleBinary); |
- assertInstantiateSuccess(emptyModuleBinary.buffer); |
- assertInstantiateSuccess(importingModule, {"":{f:()=>{}}}); |
- assertInstantiateSuccess(importingModuleBinary, {"":{f:()=>{}}}); |
- assertInstantiateSuccess(importingModuleBinary.buffer, {"":{f:()=>{}}}); |
+ drainJobQueue(); |
+ assertEq(error instanceof err, true); |
+ assertEq(Boolean(error.stack.match("js-api.js")), true); |
+ //TOassertEq(Boolean(error.message.match(msg)), true); |
+} |
+var scratch_memory = new WebAssembly.Memory(new ArrayBuffer(10)); |
+assertInstantiateError([], TypeError, /requires more than 0 arguments/); |
+assertInstantiateError([undefined], TypeError, /first argument must be a BufferSource/); |
+assertInstantiateError([1], TypeError, /first argument must be a BufferSource/); |
+assertInstantiateError([{}], TypeError, /first argument must be a BufferSource/); |
+assertInstantiateError([new Uint8Array()], CompileError, /failed to match magic number/); |
+assertInstantiateError([new ArrayBuffer()], CompileError, /failed to match magic number/); |
+assertInstantiateError([new Uint8Array("hi!")], CompileError, /failed to match magic number/); |
+assertInstantiateError([new ArrayBuffer("hi!")], CompileError, /failed to match magic number/); |
+assertInstantiateError([importingModule], TypeError, /second argument must be an object/); |
+assertInstantiateError([importingModule, null], TypeError, /second argument must be an object/); |
+assertInstantiateError([importingModuleBinary, null], TypeError, /second argument must be an object/); |
+assertInstantiateError([emptyModule, null], TypeError, /first argument must be a BufferSource/); |
+assertInstantiateError([importingModule, {"":{f:()=>{}}}], TypeError, /first argument must be a BufferSource/); |
+assertInstantiateError([importingModuleBinary, null], TypeError, /TODO: error messages?/); |
+assertInstantiateError([importingModuleBinary, undefined], TypeError, /TODO: error messages?/); |
+assertInstantiateError([importingModuleBinary, {}], LinkError, /TODO: error messages?/); |
+assertInstantiateError([importingModuleBinary, {"":{g:()=>{}}}], LinkError, /TODO: error messages?/); |
+assertInstantiateError([importingModuleBinary, {t:{f:()=>{}}}], LinkError, /TODO: error messages?/); |
+assertInstantiateError([memoryImportingModuleBinary, null], TypeError, /TODO: error messages?/); |
+assertInstantiateError([memoryImportingModuleBinary, undefined], TypeError, /TODO: error messages?/); |
+assertInstantiateError([memoryImportingModuleBinary, {}], LinkError, /TODO: error messages?/); |
+assertInstantiateError([memoryImportingModuleBinary, {"mod": {"my_memory": scratch_memory}}], LinkError, /TODO: error messages?/); |
+assertInstantiateError([memoryImportingModuleBinary, {"": {"memory": scratch_memory}}], LinkError, /TODO: error messages?/); |
+ |
+function assertInstantiateSuccess(module_bytes, imports) { |
+ var result = null; |
+ instantiate(module_bytes, imports).then(r => result = r).catch(e => print(e)); |
+ drainJobQueue(); |
+ assertEq(result instanceof Instance, true); |
Derek Schuff
2017/01/20 01:46:19
Drive-by review! This is a change in behavior from
|
} |
+assertInstantiateSuccess(emptyModuleBinary); |
+assertInstantiateSuccess(emptyModuleBinary.buffer); |
+assertInstantiateSuccess(importingModuleBinary, {"":{f:()=>{}}}); |
+assertInstantiateSuccess(importingModuleBinary.buffer, {"":{f:()=>{}}}); |
+assertInstantiateSuccess(memoryImportingModuleBinary, {"": {"my_memory": scratch_memory}}); |