From c857e833993ef9aca36c0cae19f78ce2ed61ac58 Mon Sep 17 00:00:00 2001 From: Matthias Liedtke Date: Tue, 23 Sep 2025 17:53:30 +0200 Subject: [PATCH 1/4] [js-api] Add test case for externref global --- test/js-api/global/constructor.any.js | 28 ++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/test/js-api/global/constructor.any.js b/test/js-api/global/constructor.any.js index 7c2c02c790..27df376110 100644 --- a/test/js-api/global/constructor.any.js +++ b/test/js-api/global/constructor.any.js @@ -167,5 +167,31 @@ test(() => { test(() => { const argument = { "value": "v128" }; - assert_throws_js(TypeError, () =>new WebAssembly.Global(argument)); + assert_throws_js(TypeError, () => new WebAssembly.Global(argument)); }, "Construct v128 global"); + +test(() => { + let global = new WebAssembly.Global({value: "externref"}, "initial value"); + assert_Global(global, "initial value"); + for (let value of [ + undefined, + null, + true, + 1, + -0, + 1.5, + -2n, + Symbol("test"), + "string", + {"an": "object"}, + () => null + ]) { + global.value = value; + assert_Global(global, value); + } +}, "externref global"); + +test(() => { + let global = new WebAssembly.Global({value: "externref"}); + assert_Global(global, undefined); +}, "externref global with default value"); From d82c98bc41deb92ba76d187cae55dab5c2ee457b Mon Sep 17 00:00:00 2001 From: Matthias Liedtke Date: Mon, 20 Oct 2025 13:24:15 +0200 Subject: [PATCH 2/4] Only test the constructor --- test/js-api/global/constructor.any.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/js-api/global/constructor.any.js b/test/js-api/global/constructor.any.js index 27df376110..f3e8f8fd78 100644 --- a/test/js-api/global/constructor.any.js +++ b/test/js-api/global/constructor.any.js @@ -8,6 +8,8 @@ function assert_Global(actual, expected) { assert_equals(actual.value, expected, "value"); assert_equals(actual.valueOf(), expected, "valueOf"); + assert_true(Object.is(actual.value, expected), "value Object.is"); + assert_true(Object.is(actual.valueOf(), expected), "valueOf Object.is"); } test(() => { @@ -171,8 +173,6 @@ test(() => { }, "Construct v128 global"); test(() => { - let global = new WebAssembly.Global({value: "externref"}, "initial value"); - assert_Global(global, "initial value"); for (let value of [ undefined, null, @@ -186,7 +186,7 @@ test(() => { {"an": "object"}, () => null ]) { - global.value = value; + let global = new WebAssembly.Global({value: "externref"}, value); assert_Global(global, value); } }, "externref global"); From 4cb2ba5e84534f871090d71490ab8fbb346f1fce Mon Sep 17 00:00:00 2001 From: Matthias Liedtke Date: Mon, 20 Oct 2025 13:27:58 +0200 Subject: [PATCH 3/4] Add test case for value assignment and valueOf() --- test/js-api/global/value-get-set.any.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/js-api/global/value-get-set.any.js b/test/js-api/global/value-get-set.any.js index f95b7ca9e3..c4c058285c 100644 --- a/test/js-api/global/value-get-set.any.js +++ b/test/js-api/global/value-get-set.any.js @@ -150,3 +150,24 @@ test(() => { assert_equals(setter.call(global, 1, {}), undefined); assert_equals(global.value, 1); }, "Stray argument"); + +test(() => { + let global = new WebAssembly.Global({value: "externref", mutable: true}); + for (let value of [ + undefined, + null, + true, + 1, + -0, + 1.5, + -2n, + Symbol("test"), + "string", + {"an": "object"}, + () => null + ]) { + global.value = value; + assert_equals(global.value, value); + assert_equals(global.valueOf(), value); + } +}, "externref global"); From 76ac446da4c66a6faecf0ee4b7a9b24eac0f50c2 Mon Sep 17 00:00:00 2001 From: Matthias Liedtke Date: Mon, 20 Oct 2025 13:41:18 +0200 Subject: [PATCH 4/4] remove Object.is again --- test/js-api/global/constructor.any.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/js-api/global/constructor.any.js b/test/js-api/global/constructor.any.js index f3e8f8fd78..f11ae8af6f 100644 --- a/test/js-api/global/constructor.any.js +++ b/test/js-api/global/constructor.any.js @@ -8,8 +8,6 @@ function assert_Global(actual, expected) { assert_equals(actual.value, expected, "value"); assert_equals(actual.valueOf(), expected, "valueOf"); - assert_true(Object.is(actual.value, expected), "value Object.is"); - assert_true(Object.is(actual.valueOf(), expected), "valueOf Object.is"); } test(() => {