summaryrefslogtreecommitdiff
path: root/test_ffi/tests/test.js
diff options
context:
space:
mode:
Diffstat (limited to 'test_ffi/tests/test.js')
-rw-r--r--test_ffi/tests/test.js24
1 files changed, 24 insertions, 0 deletions
diff --git a/test_ffi/tests/test.js b/test_ffi/tests/test.js
index d658ec169..23b46902a 100644
--- a/test_ffi/tests/test.js
+++ b/test_ffi/tests/test.js
@@ -3,6 +3,7 @@
// Run using cargo test or `--v8-options=--allow-natives-syntax`
+import { assertEquals } from "https://deno.land/std@0.149.0/testing/asserts.ts";
import {
assertThrows,
} from "../../test_util/std/testing/asserts.ts";
@@ -186,6 +187,12 @@ const dylib = Deno.dlopen(libPath, {
"static_ptr": {
type: "pointer",
},
+ /**
+ * Invalid UTF-8 characters, buffer of length 14
+ */
+ "static_char": {
+ type: "pointer",
+ },
});
const { symbols } = dylib;
@@ -478,6 +485,23 @@ uint32Array[0] = 55; // MUTATES!
console.log("uint32Array[0] after mutation:", uint32Array[0]);
console.log("Static ptr value after mutation:", view.getUint32());
+// Test non-UTF-8 characters
+
+const charView = new Deno.UnsafePointerView(dylib.symbols.static_char);
+
+const charArrayBuffer = charView.getArrayBuffer(14);
+const uint8Array = new Uint8Array(charArrayBuffer);
+assertEquals([...uint8Array], [
+ 0xC0, 0xC1, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
+ 0x00
+]);
+
+try {
+ assertThrows(() => charView.getCString(), TypeError, "Invalid CString pointer, not valid UTF-8");
+} catch (_err) {
+ console.log("Invalid UTF-8 characters to `v8::String`:", charView.getCString());
+}
+
(function cleanup() {
dylib.close();
throwCallback.close();