summaryrefslogtreecommitdiff
path: root/test/js-native-api
diff options
context:
space:
mode:
authorlegendecas <legendecas@gmail.com>2019-09-30 09:42:58 +0800
committerRich Trott <rtrott@gmail.com>2019-10-14 16:05:58 -0700
commit6afed1dc853cf2b040502d858caadc17575a7fdf (patch)
tree4162edee603f8a83ab4afd9b2a72c3ab1cc0ff17 /test/js-native-api
parentf9caee986cae09cd4cb47e0a02a5b8672ab2c16d (diff)
downloadandroid-node-v8-6afed1dc853cf2b040502d858caadc17575a7fdf.tar.gz
android-node-v8-6afed1dc853cf2b040502d858caadc17575a7fdf.tar.bz2
android-node-v8-6afed1dc853cf2b040502d858caadc17575a7fdf.zip
n-api: add `napi_detach_arraybuffer`
As ArrayBuffer#detach is an ecma spec operation ([Section 24.1.1.3](https://tc39.es/ecma262/#sec-detacharraybuffer)), it might be good to have it in N-API. Fixes https://github.com/nodejs/node/issues/29674 PR-URL: https://github.com/nodejs/node/pull/29768 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gabriel Schulhof <gabriel.schulhof@intel.com>
Diffstat (limited to 'test/js-native-api')
-rw-r--r--test/js-native-api/test_typedarray/test.js18
-rw-r--r--test/js-native-api/test_typedarray/test_typedarray.c19
2 files changed, 37 insertions, 0 deletions
diff --git a/test/js-native-api/test_typedarray/test.js b/test/js-native-api/test_typedarray/test.js
index 91e17ecbe8..5f51383254 100644
--- a/test/js-native-api/test_typedarray/test.js
+++ b/test/js-native-api/test_typedarray/test.js
@@ -74,3 +74,21 @@ nonByteArrayTypes.forEach((currentType) => {
console.log(`start of offset ${currentType}`);
}, RangeError);
});
+
+// Test detaching
+arrayTypes.forEach((currentType) => {
+ const buffer = Reflect.construct(currentType, [8]);
+ assert.throws(
+ () => test_typedarray.Detach(buffer),
+ /A detachable arraybuffer was expected/);
+});
+{
+ const buffer = test_typedarray.External();
+ assert.ok(externalResult instanceof Int8Array);
+ assert.strictEqual(externalResult.length, 3);
+ assert.strictEqual(externalResult.byteLength, 3);
+ test_typedarray.Detach(buffer);
+ assert.ok(externalResult instanceof Int8Array);
+ assert.strictEqual(buffer.length, 0);
+ assert.strictEqual(buffer.byteLength, 0);
+}
diff --git a/test/js-native-api/test_typedarray/test_typedarray.c b/test/js-native-api/test_typedarray/test_typedarray.c
index 98480a4ea2..9d7d394fca 100644
--- a/test/js-native-api/test_typedarray/test_typedarray.c
+++ b/test/js-native-api/test_typedarray/test_typedarray.c
@@ -1,3 +1,4 @@
+#define NAPI_EXPERIMENTAL
#include <js_native_api.h>
#include <string.h>
#include "../common.h"
@@ -165,12 +166,30 @@ static napi_value CreateTypedArray(napi_env env, napi_callback_info info) {
return output_array;
}
+static napi_value Detach(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.");
+
+ bool is_typedarray;
+ NAPI_CALL(env, napi_is_typedarray(env, args[0], &is_typedarray));
+ NAPI_ASSERT(env, is_typedarray, "Wrong type of arguments. Expects a typedarray as first argument.");
+
+ napi_value arraybuffer;
+ NAPI_CALL(env, napi_get_typedarray_info(env, args[0], NULL, NULL, NULL, &arraybuffer, NULL));
+ NAPI_CALL(env, napi_detach_arraybuffer(env, arraybuffer));
+
+ return NULL;
+}
+
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("CreateTypedArray", CreateTypedArray),
+ DECLARE_NAPI_PROPERTY("Detach", Detach),
};
NAPI_CALL(env, napi_define_properties(