Skip to content

Commit 70aa53a

Browse files
committed
split test_dataview SharedArrayBuffer cases behind a feature flag
1 parent 1770fbb commit 70aa53a

3 files changed

Lines changed: 40 additions & 23 deletions

File tree

‎implementors/node/features.js‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Each key corresponds to a NODE_API_EXPERIMENTAL_HAS_* compile-time macro.
33
// Other implementors should set unsupported features to false or omit them.
44

5-
const [major, minor] = process.version.slice(1).split('.').map(Number);
5+
const [major, minor, patch] = process.version.slice(1).split(".").map(Number);
66

77
globalThis.experimentalFeatures = {
88
// node_api_is_sharedarraybuffer and node_api_create_sharedarraybuffer were
@@ -12,4 +12,11 @@ globalThis.experimentalFeatures = {
1212
createObjectWithProperties: true,
1313
setPrototype: true,
1414
postFinalizer: true,
15+
// napi_create_dataview accepts a SharedArrayBuffer-backed buffer only since
16+
// Node.js v24.13.1 and v25.4.0 (nodejs/node#60473). It was not backported to
17+
// v20.x or v22.x, where such calls fail with "invalid argument".
18+
dataviewSharedArrayBuffer:
19+
major > 25 ||
20+
(major === 25 && minor >= 4) ||
21+
(major === 24 && (minor > 13 || (minor === 13 && patch >= 1))),
1522
};

‎tests/js-native-api/test_dataview/test.js‎

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,10 @@ const test_dataview = loadAddon("test_dataview");
1515
);
1616
}
1717

18-
// Test for creating dataview with SharedArrayBuffer
19-
{
20-
const buffer = new SharedArrayBuffer(128);
21-
const template = new DataView(buffer);
22-
23-
const theDataview = test_dataview.CreateDataViewFromJSDataView(template);
24-
assert.ok(
25-
theDataview instanceof DataView,
26-
`Expect ${theDataview} to be a DataView`,
27-
);
28-
29-
assert.strictEqual(template.buffer, theDataview.buffer);
30-
}
31-
3218
// Test for creating dataview with ArrayBuffer and invalid range
3319
{
3420
const buffer = new ArrayBuffer(128);
3521
assert.throws(() => {
3622
test_dataview.CreateDataView(buffer, 10, 200);
3723
}, RangeError);
3824
}
39-
40-
// Test for creating dataview with SharedArrayBuffer and invalid range
41-
{
42-
const buffer = new SharedArrayBuffer(128);
43-
assert.throws(() => {
44-
test_dataview.CreateDataView(buffer, 10, 200);
45-
}, RangeError);
46-
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"use strict";
2+
3+
// napi_create_dataview accepts a SharedArrayBuffer-backed buffer only on newer
4+
// Node.js releases (see implementors/node/features.js).
5+
if (!experimentalFeatures.dataviewSharedArrayBuffer) {
6+
skipTest();
7+
}
8+
9+
// Testing api calls for dataview backed by a SharedArrayBuffer
10+
const test_dataview = loadAddon("test_dataview");
11+
12+
// Test for creating dataview with SharedArrayBuffer
13+
{
14+
const buffer = new SharedArrayBuffer(128);
15+
const template = new DataView(buffer);
16+
17+
const theDataview = test_dataview.CreateDataViewFromJSDataView(template);
18+
assert.ok(
19+
theDataview instanceof DataView,
20+
`Expect ${theDataview} to be a DataView`,
21+
);
22+
23+
assert.strictEqual(template.buffer, theDataview.buffer);
24+
}
25+
26+
// Test for creating dataview with SharedArrayBuffer and invalid range
27+
{
28+
const buffer = new SharedArrayBuffer(128);
29+
assert.throws(() => {
30+
test_dataview.CreateDataView(buffer, 10, 200);
31+
}, RangeError);
32+
}

0 commit comments

Comments
 (0)