| 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);
|
| }
|
| +assertInstantiateSuccess(emptyModuleBinary);
|
| +assertInstantiateSuccess(emptyModuleBinary.buffer);
|
| +assertInstantiateSuccess(importingModuleBinary, {"":{f:()=>{}}});
|
| +assertInstantiateSuccess(importingModuleBinary.buffer, {"":{f:()=>{}}});
|
| +assertInstantiateSuccess(memoryImportingModuleBinary, {"": {"my_memory": scratch_memory}});
|
|
|