Bug 1735858 [wpt PR 31247] - App history: make it mostly nonfunctional for opaque...
[gecko.git] / testing / web-platform / tests / encoding / encodeInto.any.js
blob69d7089006ec38cde3d2911fd67f03c5c5a7f69a
1 // META: global=window,worker
2 // META: script=/common/sab.js
5   {
6     "input": "Hi",
7     "read": 0,
8     "destinationLength": 0,
9     "written": []
10   },
11   {
12     "input": "A",
13     "read": 1,
14     "destinationLength": 10,
15     "written": [0x41]
16   },
17   {
18     "input": "\u{1D306}", // "\uD834\uDF06"
19     "read": 2,
20     "destinationLength": 4,
21     "written": [0xF0, 0x9D, 0x8C, 0x86]
22   },
23   {
24     "input": "\u{1D306}A",
25     "read": 0,
26     "destinationLength": 3,
27     "written": []
28   },
29   {
30     "input": "\uD834A\uDF06A¥Hi",
31     "read": 5,
32     "destinationLength": 10,
33     "written": [0xEF, 0xBF, 0xBD, 0x41, 0xEF, 0xBF, 0xBD, 0x41, 0xC2, 0xA5]
34   },
35   {
36     "input": "A\uDF06",
37     "read": 2,
38     "destinationLength": 4,
39     "written": [0x41, 0xEF, 0xBF, 0xBD]
40   },
41   {
42     "input": "¥¥",
43     "read": 2,
44     "destinationLength": 4,
45     "written": [0xC2, 0xA5, 0xC2, 0xA5]
46   }
47 ].forEach(testData => {
48   [
49     {
50       "bufferIncrease": 0,
51       "destinationOffset": 0,
52       "filler": 0
53     },
54     {
55       "bufferIncrease": 10,
56       "destinationOffset": 4,
57       "filler": 0
58     },
59     {
60       "bufferIncrease": 0,
61       "destinationOffset": 0,
62       "filler": 0x80
63     },
64     {
65       "bufferIncrease": 10,
66       "destinationOffset": 4,
67       "filler": 0x80
68     },
69     {
70       "bufferIncrease": 0,
71       "destinationOffset": 0,
72       "filler": "random"
73     },
74     {
75       "bufferIncrease": 10,
76       "destinationOffset": 4,
77       "filler": "random"
78     }
79   ].forEach(destinationData => {
80     ["ArrayBuffer", "SharedArrayBuffer"].forEach(arrayBufferOrSharedArrayBuffer => {
81       test(() => {
82         // Setup
83         const bufferLength = testData.destinationLength + destinationData.bufferIncrease;
84         const destinationOffset = destinationData.destinationOffset;
85         const destinationLength = testData.destinationLength;
86         const destinationFiller = destinationData.filler;
87         const encoder = new TextEncoder();
88         const buffer = createBuffer(arrayBufferOrSharedArrayBuffer, bufferLength);
89         const view = new Uint8Array(buffer, destinationOffset, destinationLength);
90         const fullView = new Uint8Array(buffer);
91         const control = new Array(bufferLength);
92         let byte = destinationFiller;
93         for (let i = 0; i < bufferLength; i++) {
94           if (destinationFiller === "random") {
95             byte = Math.floor(Math.random() * 256);
96           }
97           control[i] = byte;
98           fullView[i] = byte;
99         }
101         // It's happening
102         const result = encoder.encodeInto(testData.input, view);
104         // Basics
105         assert_equals(view.byteLength, destinationLength);
106         assert_equals(view.length, destinationLength);
108         // Remainder
109         assert_equals(result.read, testData.read);
110         assert_equals(result.written, testData.written.length);
111         for (let i = 0; i < bufferLength; i++) {
112           if (i < destinationOffset || i >= (destinationOffset + testData.written.length)) {
113             assert_equals(fullView[i], control[i]);
114           } else {
115             assert_equals(fullView[i], testData.written[i - destinationOffset]);
116           }
117         }
118       }, "encodeInto() into "  + arrayBufferOrSharedArrayBuffer + " with " + testData.input + " and destination length " + testData.destinationLength + ", offset " + destinationData.destinationOffset + ", filler " + destinationData.filler);
119     })
120   });
123 ["DataView",
124  "Int8Array",
125  "Int16Array",
126  "Int32Array",
127  "Uint16Array",
128  "Uint32Array",
129  "Uint8ClampedArray",
130  "BigInt64Array",
131  "BigUint64Array",
132  "Float32Array",
133  "Float64Array"].forEach(type => {
134   ["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => {
135     test(() => {
136       const viewInstance = new self[type](createBuffer(arrayBufferOrSharedArrayBuffer, 0));
137       assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", viewInstance));
138     }, "Invalid encodeInto() destination: " + type + ", backed by: " + arrayBufferOrSharedArrayBuffer);
139   });
142 ["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => {
143   test(() => {
144     assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", createBuffer(arrayBufferOrSharedArrayBuffer, 10)));
145   }, "Invalid encodeInto() destination: " + arrayBufferOrSharedArrayBuffer);
148 test(() => {
149   const buffer = new ArrayBuffer(10),
150         view = new Uint8Array(buffer);
151   let { read, written } = new TextEncoder().encodeInto("", view);
152   assert_equals(read, 0);
153   assert_equals(written, 0);
154   new MessageChannel().port1.postMessage(buffer, [buffer]);
155   ({ read, written } = new TextEncoder().encodeInto("", view));
156   assert_equals(read, 0);
157   assert_equals(written, 0);
158   ({ read, written } = new TextEncoder().encodeInto("test", view));
159   assert_equals(read, 0);
160   assert_equals(written, 0);
161 }, "encodeInto() and a detached output buffer");