summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/ctypes/function-definition.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/jit-test/tests/ctypes/function-definition.js
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--js/src/jit-test/tests/ctypes/function-definition.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/ctypes/function-definition.js b/js/src/jit-test/tests/ctypes/function-definition.js
new file mode 100644
index 0000000000..5882ba8891
--- /dev/null
+++ b/js/src/jit-test/tests/ctypes/function-definition.js
@@ -0,0 +1,47 @@
+load(libdir + 'asserts.js');
+
+function test() {
+ assertRangeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, []).ptr(x=>1)(1); },
+ "number of arguments does not match declaration of ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t) (expected 0, got 1)");
+
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, [1]); },
+ "the type of argument 1 is not a ctypes type (got the number 1)");
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, [ctypes.void_t]); },
+ "the type of argument 1 cannot be void or function (got ctypes.void)");
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, [ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, [])]); },
+ "the type of argument 1 cannot be void or function (got ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t))");
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, [ctypes.StructType("a")]); },
+ "the type of argument 1 must have defined size (got ctypes.StructType(\"a\"))");
+
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, [])(); },
+ "cannot construct from FunctionType; use FunctionType.ptr instead");
+
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, 1, []); },
+ "return type is not a ctypes type (got the number 1)");
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t.array(), []); },
+ "return type cannot be an array or function (got ctypes.int32_t.array())");
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t, []), []); },
+ "return type cannot be an array or function (got ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t))");
+ assertTypeErrorMessage(() => { ctypes.FunctionType(ctypes.default_abi, ctypes.StructType("a"), []); },
+ "return type must have defined size (got ctypes.StructType(\"a\"))");
+
+ let lib;
+ try {
+ lib = ctypes.open(ctypes.libraryName("m"));
+ } catch (e) {
+ }
+ if (!lib)
+ return;
+
+ let func = lib.declare("hypot",
+ ctypes.default_abi,
+ ctypes.double,
+ ctypes.double, "...");
+ assertRangeErrorMessage(() => { func(); },
+ "number of arguments does not match declaration of double hypot(double, ...) (expected 1 or more, got 0)");
+ assertTypeErrorMessage(() => { func(1, 2); },
+ "variadic argument 2 must be a CData object (got the number 2)");
+}
+
+if (typeof ctypes === "object")
+ test();