Skip to content

Commit ce7705f

Browse files
committed
Adjust jspi to use new exception type.
1 parent 4e4275d commit ce7705f

File tree

1 file changed

+48
-29
lines changed

1 file changed

+48
-29
lines changed

‎test/js-api/js-promise-integration/js-promise-integration.any.js

+48-29
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
// META: global=jsshell
22
// META: script=/wasm/jsapi/wasm-module-builder.js
33

4-
function Promising(wasm_export) {
5-
return WebAssembly.promising(wasm_export);
6-
}
7-
8-
function Suspending(jsFun){
9-
return new WebAssembly.Suspending(jsFun);
10-
}
11-
124
// Test for invalid wrappers
135
test(() => {
146
assert_throws(TypeError, () => WebAssembly.promising({}),
@@ -52,9 +44,9 @@ promise_test(async () => {
5244
kExprLocalGet, 0,
5345
kExprCallFunction, import_index, // suspend
5446
]).exportFunc();
55-
let js_import = Suspending(() => Promise.resolve(42));
47+
let js_import = WebAssembly.Suspending(() => Promise.resolve(42));
5648
let instance = builder.instantiate({m: {import: js_import}});
57-
let wrapped_export = Promising(instance.exports.test);
49+
let wrapped_export = WebAssembly.promising(instance.exports.test);
5850
let export_promise = wrapped_export();
5951
assert_true(export_promise instanceof Promise);
6052
assert_equals(await export_promise, 42);
@@ -91,9 +83,9 @@ promise_test(async () => {
9183
function js_import() {
9284
return Promise.resolve(++i);
9385
};
94-
let wasm_js_import = Suspending(js_import);
86+
let wasm_js_import = WebAssembly.Suspending(js_import);
9587
let instance = builder.instantiate({m: {import: wasm_js_import}});
96-
let wrapped_export = Promising(instance.exports.test);
88+
let wrapped_export = WebAssembly.promising(instance.exports.test);
9789
let export_promise = wrapped_export();
9890
assert_equals(instance.exports.g.value, 0);
9991
assert_true(export_promise instanceof Promise);
@@ -154,11 +146,11 @@ promise_test(async () => {
154146
kExprCallFunction, import42_index, // suspend?
155147
kExprCallFunction, importSetA_index
156148
]).exportFunc();
157-
let import42 = Suspending(()=>Promise.resolve(42));
149+
let import42 = WebAssembly.Suspending(()=>Promise.resolve(42));
158150
let instance = builder.instantiate({m: {import42: import42,
159151
setA:AbeforeB.setA}});
160152

161-
let wrapped_export = Promising(instance.exports.test);
153+
let wrapped_export = WebAssembly.promising(instance.exports.test);
162154

163155
// AbeforeB.showAbeforeB();
164156
let exported_promise = wrapped_export();
@@ -183,11 +175,11 @@ promise_test(async () => {
183175
kExprCallFunction, import42_index, // suspend?
184176
kExprCallFunction, importSetA_index
185177
]).exportFunc();
186-
let import42 = Suspending(()=>42);
178+
let import42 = WebAssembly.Suspending(()=>42);
187179
let instance = builder.instantiate({m: {import42: import42,
188180
setA:AbeforeB.setA}});
189181

190-
let wrapped_export = Promising(instance.exports.test);
182+
let wrapped_export = WebAssembly.promising(instance.exports.test);
191183

192184
let exported_promise = wrapped_export();
193185
AbeforeB.setB();
@@ -213,10 +205,10 @@ test(t => {
213205
function js_import() {
214206
return Promise.resolve();
215207
};
216-
let wasm_js_import = Suspending(js_import);
208+
let wasm_js_import = WebAssembly.Suspending(js_import);
217209

218210
let instance = builder.instantiate({m: {import: wasm_js_import, tag: tag}});
219-
let wrapped_export = Promising(instance.exports.test);
211+
let wrapped_export = WebAssembly.promising(instance.exports.test);
220212
let export_promise = wrapped_export();
221213
assert_true(export_promise instanceof Promise);
222214
promise_rejects(t, new WebAssembly.Exception(tag, []), export_promise);
@@ -239,10 +231,10 @@ promise_test(async (t) => {
239231
function js_import() {
240232
return Promise.reject(new WebAssembly.Exception(tag, [42]));
241233
};
242-
let wasm_js_import = Suspending(js_import);
234+
let wasm_js_import = WebAssembly.Suspending(js_import);
243235

244236
let instance = builder.instantiate({m: {import: wasm_js_import, tag: tag}});
245-
let wrapped_export = Promising(instance.exports.test);
237+
let wrapped_export = WebAssembly.promising(instance.exports.test);
246238
let export_promise = wrapped_export();
247239
assert_true(export_promise instanceof Promise);
248240
assert_equals(await export_promise, 42);
@@ -273,14 +265,14 @@ async function TestNestedSuspenders(suspend) {
273265
kExprCallFunction, inner_index
274266
]).exportFunc();
275267

276-
let inner = Suspending(() => suspend ? Promise.resolve(42) : 43);
268+
let inner = WebAssembly.Suspending(() => suspend ? Promise.resolve(42) : 43);
277269

278270
let export_inner;
279-
let outer = Suspending(() => export_inner());
271+
let outer = WebAssembly.Suspending(() => export_inner());
280272

281273
let instance = builder.instantiate({m: {inner, outer}});
282-
export_inner = Promising(instance.exports.inner);
283-
let export_outer = Promising(instance.exports.outer);
274+
export_inner = WebAssembly.promising(instance.exports.inner);
275+
let export_outer = WebAssembly.promising(instance.exports.outer);
284276
let result = export_outer();
285277
assert_true(result instanceof Promise);
286278
if(suspend)
@@ -310,11 +302,11 @@ test(() => {
310302
.addBody([
311303
kExprLocalGet, 0
312304
]).exportFunc();
313-
let js_import = Suspending(() => Promise.resolve(42));
305+
let js_import = WebAssembly.Suspending(() => Promise.resolve(42));
314306
let instance = builder.instantiate({m: {import: js_import}});
315-
let suspender = Promising(instance.exports.return_suspender)();
307+
let suspender = WebAssembly.promising(instance.exports.return_suspender)();
316308
for (s of [suspender, null, undefined, {}]) {
317-
assert_throws(WebAssembly.RuntimeError, () => instance.exports.test(s));
309+
assert_throws(WebAssembly.SuspendError, () => instance.exports.test(s));
318310
}
319311
}, "Call import with an invalid suspender");
320312

@@ -438,8 +430,7 @@ promise_test(async (t) => {
438430
}});
439431
// export1 (promising)
440432
let wrapper = WebAssembly.promising(instance.exports.export1);
441-
promise_rejects(t, new WebAssembly.RuntimeError(), wrapper(),
442-
/trying to suspend JS frames/);
433+
promise_rejects(t, new WebAssembly.SuspendError(), wrapper());
443434
});
444435

445436
promise_test(async () => {
@@ -465,3 +456,31 @@ promise_test(async () => {
465456
let wrapped_export = WebAssembly.promising(instance2.exports.main);
466457
assert_equals(await wrapped_export(), 3);
467458
});
459+
460+
test(() => {
461+
let builder = new WasmModuleBuilder();
462+
let js_tag = builder.addImportedTag("", "tag", kSig_v_r);
463+
try_sig_index = builder.addType(kSig_i_v);
464+
465+
let promise42 = new WebAssembly.Suspending(() => Promise.resolve(42));
466+
let kPromise42Ref = builder.addImport("", "promise42", kSig_i_v);
467+
468+
builder.addFunction("test", kSig_i_v)
469+
.addBody([
470+
kExprTry, try_sig_index,
471+
kExprCallFunction, kPromise42Ref,
472+
kExprReturn, // If there was no trap or exception, return
473+
kExprCatch, js_tag,
474+
kExprI32Const, 43,
475+
kExprReturn,
476+
kExprEnd,
477+
])
478+
.exportFunc();
479+
480+
let instance = builder.instantiate({"": {
481+
promise42: promise42,
482+
tag: WebAssembly.JSTag,
483+
}});
484+
485+
assert_equals(43, instance.exports.test());
486+
},"catch the bad suspension");

0 commit comments

Comments
 (0)