diff options
author | legendecas <legendecas@gmail.com> | 2019-09-30 09:42:58 +0800 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-10-14 16:05:58 -0700 |
commit | 6afed1dc853cf2b040502d858caadc17575a7fdf (patch) | |
tree | 4162edee603f8a83ab4afd9b2a72c3ab1cc0ff17 /test/js-native-api | |
parent | f9caee986cae09cd4cb47e0a02a5b8672ab2c16d (diff) | |
download | android-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.js | 18 | ||||
-rw-r--r-- | test/js-native-api/test_typedarray/test_typedarray.c | 19 |
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( |