summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/encoding/encodeInto.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/encoding/encodeInto.any.js')
-rw-r--r--testing/web-platform/tests/encoding/encodeInto.any.js161
1 files changed, 161 insertions, 0 deletions
diff --git a/testing/web-platform/tests/encoding/encodeInto.any.js b/testing/web-platform/tests/encoding/encodeInto.any.js
new file mode 100644
index 0000000000..69d7089006
--- /dev/null
+++ b/testing/web-platform/tests/encoding/encodeInto.any.js
@@ -0,0 +1,161 @@
+// META: global=window,worker
+// META: script=/common/sab.js
+
+[
+ {
+ "input": "Hi",
+ "read": 0,
+ "destinationLength": 0,
+ "written": []
+ },
+ {
+ "input": "A",
+ "read": 1,
+ "destinationLength": 10,
+ "written": [0x41]
+ },
+ {
+ "input": "\u{1D306}", // "\uD834\uDF06"
+ "read": 2,
+ "destinationLength": 4,
+ "written": [0xF0, 0x9D, 0x8C, 0x86]
+ },
+ {
+ "input": "\u{1D306}A",
+ "read": 0,
+ "destinationLength": 3,
+ "written": []
+ },
+ {
+ "input": "\uD834A\uDF06A¥Hi",
+ "read": 5,
+ "destinationLength": 10,
+ "written": [0xEF, 0xBF, 0xBD, 0x41, 0xEF, 0xBF, 0xBD, 0x41, 0xC2, 0xA5]
+ },
+ {
+ "input": "A\uDF06",
+ "read": 2,
+ "destinationLength": 4,
+ "written": [0x41, 0xEF, 0xBF, 0xBD]
+ },
+ {
+ "input": "¥¥",
+ "read": 2,
+ "destinationLength": 4,
+ "written": [0xC2, 0xA5, 0xC2, 0xA5]
+ }
+].forEach(testData => {
+ [
+ {
+ "bufferIncrease": 0,
+ "destinationOffset": 0,
+ "filler": 0
+ },
+ {
+ "bufferIncrease": 10,
+ "destinationOffset": 4,
+ "filler": 0
+ },
+ {
+ "bufferIncrease": 0,
+ "destinationOffset": 0,
+ "filler": 0x80
+ },
+ {
+ "bufferIncrease": 10,
+ "destinationOffset": 4,
+ "filler": 0x80
+ },
+ {
+ "bufferIncrease": 0,
+ "destinationOffset": 0,
+ "filler": "random"
+ },
+ {
+ "bufferIncrease": 10,
+ "destinationOffset": 4,
+ "filler": "random"
+ }
+ ].forEach(destinationData => {
+ ["ArrayBuffer", "SharedArrayBuffer"].forEach(arrayBufferOrSharedArrayBuffer => {
+ test(() => {
+ // Setup
+ const bufferLength = testData.destinationLength + destinationData.bufferIncrease;
+ const destinationOffset = destinationData.destinationOffset;
+ const destinationLength = testData.destinationLength;
+ const destinationFiller = destinationData.filler;
+ const encoder = new TextEncoder();
+ const buffer = createBuffer(arrayBufferOrSharedArrayBuffer, bufferLength);
+ const view = new Uint8Array(buffer, destinationOffset, destinationLength);
+ const fullView = new Uint8Array(buffer);
+ const control = new Array(bufferLength);
+ let byte = destinationFiller;
+ for (let i = 0; i < bufferLength; i++) {
+ if (destinationFiller === "random") {
+ byte = Math.floor(Math.random() * 256);
+ }
+ control[i] = byte;
+ fullView[i] = byte;
+ }
+
+ // It's happening
+ const result = encoder.encodeInto(testData.input, view);
+
+ // Basics
+ assert_equals(view.byteLength, destinationLength);
+ assert_equals(view.length, destinationLength);
+
+ // Remainder
+ assert_equals(result.read, testData.read);
+ assert_equals(result.written, testData.written.length);
+ for (let i = 0; i < bufferLength; i++) {
+ if (i < destinationOffset || i >= (destinationOffset + testData.written.length)) {
+ assert_equals(fullView[i], control[i]);
+ } else {
+ assert_equals(fullView[i], testData.written[i - destinationOffset]);
+ }
+ }
+ }, "encodeInto() into " + arrayBufferOrSharedArrayBuffer + " with " + testData.input + " and destination length " + testData.destinationLength + ", offset " + destinationData.destinationOffset + ", filler " + destinationData.filler);
+ })
+ });
+});
+
+["DataView",
+ "Int8Array",
+ "Int16Array",
+ "Int32Array",
+ "Uint16Array",
+ "Uint32Array",
+ "Uint8ClampedArray",
+ "BigInt64Array",
+ "BigUint64Array",
+ "Float32Array",
+ "Float64Array"].forEach(type => {
+ ["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => {
+ test(() => {
+ const viewInstance = new self[type](createBuffer(arrayBufferOrSharedArrayBuffer, 0));
+ assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", viewInstance));
+ }, "Invalid encodeInto() destination: " + type + ", backed by: " + arrayBufferOrSharedArrayBuffer);
+ });
+});
+
+["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => {
+ test(() => {
+ assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", createBuffer(arrayBufferOrSharedArrayBuffer, 10)));
+ }, "Invalid encodeInto() destination: " + arrayBufferOrSharedArrayBuffer);
+});
+
+test(() => {
+ const buffer = new ArrayBuffer(10),
+ view = new Uint8Array(buffer);
+ let { read, written } = new TextEncoder().encodeInto("", view);
+ assert_equals(read, 0);
+ assert_equals(written, 0);
+ new MessageChannel().port1.postMessage(buffer, [buffer]);
+ ({ read, written } = new TextEncoder().encodeInto("", view));
+ assert_equals(read, 0);
+ assert_equals(written, 0);
+ ({ read, written } = new TextEncoder().encodeInto("test", view));
+ assert_equals(read, 0);
+ assert_equals(written, 0);
+}, "encodeInto() and a detached output buffer");