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 <memory> 16 17#include "js_napi_common.h" 18#include "napi/native_api.h" 19#include "napi/native_common.h" 20#include "napi/native_node_api.h" 21#include "utils/log.h" 22 23namespace ACE { 24namespace NAPI { 25namespace SYSTEM_TEST_NAPI { 26static const constexpr int32_t gFinalizeHintData = 100; 27static void InstancesFinalizeCallBack(napi_env env, void* finalizeData, void* finalizeHint) 28{ 29 HILOG_INFO("%{public}s,called", __func__); 30 HILOG_INFO("%{public}s,called end.", __func__); 31} 32 33static napi_value GetModuleName(napi_env env, napi_callback_info info) 34{ 35 HILOG_INFO("%{public}s,called", __func__); 36 size_t argc = 1; 37 napi_value args[1] = { nullptr }; 38 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); 39 NAPI_ASSERT(env, argc == 0, "Wrong number of arguments."); 40 41 const char* data = nullptr; 42 NAPI_CALL(env, node_api_get_module_file_name(env, &data)); 43 std::shared_ptr<char> module(const_cast<char*>(data)); 44 napi_value jsValue = nullptr; 45 46 if (module != nullptr) { 47 HILOG_INFO("%{public}s,called moduleName = %{public}s", __func__, data); 48 NAPI_CALL(env, napi_create_string_utf8(env, data, NAPI_AUTO_LENGTH, &jsValue)); 49 } else { 50 NAPI_CALL(env, napi_get_null(env, &jsValue)); 51 } 52 53 return jsValue; 54} 55 56static napi_value SetInstanceData(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 int32_t result = 0; 65 NAPI_CALL(env, napi_get_value_int32(env, args[0], &result)); 66 NAPI_CALL(env, napi_set_instance_data(env, (void*)&result, InstancesFinalizeCallBack, (void*)&gFinalizeHintData)); 67 68 return args[0]; 69} 70 71static napi_value GetInstanceData(napi_env env, napi_callback_info info) 72{ 73 const char* moduleName = nullptr; 74 size_t argc = 1; 75 napi_value args[1] = { nullptr }; 76 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); 77 NAPI_ASSERT(env, argc == 0, "Wrong number of arguments."); 78 79 NAPI_CALL(env, node_api_get_module_file_name(env, &moduleName)); 80 napi_value jsString; 81 NAPI_CALL(env, napi_create_string_utf8(env, moduleName, NAPI_AUTO_LENGTH, &jsString)); 82 83 std::shared_ptr<char> name(const_cast<char*>(moduleName)); 84 HILOG_INFO("%{public}s,called moduleName = %{public}s", __func__, name.get()); 85 return jsString; 86} 87napi_value InstanceDataInit(napi_env env, napi_value exports) 88{ 89 HILOG_INFO("%{public}s,called", __func__); 90 napi_property_descriptor descriptors[] = { DECLARE_NAPI_FUNCTION("testGetModuleName", GetModuleName), 91 DECLARE_NAPI_FUNCTION("testSetInstanceData", SetInstanceData), 92 DECLARE_NAPI_FUNCTION("testGetInstanceData", GetInstanceData) }; 93 94 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors)); 95 96 return exports; 97} 98} // namespace SYSTEM_TEST_NAPI 99} // namespace NAPI 100} // namespace ACE