From c75f94e08b5e0f04859375c0273e83e59f3cd976 Mon Sep 17 00:00:00 2001 From: Balakrishna Avulapati Date: Sun, 29 Mar 2026 21:39:05 +0530 Subject: [PATCH 1/6] feat: port test_dataview to CTS Ports [https://github.com/nodejs/node/tree/main/test/js-native-api/test_dataview](test_dataview) from Node.js test suite to the CTS. This test contains an experimental feature `SharedArrayBuffer`, resulting in usage of `add_node_api_cts_experimental_addon()`. Signed-off-by: Balakrishna Avulapati --- CMakeLists.txt | 3 +- PORTING.md | 2 +- .../test_dataview/CMakeLists.txt | 1 + tests/js-native-api/test_dataview/test.js | 48 ++++++++ .../test_dataview/test_dataview.c | 111 ++++++++++++++++++ 5 files changed, 162 insertions(+), 3 deletions(-) create mode 100644 tests/js-native-api/test_dataview/CMakeLists.txt create mode 100644 tests/js-native-api/test_dataview/test.js create mode 100644 tests/js-native-api/test_dataview/test_dataview.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 32578ac..cf67540 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,8 +45,7 @@ function(add_node_api_cts_addon ADDON_NAME) endfunction() function(add_node_api_cts_experimental_addon ADDON_NAME) - cmake_parse_arguments(PARSE_ARGV 1 ARG "" "" "SOURCES") - add_node_api_cts_addon(${ADDON_NAME} ${ARG_SOURCES}) + add_node_api_cts_addon(${ADDON_NAME} ${ARGN}) target_compile_definitions(${ADDON_NAME} PRIVATE NAPI_EXPERIMENTAL) if(MSVC) target_link_libraries(${ADDON_NAME} PRIVATE ${NODE_API_EXPERIMENTAL_LIB}) diff --git a/PORTING.md b/PORTING.md index cce0205..71c00a2 100644 --- a/PORTING.md +++ b/PORTING.md @@ -52,7 +52,7 @@ Tests covering the engine-specific part of Node-API, defined in `js_native_api.h | `test_cannot_run_js` | Not ported | Medium | | `test_constructor` | Ported ✅ | Medium | | `test_conversions` | Not ported | Medium | -| `test_dataview` | Not ported | Medium | +| `test_dataview` | Ported ✅ | Medium | | `test_date` | Ported ✅ | Easy | | `test_error` | Ported ✅ | Medium | | `test_exception` | Not ported | Medium | diff --git a/tests/js-native-api/test_dataview/CMakeLists.txt b/tests/js-native-api/test_dataview/CMakeLists.txt new file mode 100644 index 0000000..052900e --- /dev/null +++ b/tests/js-native-api/test_dataview/CMakeLists.txt @@ -0,0 +1 @@ +add_node_api_cts_experimental_addon(test_dataview test_dataview.c) diff --git a/tests/js-native-api/test_dataview/test.js b/tests/js-native-api/test_dataview/test.js new file mode 100644 index 0000000..5de5494 --- /dev/null +++ b/tests/js-native-api/test_dataview/test.js @@ -0,0 +1,48 @@ +"use strict"; + +if (experimentalFeatures.sharedArrayBuffer) { + // Testing api calls for arrays + const test_dataview = loadAddon("test_dataview"); + + // Test for creating dataview with ArrayBuffer + { + const buffer = new ArrayBuffer(128); + const template = Reflect.construct(DataView, [buffer]); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); + } + + // Test for creating dataview with SharedArrayBuffer + { + const buffer = new SharedArrayBuffer(128); + const template = new DataView(buffer); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); + + assert.strictEqual(template.buffer, theDataview.buffer); + } + + // Test for creating dataview with ArrayBuffer and invalid range + { + const buffer = new ArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); + } + + // Test for creating dataview with SharedArrayBuffer and invalid range + { + const buffer = new SharedArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); + } +} diff --git a/tests/js-native-api/test_dataview/test_dataview.c b/tests/js-native-api/test_dataview/test_dataview.c new file mode 100644 index 0000000..ec564e6 --- /dev/null +++ b/tests/js-native-api/test_dataview/test_dataview.c @@ -0,0 +1,111 @@ +#include +#include +#include "../common.h" +#include "../entry_point.h" + +static napi_value CreateDataView(napi_env env, napi_callback_info info) { + size_t argc = 3; + napi_value args [3]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + + NODE_API_ASSERT(env, argc == 3, "Wrong number of arguments"); + + napi_valuetype valuetype0; + napi_value arraybuffer = args[0]; + + NODE_API_CALL(env, napi_typeof(env, arraybuffer, &valuetype0)); + NODE_API_ASSERT(env, valuetype0 == napi_object, + "Wrong type of arguments. Expects a ArrayBuffer as the first " + "argument."); + + bool is_arraybuffer; + NODE_API_CALL(env, napi_is_arraybuffer(env, arraybuffer, &is_arraybuffer)); + + if (!is_arraybuffer) { + bool is_sharedarraybuffer; + NODE_API_CALL( + env, + node_api_is_sharedarraybuffer(env, arraybuffer, &is_sharedarraybuffer)); + NODE_API_ASSERT(env, + is_sharedarraybuffer, + "Wrong type of arguments. Expects a SharedArrayBuffer or " + "ArrayBuffer as the first " + "argument."); + } + + napi_valuetype valuetype1; + NODE_API_CALL(env, napi_typeof(env, args[1], &valuetype1)); + + NODE_API_ASSERT(env, valuetype1 == napi_number, + "Wrong type of arguments. Expects a number as second argument."); + + size_t byte_offset = 0; + NODE_API_CALL(env, napi_get_value_uint32(env, args[1], (uint32_t*)(&byte_offset))); + + napi_valuetype valuetype2; + NODE_API_CALL(env, napi_typeof(env, args[2], &valuetype2)); + + NODE_API_ASSERT(env, valuetype2 == napi_number, + "Wrong type of arguments. Expects a number as third argument."); + + size_t length = 0; + NODE_API_CALL(env, napi_get_value_uint32(env, args[2], (uint32_t*)(&length))); + + napi_value output_dataview; + NODE_API_CALL(env, + napi_create_dataview(env, length, arraybuffer, + byte_offset, &output_dataview)); + + return output_dataview; +} + +static napi_value CreateDataViewFromJSDataView(napi_env env, napi_callback_info info) { + size_t argc = 1; + napi_value args [1]; + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); + + NODE_API_ASSERT(env, argc == 1, "Wrong number of arguments"); + + napi_valuetype valuetype; + napi_value input_dataview = args[0]; + + NODE_API_CALL(env, napi_typeof(env, input_dataview, &valuetype)); + NODE_API_ASSERT(env, valuetype == napi_object, + "Wrong type of arguments. Expects a DataView as the first " + "argument."); + + bool is_dataview; + NODE_API_CALL(env, napi_is_dataview(env, input_dataview, &is_dataview)); + NODE_API_ASSERT(env, is_dataview, + "Wrong type of arguments. Expects a DataView as the first " + "argument."); + size_t byte_offset = 0; + size_t length = 0; + napi_value buffer; + NODE_API_CALL(env, + napi_get_dataview_info(env, input_dataview, &length, NULL, + &buffer, &byte_offset)); + + napi_value output_dataview; + NODE_API_CALL(env, + napi_create_dataview(env, length, buffer, + byte_offset, &output_dataview)); + + + return output_dataview; +} + +EXTERN_C_START +napi_value Init(napi_env env, napi_value exports) { + napi_property_descriptor descriptors[] = { + DECLARE_NODE_API_PROPERTY("CreateDataView", CreateDataView), + DECLARE_NODE_API_PROPERTY("CreateDataViewFromJSDataView", + CreateDataViewFromJSDataView) + }; + + NODE_API_CALL(env, napi_define_properties( + env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors)); + + return exports; +} +EXTERN_C_END From a94ae401786f203a027aedf4d051109f45e902b1 Mon Sep 17 00:00:00 2001 From: Balakrishna Avulapati Date: Fri, 3 Apr 2026 23:29:43 +0530 Subject: [PATCH 2/6] update the experimental sharedarraybuffer availability node_api_is_sharedarraybuffer is added in v24.9.0 https://nodejs.org/api/n-api.html#node-api-is-sharedarraybuffer Signed-off-by: Balakrishna Avulapati --- implementors/node/features.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/implementors/node/features.js b/implementors/node/features.js index d06bad9..cd46f82 100644 --- a/implementors/node/features.js +++ b/implementors/node/features.js @@ -1,8 +1,14 @@ // Declares which experimental Node-API features this runtime supports. // Each key corresponds to a NODE_API_EXPERIMENTAL_HAS_* compile-time macro. // Other implementors should set unsupported features to false or omit them. + +const [major, minor] = process.version.slice(1).split('.').map(Number); + globalThis.experimentalFeatures = { - sharedArrayBuffer: true, + // node_api_is_sharedarraybuffer and node_api_create_sharedarraybuffer were + // added in Node.js v24.9.0. Earlier versions do not export these symbols, + // causing addons that reference them to fail at dlopen time. + sharedArrayBuffer: major >= 25 || (major === 24 && minor >= 9), createObjectWithProperties: true, setPrototype: true, postFinalizer: true, From 3ca85da87969fbd03b783a813bd85ec9fc3559bf Mon Sep 17 00:00:00 2001 From: Balakrishna Avulapati Date: Thu, 9 Apr 2026 10:22:22 +0530 Subject: [PATCH 3/6] use skipTest() Signed-off-by: Balakrishna Avulapati --- eslint.config.js | 2 + implementors/node/process.js | 7 ++ implementors/node/tests.ts | 8 ++ tests/js-native-api/test_dataview/test.js | 94 ++++++++++++----------- 4 files changed, 66 insertions(+), 45 deletions(-) create mode 100644 implementors/node/process.js diff --git a/eslint.config.js b/eslint.config.js index fff73c6..e02a875 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -17,6 +17,8 @@ export default defineConfig([ mustNotCall: "readonly", gcUntil: "readonly", experimentalFeatures: "readonly", + napiVersion: "readonly", + skipTest: "readonly", }, }, rules: { diff --git a/implementors/node/process.js b/implementors/node/process.js new file mode 100644 index 0000000..b1eb4b7 --- /dev/null +++ b/implementors/node/process.js @@ -0,0 +1,7 @@ +const napiVersion = Number(process.versions.napi); + +const skipTest = () => { + process.exit(0); +}; + +Object.assign(globalThis, { napiVersion, skipTest }); diff --git a/implementors/node/tests.ts b/implementors/node/tests.ts index d4f8b2c..0811aac 100644 --- a/implementors/node/tests.ts +++ b/implementors/node/tests.ts @@ -34,6 +34,12 @@ const GC_MODULE_PATH = path.join( "node", "gc.js" ); +const PROCESS_MODULE_PATH = path.join( + ROOT_PATH, + "implementors", + "node", + "process.js" +); const MUST_CALL_MODULE_PATH = path.join( ROOT_PATH, "implementors", @@ -79,6 +85,8 @@ export function runFileInSubprocess( "--import", "file://" + GC_MODULE_PATH, "--import", + "file://" + PROCESS_MODULE_PATH, + "--import", "file://" + MUST_CALL_MODULE_PATH, filePath, ], diff --git a/tests/js-native-api/test_dataview/test.js b/tests/js-native-api/test_dataview/test.js index 5de5494..2002257 100644 --- a/tests/js-native-api/test_dataview/test.js +++ b/tests/js-native-api/test_dataview/test.js @@ -1,48 +1,52 @@ "use strict"; -if (experimentalFeatures.sharedArrayBuffer) { - // Testing api calls for arrays - const test_dataview = loadAddon("test_dataview"); - - // Test for creating dataview with ArrayBuffer - { - const buffer = new ArrayBuffer(128); - const template = Reflect.construct(DataView, [buffer]); - - const theDataview = test_dataview.CreateDataViewFromJSDataView(template); - assert.ok( - theDataview instanceof DataView, - `Expect ${theDataview} to be a DataView`, - ); - } - - // Test for creating dataview with SharedArrayBuffer - { - const buffer = new SharedArrayBuffer(128); - const template = new DataView(buffer); - - const theDataview = test_dataview.CreateDataViewFromJSDataView(template); - assert.ok( - theDataview instanceof DataView, - `Expect ${theDataview} to be a DataView`, - ); - - assert.strictEqual(template.buffer, theDataview.buffer); - } - - // Test for creating dataview with ArrayBuffer and invalid range - { - const buffer = new ArrayBuffer(128); - assert.throws(() => { - test_dataview.CreateDataView(buffer, 10, 200); - }, RangeError); - } - - // Test for creating dataview with SharedArrayBuffer and invalid range - { - const buffer = new SharedArrayBuffer(128); - assert.throws(() => { - test_dataview.CreateDataView(buffer, 10, 200); - }, RangeError); - } +// The addon links node_api_is_sharedarraybuffer, which is only available +// when the sharedArrayBuffer experimental feature is supported. +if (!experimentalFeatures.sharedArrayBuffer) { + skipTest(); +} + +// Testing api calls for arrays +const test_dataview = loadAddon("test_dataview"); + +// Test for creating dataview with ArrayBuffer +{ + const buffer = new ArrayBuffer(128); + const template = Reflect.construct(DataView, [buffer]); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); +} + +// Test for creating dataview with SharedArrayBuffer +{ + const buffer = new SharedArrayBuffer(128); + const template = new DataView(buffer); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); + + assert.strictEqual(template.buffer, theDataview.buffer); +} + +// Test for creating dataview with ArrayBuffer and invalid range +{ + const buffer = new ArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); +} + +// Test for creating dataview with SharedArrayBuffer and invalid range +{ + const buffer = new SharedArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); } From c7d8c16f08a3a98d1fbea3f72544f0780e0667ca Mon Sep 17 00:00:00 2001 From: Balakrishna Avulapati Date: Thu, 9 Apr 2026 21:18:20 +0530 Subject: [PATCH 4/6] Revert "update the experimental sharedarraybuffer availability" This reverts commit a94ae401786f203a027aedf4d051109f45e902b1. --- implementors/node/features.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/implementors/node/features.js b/implementors/node/features.js index cd46f82..d06bad9 100644 --- a/implementors/node/features.js +++ b/implementors/node/features.js @@ -1,14 +1,8 @@ // Declares which experimental Node-API features this runtime supports. // Each key corresponds to a NODE_API_EXPERIMENTAL_HAS_* compile-time macro. // Other implementors should set unsupported features to false or omit them. - -const [major, minor] = process.version.slice(1).split('.').map(Number); - globalThis.experimentalFeatures = { - // node_api_is_sharedarraybuffer and node_api_create_sharedarraybuffer were - // added in Node.js v24.9.0. Earlier versions do not export these symbols, - // causing addons that reference them to fail at dlopen time. - sharedArrayBuffer: major >= 25 || (major === 24 && minor >= 9), + sharedArrayBuffer: true, createObjectWithProperties: true, setPrototype: true, postFinalizer: true, From 9ccb5fa8f4a119f6c4cd7cd575daecc2103a3413 Mon Sep 17 00:00:00 2001 From: Balakrishna Avulapati Date: Thu, 9 Apr 2026 21:22:01 +0530 Subject: [PATCH 5/6] Revert "use skipTest()" This reverts commit 3ca85da87969fbd03b783a813bd85ec9fc3559bf. --- eslint.config.js | 2 - implementors/node/process.js | 7 -- implementors/node/tests.ts | 8 -- tests/js-native-api/test_dataview/test.js | 94 +++++++++++------------ 4 files changed, 45 insertions(+), 66 deletions(-) delete mode 100644 implementors/node/process.js diff --git a/eslint.config.js b/eslint.config.js index e02a875..fff73c6 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -17,8 +17,6 @@ export default defineConfig([ mustNotCall: "readonly", gcUntil: "readonly", experimentalFeatures: "readonly", - napiVersion: "readonly", - skipTest: "readonly", }, }, rules: { diff --git a/implementors/node/process.js b/implementors/node/process.js deleted file mode 100644 index b1eb4b7..0000000 --- a/implementors/node/process.js +++ /dev/null @@ -1,7 +0,0 @@ -const napiVersion = Number(process.versions.napi); - -const skipTest = () => { - process.exit(0); -}; - -Object.assign(globalThis, { napiVersion, skipTest }); diff --git a/implementors/node/tests.ts b/implementors/node/tests.ts index 0811aac..d4f8b2c 100644 --- a/implementors/node/tests.ts +++ b/implementors/node/tests.ts @@ -34,12 +34,6 @@ const GC_MODULE_PATH = path.join( "node", "gc.js" ); -const PROCESS_MODULE_PATH = path.join( - ROOT_PATH, - "implementors", - "node", - "process.js" -); const MUST_CALL_MODULE_PATH = path.join( ROOT_PATH, "implementors", @@ -85,8 +79,6 @@ export function runFileInSubprocess( "--import", "file://" + GC_MODULE_PATH, "--import", - "file://" + PROCESS_MODULE_PATH, - "--import", "file://" + MUST_CALL_MODULE_PATH, filePath, ], diff --git a/tests/js-native-api/test_dataview/test.js b/tests/js-native-api/test_dataview/test.js index 2002257..5de5494 100644 --- a/tests/js-native-api/test_dataview/test.js +++ b/tests/js-native-api/test_dataview/test.js @@ -1,52 +1,48 @@ "use strict"; -// The addon links node_api_is_sharedarraybuffer, which is only available -// when the sharedArrayBuffer experimental feature is supported. -if (!experimentalFeatures.sharedArrayBuffer) { - skipTest(); -} - -// Testing api calls for arrays -const test_dataview = loadAddon("test_dataview"); - -// Test for creating dataview with ArrayBuffer -{ - const buffer = new ArrayBuffer(128); - const template = Reflect.construct(DataView, [buffer]); - - const theDataview = test_dataview.CreateDataViewFromJSDataView(template); - assert.ok( - theDataview instanceof DataView, - `Expect ${theDataview} to be a DataView`, - ); -} - -// Test for creating dataview with SharedArrayBuffer -{ - const buffer = new SharedArrayBuffer(128); - const template = new DataView(buffer); - - const theDataview = test_dataview.CreateDataViewFromJSDataView(template); - assert.ok( - theDataview instanceof DataView, - `Expect ${theDataview} to be a DataView`, - ); - - assert.strictEqual(template.buffer, theDataview.buffer); -} - -// Test for creating dataview with ArrayBuffer and invalid range -{ - const buffer = new ArrayBuffer(128); - assert.throws(() => { - test_dataview.CreateDataView(buffer, 10, 200); - }, RangeError); -} - -// Test for creating dataview with SharedArrayBuffer and invalid range -{ - const buffer = new SharedArrayBuffer(128); - assert.throws(() => { - test_dataview.CreateDataView(buffer, 10, 200); - }, RangeError); +if (experimentalFeatures.sharedArrayBuffer) { + // Testing api calls for arrays + const test_dataview = loadAddon("test_dataview"); + + // Test for creating dataview with ArrayBuffer + { + const buffer = new ArrayBuffer(128); + const template = Reflect.construct(DataView, [buffer]); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); + } + + // Test for creating dataview with SharedArrayBuffer + { + const buffer = new SharedArrayBuffer(128); + const template = new DataView(buffer); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); + + assert.strictEqual(template.buffer, theDataview.buffer); + } + + // Test for creating dataview with ArrayBuffer and invalid range + { + const buffer = new ArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); + } + + // Test for creating dataview with SharedArrayBuffer and invalid range + { + const buffer = new SharedArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); + } } From 0478b3baf5ae7e8e5159a7afac71985977c67b5c Mon Sep 17 00:00:00 2001 From: Balakrishna Avulapati Date: Thu, 9 Apr 2026 21:26:02 +0530 Subject: [PATCH 6/6] remove the type check in CreateDataView Signed-off-by: Balakrishna Avulapati --- .../test_dataview/CMakeLists.txt | 2 +- tests/js-native-api/test_dataview/test.js | 88 +++++++++---------- .../test_dataview/test_dataview.c | 15 ---- 3 files changed, 44 insertions(+), 61 deletions(-) diff --git a/tests/js-native-api/test_dataview/CMakeLists.txt b/tests/js-native-api/test_dataview/CMakeLists.txt index 052900e..4411f2e 100644 --- a/tests/js-native-api/test_dataview/CMakeLists.txt +++ b/tests/js-native-api/test_dataview/CMakeLists.txt @@ -1 +1 @@ -add_node_api_cts_experimental_addon(test_dataview test_dataview.c) +add_node_api_cts_addon(test_dataview test_dataview.c) diff --git a/tests/js-native-api/test_dataview/test.js b/tests/js-native-api/test_dataview/test.js index 5de5494..2953a42 100644 --- a/tests/js-native-api/test_dataview/test.js +++ b/tests/js-native-api/test_dataview/test.js @@ -1,48 +1,46 @@ "use strict"; -if (experimentalFeatures.sharedArrayBuffer) { - // Testing api calls for arrays - const test_dataview = loadAddon("test_dataview"); - - // Test for creating dataview with ArrayBuffer - { - const buffer = new ArrayBuffer(128); - const template = Reflect.construct(DataView, [buffer]); - - const theDataview = test_dataview.CreateDataViewFromJSDataView(template); - assert.ok( - theDataview instanceof DataView, - `Expect ${theDataview} to be a DataView`, - ); - } - - // Test for creating dataview with SharedArrayBuffer - { - const buffer = new SharedArrayBuffer(128); - const template = new DataView(buffer); - - const theDataview = test_dataview.CreateDataViewFromJSDataView(template); - assert.ok( - theDataview instanceof DataView, - `Expect ${theDataview} to be a DataView`, - ); - - assert.strictEqual(template.buffer, theDataview.buffer); - } - - // Test for creating dataview with ArrayBuffer and invalid range - { - const buffer = new ArrayBuffer(128); - assert.throws(() => { - test_dataview.CreateDataView(buffer, 10, 200); - }, RangeError); - } - - // Test for creating dataview with SharedArrayBuffer and invalid range - { - const buffer = new SharedArrayBuffer(128); - assert.throws(() => { - test_dataview.CreateDataView(buffer, 10, 200); - }, RangeError); - } +// Testing api calls for dataview +const test_dataview = loadAddon("test_dataview"); + +// Test for creating dataview with ArrayBuffer +{ + const buffer = new ArrayBuffer(128); + const template = Reflect.construct(DataView, [buffer]); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); +} + +// Test for creating dataview with SharedArrayBuffer +{ + const buffer = new SharedArrayBuffer(128); + const template = new DataView(buffer); + + const theDataview = test_dataview.CreateDataViewFromJSDataView(template); + assert.ok( + theDataview instanceof DataView, + `Expect ${theDataview} to be a DataView`, + ); + + assert.strictEqual(template.buffer, theDataview.buffer); +} + +// Test for creating dataview with ArrayBuffer and invalid range +{ + const buffer = new ArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); +} + +// Test for creating dataview with SharedArrayBuffer and invalid range +{ + const buffer = new SharedArrayBuffer(128); + assert.throws(() => { + test_dataview.CreateDataView(buffer, 10, 200); + }, RangeError); } diff --git a/tests/js-native-api/test_dataview/test_dataview.c b/tests/js-native-api/test_dataview/test_dataview.c index ec564e6..d6a85db 100644 --- a/tests/js-native-api/test_dataview/test_dataview.c +++ b/tests/js-native-api/test_dataview/test_dataview.c @@ -18,21 +18,6 @@ static napi_value CreateDataView(napi_env env, napi_callback_info info) { "Wrong type of arguments. Expects a ArrayBuffer as the first " "argument."); - bool is_arraybuffer; - NODE_API_CALL(env, napi_is_arraybuffer(env, arraybuffer, &is_arraybuffer)); - - if (!is_arraybuffer) { - bool is_sharedarraybuffer; - NODE_API_CALL( - env, - node_api_is_sharedarraybuffer(env, arraybuffer, &is_sharedarraybuffer)); - NODE_API_ASSERT(env, - is_sharedarraybuffer, - "Wrong type of arguments. Expects a SharedArrayBuffer or " - "ArrayBuffer as the first " - "argument."); - } - napi_valuetype valuetype1; NODE_API_CALL(env, napi_typeof(env, args[1], &valuetype1));