MCPcopy Create free account
hub / github.com/nodejs/node-addon-api / test

Function test

test/dataview/dataview.js:8–74  ·  view source on GitHub ↗
(binding)

Source from the content-addressed store, hash-verified

6let runSharedArrayBufferTests = true;
7
8function test (binding) {
9 function testDataViewCreation (factory, arrayBuffer, offset, length) {
10 const view = factory(arrayBuffer, offset, length);
11 offset = offset || 0;
12 if (arrayBuffer instanceof ArrayBuffer) {
13 assert.ok(dataview.getArrayBuffer(view) instanceof ArrayBuffer);
14 assert.strictEqual(dataview.getArrayBuffer(view), arrayBuffer);
15 } else {
16 assert.ok(dataview.getBuffer(view) instanceof SharedArrayBuffer);
17 assert.strictEqual(dataview.getBuffer(view), arrayBuffer);
18 }
19 assert.strictEqual(dataview.getByteOffset(view), offset);
20 assert.strictEqual(dataview.getByteLength(view),
21 length || arrayBuffer.byteLength - offset);
22 }
23
24 function testInvalidRange (factory, arrayBuffer, offset, length) {
25 assert.throws(() => {
26 factory(arrayBuffer, offset, length);
27 }, RangeError);
28 }
29
30 const { hasSharedArrayBuffer, dataview } = binding;
31
32 {
33 const arrayBuffer = new ArrayBuffer(10);
34
35 testDataViewCreation(dataview.createDataView, arrayBuffer);
36 testDataViewCreation(dataview.createDataViewWithByteOffset, arrayBuffer, 2);
37 testDataViewCreation(dataview.createDataViewWithByteOffset, arrayBuffer, 10);
38 testDataViewCreation(dataview.createDataViewWithByteOffsetAndByteLength, arrayBuffer, 2, 4);
39 testDataViewCreation(dataview.createDataViewWithByteOffsetAndByteLength, arrayBuffer, 10, 0);
40
41 testInvalidRange(dataview.createDataViewWithByteOffset, arrayBuffer, 11);
42 testInvalidRange(dataview.createDataViewWithByteOffsetAndByteLength, arrayBuffer, 11, 0);
43 testInvalidRange(dataview.createDataViewWithByteOffsetAndByteLength, arrayBuffer, 6, 5);
44 }
45
46 if (hasSharedArrayBuffer && runSharedArrayBufferTests) {
47 const sab = new SharedArrayBuffer(10);
48
49 try {
50 testDataViewCreation(dataview.createDataViewOnSharedArrayBuffer, sab);
51 } catch (ex) {
52 // The `napi_create_dataview` API does not have a valid `#define`
53 // preprocessor guard for SharedArrayBuffer support, so it is
54 // possible that the API is present but creating a DataView on
55 // SharedArrayBuffer is not supported in the current version of Node.js.
56 // In that case, we should skip the test instead of throwing.
57 if (ex.message === 'Invalid argument') {
58 console.warn(`The current version of Node.js (${process.version}) does not support creating DataViews on SharedArrayBuffers; skipping tests.`);
59 runSharedArrayBufferTests = false;
60 return;
61 }
62
63 throw ex;
64 }
65 testDataViewCreation(dataview.createDataViewOnSharedArrayBufferWithByteOffset, sab, 2);

Callers

nothing calls this directly

Calls 2

testDataViewCreationFunction · 0.85
testInvalidRangeFunction · 0.85

Tested by

no test coverage detected