summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/wasm/jsapi/interface.any.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
commit0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch)
treea31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/wasm/jsapi/interface.any.js
parentInitial commit. (diff)
downloadfirefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz
firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/wasm/jsapi/interface.any.js')
-rw-r--r--testing/web-platform/tests/wasm/jsapi/interface.any.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/testing/web-platform/tests/wasm/jsapi/interface.any.js b/testing/web-platform/tests/wasm/jsapi/interface.any.js
new file mode 100644
index 0000000000..19d29ead0a
--- /dev/null
+++ b/testing/web-platform/tests/wasm/jsapi/interface.any.js
@@ -0,0 +1,160 @@
+// META: global=window,dedicatedworker,jsshell
+// META: script=/wasm/jsapi/assertions.js
+
+function test_operations(object, object_name, operations) {
+ for (const [name, length] of operations) {
+ test(() => {
+ const propdesc = Object.getOwnPropertyDescriptor(object, name);
+ assert_equals(typeof propdesc, "object");
+ assert_true(propdesc.writable, "writable");
+ assert_true(propdesc.enumerable, "enumerable");
+ assert_true(propdesc.configurable, "configurable");
+ assert_equals(propdesc.value, object[name]);
+ }, `${object_name}.${name}`);
+
+ test(() => {
+ assert_function_name(object[name], name, `${object_name}.${name}`);
+ }, `${object_name}.${name}: name`);
+
+ test(() => {
+ assert_function_length(object[name], length, `${object_name}.${name}`);
+ }, `${object_name}.${name}: length`);
+ }
+}
+
+function test_attributes(object, object_name, attributes) {
+ for (const [name, mutable] of attributes) {
+ test(() => {
+ const propdesc = Object.getOwnPropertyDescriptor(object, name);
+ assert_equals(typeof propdesc, "object");
+ assert_true(propdesc.enumerable, "enumerable");
+ assert_true(propdesc.configurable, "configurable");
+ }, `${object_name}.${name}`);
+
+ test(() => {
+ const propdesc = Object.getOwnPropertyDescriptor(object, name);
+ assert_equals(typeof propdesc, "object");
+ assert_equals(typeof propdesc.get, "function");
+ assert_function_name(propdesc.get, "get " + name, `getter for "${name}"`);
+ assert_function_length(propdesc.get, 0, `getter for "${name}"`);
+ }, `${object_name}.${name}: getter`);
+
+ test(() => {
+ const propdesc = Object.getOwnPropertyDescriptor(object, name);
+ assert_equals(typeof propdesc, "object");
+ if (mutable) {
+ assert_equals(typeof propdesc.set, "function");
+ assert_function_name(propdesc.set, "set " + name, `setter for "${name}"`);
+ assert_function_length(propdesc.set, 1, `setter for "${name}"`);
+ } else {
+ assert_equals(typeof propdesc.set, "undefined");
+ }
+ }, `${object_name}.${name}: setter`);
+ }
+}
+
+test(() => {
+ const propdesc = Object.getOwnPropertyDescriptor(this, "WebAssembly");
+ assert_equals(typeof propdesc, "object");
+ assert_true(propdesc.writable, "writable");
+ assert_false(propdesc.enumerable, "enumerable");
+ assert_true(propdesc.configurable, "configurable");
+ assert_equals(propdesc.value, this.WebAssembly);
+}, "WebAssembly: property descriptor");
+
+test(() => {
+ assert_throws_js(TypeError, () => WebAssembly());
+}, "WebAssembly: calling");
+
+test(() => {
+ assert_throws_js(TypeError, () => new WebAssembly());
+}, "WebAssembly: constructing");
+
+const interfaces = [
+ "Module",
+ "Instance",
+ "Memory",
+ "Table",
+ "Global",
+ "CompileError",
+ "LinkError",
+ "RuntimeError",
+];
+
+for (const name of interfaces) {
+ test(() => {
+ const propdesc = Object.getOwnPropertyDescriptor(WebAssembly, name);
+ assert_equals(typeof propdesc, "object");
+ assert_true(propdesc.writable, "writable");
+ assert_false(propdesc.enumerable, "enumerable");
+ assert_true(propdesc.configurable, "configurable");
+ assert_equals(propdesc.value, WebAssembly[name]);
+ }, `WebAssembly.${name}: property descriptor`);
+
+ test(() => {
+ const interface_object = WebAssembly[name];
+ const propdesc = Object.getOwnPropertyDescriptor(interface_object, "prototype");
+ assert_equals(typeof propdesc, "object");
+ assert_false(propdesc.writable, "writable");
+ assert_false(propdesc.enumerable, "enumerable");
+ assert_false(propdesc.configurable, "configurable");
+ }, `WebAssembly.${name}: prototype`);
+
+ test(() => {
+ const interface_object = WebAssembly[name];
+ const interface_prototype_object = interface_object.prototype;
+ const propdesc = Object.getOwnPropertyDescriptor(interface_prototype_object, "constructor");
+ assert_equals(typeof propdesc, "object");
+ assert_true(propdesc.writable, "writable");
+ assert_false(propdesc.enumerable, "enumerable");
+ assert_true(propdesc.configurable, "configurable");
+ assert_equals(propdesc.value, interface_object);
+ }, `WebAssembly.${name}: prototype.constructor`);
+}
+
+test_operations(WebAssembly, "WebAssembly", [
+ ["validate", 1],
+ ["compile", 1],
+ ["instantiate", 1],
+]);
+
+
+test_operations(WebAssembly.Module, "WebAssembly.Module", [
+ ["exports", 1],
+ ["imports", 1],
+ ["customSections", 2],
+]);
+
+
+test_attributes(WebAssembly.Instance.prototype, "WebAssembly.Instance", [
+ ["exports", false],
+]);
+
+
+test_operations(WebAssembly.Memory.prototype, "WebAssembly.Memory", [
+ ["grow", 1],
+]);
+
+test_attributes(WebAssembly.Memory.prototype, "WebAssembly.Memory", [
+ ["buffer", false],
+]);
+
+
+test_operations(WebAssembly.Table.prototype, "WebAssembly.Table", [
+ ["grow", 1],
+ ["get", 1],
+ ["set", 1],
+]);
+
+test_attributes(WebAssembly.Table.prototype, "WebAssembly.Table", [
+ ["length", false],
+]);
+
+
+test_operations(WebAssembly.Global.prototype, "WebAssembly.Global", [
+ ["valueOf", 0],
+]);
+
+test_attributes(WebAssembly.Global.prototype, "WebAssembly.Global", [
+ ["value", true],
+]);