summaryrefslogtreecommitdiff
path: root/test/js-native-api
diff options
context:
space:
mode:
authorDenys Otrishko <shishugi@gmail.com>2019-11-23 23:08:11 +0200
committerAnna Henningsen <anna@addaleax.net>2019-11-28 15:15:36 +0100
commita1cbbd1da6d7ea9fbdbdabba6ac78b2b4cef9621 (patch)
tree65d062fb499e04babcadfaacab2a9f9fa2f67d83 /test/js-native-api
parent15146e6f3743e3df5cff8fd04677fe38efc91c94 (diff)
downloadnode-new-a1cbbd1da6d7ea9fbdbdabba6ac78b2b4cef9621.tar.gz
n-api: implement napi_is_detached_arraybuffer
This implements ArrayBuffer#IsDetachedBuffer operation as per ECMAScript specification Section 24.1.1.2 https://tc39.es/ecma262/#sec-isdetachedbuffer Closes: https://github.com/nodejs/node/issues/29955 PR-URL: https://github.com/nodejs/node/pull/30613 Fixes: https://github.com/nodejs/node/issues/29955 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Diffstat (limited to 'test/js-native-api')
-rw-r--r--test/js-native-api/test_typedarray/test.js13
-rw-r--r--test/js-native-api/test_typedarray/test_typedarray.c32
2 files changed, 45 insertions, 0 deletions
diff --git a/test/js-native-api/test_typedarray/test.js b/test/js-native-api/test_typedarray/test.js
index 5f51383254..0d9594d929 100644
--- a/test/js-native-api/test_typedarray/test.js
+++ b/test/js-native-api/test_typedarray/test.js
@@ -87,8 +87,21 @@ arrayTypes.forEach((currentType) => {
assert.ok(externalResult instanceof Int8Array);
assert.strictEqual(externalResult.length, 3);
assert.strictEqual(externalResult.byteLength, 3);
+ assert.ok(!test_typedarray.IsDetached(buffer.buffer));
test_typedarray.Detach(buffer);
+ assert.ok(test_typedarray.IsDetached(buffer.buffer));
assert.ok(externalResult instanceof Int8Array);
assert.strictEqual(buffer.length, 0);
assert.strictEqual(buffer.byteLength, 0);
}
+
+{
+ const buffer = new ArrayBuffer(128);
+ assert.ok(!test_typedarray.IsDetached(buffer));
+}
+
+{
+ const buffer = test_typedarray.NullArrayBuffer();
+ assert.ok(buffer instanceof ArrayBuffer);
+ assert.ok(test_typedarray.IsDetached(buffer));
+}
diff --git a/test/js-native-api/test_typedarray/test_typedarray.c b/test/js-native-api/test_typedarray/test_typedarray.c
index 9d7d394fca..d8b64d06c0 100644
--- a/test/js-native-api/test_typedarray/test_typedarray.c
+++ b/test/js-native-api/test_typedarray/test_typedarray.c
@@ -97,6 +97,15 @@ static napi_value External(napi_env env, napi_callback_info info) {
return output_array;
}
+
+static napi_value NullArrayBuffer(napi_env env, napi_callback_info info) {
+ static void* data = NULL;
+ napi_value arraybuffer;
+ NAPI_CALL(env,
+ napi_create_external_arraybuffer(env, data, 0, NULL, NULL, &arraybuffer));
+ return arraybuffer;
+}
+
static napi_value CreateTypedArray(napi_env env, napi_callback_info info) {
size_t argc = 4;
napi_value args[4];
@@ -183,13 +192,36 @@ static napi_value Detach(napi_env env, napi_callback_info info) {
return NULL;
}
+static napi_value IsDetached(napi_env env, napi_callback_info info) {
+ size_t argc = 1;
+ napi_value args[1];
+ NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
+ NAPI_ASSERT(env, argc == 1, "Wrong number of arguments.");
+
+ napi_value array_buffer = args[0];
+ bool is_arraybuffer;
+ NAPI_CALL(env, napi_is_arraybuffer(env, array_buffer, &is_arraybuffer));
+ NAPI_ASSERT(env, is_arraybuffer,
+ "Wrong type of arguments. Expects an array buffer as first argument.");
+
+ bool is_detached;
+ NAPI_CALL(env, napi_is_detached_arraybuffer(env, array_buffer, &is_detached));
+
+ napi_value result;
+ NAPI_CALL(env, napi_get_boolean(env, is_detached, &result));
+
+ return result;
+}
+
EXTERN_C_START
napi_value Init(napi_env env, napi_value exports) {
napi_property_descriptor descriptors[] = {
DECLARE_NAPI_PROPERTY("Multiply", Multiply),
DECLARE_NAPI_PROPERTY("External", External),
+ DECLARE_NAPI_PROPERTY("NullArrayBuffer", NullArrayBuffer),
DECLARE_NAPI_PROPERTY("CreateTypedArray", CreateTypedArray),
DECLARE_NAPI_PROPERTY("Detach", Detach),
+ DECLARE_NAPI_PROPERTY("IsDetached", IsDetached),
};
NAPI_CALL(env, napi_define_properties(