1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "js_napi_common.h"
16 #include "napi/native_api.h"
17 #include "napi/native_common.h"
18 #include "napi/native_node_api.h"
19 #include "utils/log.h"
20 namespace ACE {
21 namespace NAPI {
22 namespace SYSTEM_TEST_NAPI {
CreateArrayBuffer(napi_env env,napi_callback_info info)23 static napi_value CreateArrayBuffer(napi_env env, napi_callback_info info)
24 {
25 HILOG_INFO("%{public}s,called", __func__);
26
27 void* arrayBufferPtr = nullptr;
28 napi_value arrayBuffer = nullptr;
29 size_t arrayBufferSize = 1024*4;
30 NAPI_CALL(env, napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer));
31
32 return arrayBuffer;
33 }
34
DetachArrayBuffer(napi_env env,napi_callback_info info)35 static napi_value DetachArrayBuffer(napi_env env, napi_callback_info info)
36 {
37 HILOG_INFO("%{public}s,called", __func__);
38 size_t argc = 1;
39 napi_value args[1] = { nullptr };
40 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
41 NAPI_ASSERT(env, argc == 1, "Wrong number of arguments.");
42
43 bool isArrayBuffer = false;
44 NAPI_CALL(env, napi_is_arraybuffer(env, args[0], &isArrayBuffer));
45 HILOG_INFO("%{public}s called isArrayBuffer = %{public}s", __func__, (isArrayBuffer == true) ? "true" : "false");
46 NAPI_ASSERT(env, isArrayBuffer, "Wrong type of arguments. Expects a typedarray as first argument.");
47
48 NAPI_CALL(env, napi_detach_arraybuffer(env, args[0]));
49 HILOG_INFO("%{public}s called end", __func__);
50
51 napi_value result = 0;
52 napi_get_null(env, &result);
53 return result;
54 }
55
IsDetachedArrayBuffer(napi_env env,napi_callback_info info)56 static napi_value IsDetachedArrayBuffer(napi_env env, napi_callback_info info)
57 {
58 HILOG_INFO("%{public}s,called", __func__);
59 size_t argc = 1;
60 napi_value args[1] = { nullptr };
61 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
62 NAPI_ASSERT(env, argc == 1, "Wrong number of arguments.");
63
64 napi_value array_buffer = args[0];
65 bool isArrayBuffer = false;
66 NAPI_CALL(env, napi_is_arraybuffer(env, array_buffer, &isArrayBuffer));
67 NAPI_ASSERT(env, isArrayBuffer, "Wrong type of arguments. Expects an array buffer as first argument.");
68
69 bool isDetached = false;
70 NAPI_CALL(env, napi_is_detached_arraybuffer(env, array_buffer, &isDetached));
71
72 napi_value result = nullptr;
73 NAPI_CALL(env, napi_get_boolean(env, isDetached, &result));
74
75 return result;
76 }
77
ArrayDetachInit(napi_env env,napi_value exports)78 napi_value ArrayDetachInit(napi_env env, napi_value exports)
79 {
80 HILOG_INFO("%{public}s,called", __func__);
81
82 napi_property_descriptor descriptors[] = {
83 DECLARE_NAPI_FUNCTION("testCreateArrayBuffer", CreateArrayBuffer),
84 DECLARE_NAPI_FUNCTION("testDetachArrayBuffer", DetachArrayBuffer),
85 DECLARE_NAPI_FUNCTION("testIsDetachedArrayBuffer", IsDetachedArrayBuffer),
86 };
87
88 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors));
89
90 return exports;
91 }
92 } // namespace SYSTEM_TEST_NAPI
93 } // namespace NAPI
94 } // namespace ACE
95