133eb0b6dSopenharmony_ci/* 233eb0b6dSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 333eb0b6dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 433eb0b6dSopenharmony_ci * you may not use this file except in compliance with the License. 533eb0b6dSopenharmony_ci * You may obtain a copy of the License at 633eb0b6dSopenharmony_ci * 733eb0b6dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 833eb0b6dSopenharmony_ci * 933eb0b6dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1033eb0b6dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1133eb0b6dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1233eb0b6dSopenharmony_ci * See the License for the specific language governing permissions and 1333eb0b6dSopenharmony_ci * limitations under the License. 1433eb0b6dSopenharmony_ci */ 1533eb0b6dSopenharmony_ci#include <memory> 1633eb0b6dSopenharmony_ci 1733eb0b6dSopenharmony_ci#include "js_napi_common.h" 1833eb0b6dSopenharmony_ci#include "napi/native_api.h" 1933eb0b6dSopenharmony_ci#include "napi/native_common.h" 2033eb0b6dSopenharmony_ci#include "napi/native_node_api.h" 2133eb0b6dSopenharmony_ci#include "utils/log.h" 2233eb0b6dSopenharmony_ci 2333eb0b6dSopenharmony_cinamespace ACE { 2433eb0b6dSopenharmony_cinamespace NAPI { 2533eb0b6dSopenharmony_cinamespace SYSTEM_TEST_NAPI { 2633eb0b6dSopenharmony_cistatic const constexpr int32_t gFinalizeHintData = 100; 2733eb0b6dSopenharmony_cistatic void InstancesFinalizeCallBack(napi_env env, void* finalizeData, void* finalizeHint) 2833eb0b6dSopenharmony_ci{ 2933eb0b6dSopenharmony_ci HILOG_INFO("%{public}s,called", __func__); 3033eb0b6dSopenharmony_ci HILOG_INFO("%{public}s,called end.", __func__); 3133eb0b6dSopenharmony_ci} 3233eb0b6dSopenharmony_ci 3333eb0b6dSopenharmony_cistatic napi_value GetModuleName(napi_env env, napi_callback_info info) 3433eb0b6dSopenharmony_ci{ 3533eb0b6dSopenharmony_ci HILOG_INFO("%{public}s,called", __func__); 3633eb0b6dSopenharmony_ci size_t argc = 1; 3733eb0b6dSopenharmony_ci napi_value args[1] = { nullptr }; 3833eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); 3933eb0b6dSopenharmony_ci NAPI_ASSERT(env, argc == 0, "Wrong number of arguments."); 4033eb0b6dSopenharmony_ci 4133eb0b6dSopenharmony_ci const char* data = nullptr; 4233eb0b6dSopenharmony_ci NAPI_CALL(env, node_api_get_module_file_name(env, &data)); 4333eb0b6dSopenharmony_ci std::shared_ptr<char> module(const_cast<char*>(data)); 4433eb0b6dSopenharmony_ci napi_value jsValue = nullptr; 4533eb0b6dSopenharmony_ci 4633eb0b6dSopenharmony_ci if (module != nullptr) { 4733eb0b6dSopenharmony_ci HILOG_INFO("%{public}s,called moduleName = %{public}s", __func__, data); 4833eb0b6dSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, data, NAPI_AUTO_LENGTH, &jsValue)); 4933eb0b6dSopenharmony_ci } else { 5033eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_null(env, &jsValue)); 5133eb0b6dSopenharmony_ci } 5233eb0b6dSopenharmony_ci 5333eb0b6dSopenharmony_ci return jsValue; 5433eb0b6dSopenharmony_ci} 5533eb0b6dSopenharmony_ci 5633eb0b6dSopenharmony_cistatic napi_value SetInstanceData(napi_env env, napi_callback_info info) 5733eb0b6dSopenharmony_ci{ 5833eb0b6dSopenharmony_ci HILOG_INFO("%{public}s,called", __func__); 5933eb0b6dSopenharmony_ci size_t argc = 1; 6033eb0b6dSopenharmony_ci napi_value args[1] = { nullptr }; 6133eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); 6233eb0b6dSopenharmony_ci NAPI_ASSERT(env, argc == 1, "Wrong number of arguments."); 6333eb0b6dSopenharmony_ci 6433eb0b6dSopenharmony_ci int32_t result = 0; 6533eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_value_int32(env, args[0], &result)); 6633eb0b6dSopenharmony_ci NAPI_CALL(env, napi_set_instance_data(env, (void*)&result, InstancesFinalizeCallBack, (void*)&gFinalizeHintData)); 6733eb0b6dSopenharmony_ci 6833eb0b6dSopenharmony_ci return args[0]; 6933eb0b6dSopenharmony_ci} 7033eb0b6dSopenharmony_ci 7133eb0b6dSopenharmony_cistatic napi_value GetInstanceData(napi_env env, napi_callback_info info) 7233eb0b6dSopenharmony_ci{ 7333eb0b6dSopenharmony_ci const char* moduleName = nullptr; 7433eb0b6dSopenharmony_ci size_t argc = 1; 7533eb0b6dSopenharmony_ci napi_value args[1] = { nullptr }; 7633eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); 7733eb0b6dSopenharmony_ci NAPI_ASSERT(env, argc == 0, "Wrong number of arguments."); 7833eb0b6dSopenharmony_ci 7933eb0b6dSopenharmony_ci NAPI_CALL(env, node_api_get_module_file_name(env, &moduleName)); 8033eb0b6dSopenharmony_ci napi_value jsString; 8133eb0b6dSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, moduleName, NAPI_AUTO_LENGTH, &jsString)); 8233eb0b6dSopenharmony_ci 8333eb0b6dSopenharmony_ci std::shared_ptr<char> name(const_cast<char*>(moduleName)); 8433eb0b6dSopenharmony_ci HILOG_INFO("%{public}s,called moduleName = %{public}s", __func__, name.get()); 8533eb0b6dSopenharmony_ci return jsString; 8633eb0b6dSopenharmony_ci} 8733eb0b6dSopenharmony_cinapi_value InstanceDataInit(napi_env env, napi_value exports) 8833eb0b6dSopenharmony_ci{ 8933eb0b6dSopenharmony_ci HILOG_INFO("%{public}s,called", __func__); 9033eb0b6dSopenharmony_ci napi_property_descriptor descriptors[] = { DECLARE_NAPI_FUNCTION("testGetModuleName", GetModuleName), 9133eb0b6dSopenharmony_ci DECLARE_NAPI_FUNCTION("testSetInstanceData", SetInstanceData), 9233eb0b6dSopenharmony_ci DECLARE_NAPI_FUNCTION("testGetInstanceData", GetInstanceData) }; 9333eb0b6dSopenharmony_ci 9433eb0b6dSopenharmony_ci NAPI_CALL(env, napi_define_properties(env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors)); 9533eb0b6dSopenharmony_ci 9633eb0b6dSopenharmony_ci return exports; 9733eb0b6dSopenharmony_ci} 9833eb0b6dSopenharmony_ci} // namespace SYSTEM_TEST_NAPI 9933eb0b6dSopenharmony_ci} // namespace NAPI 10033eb0b6dSopenharmony_ci} // namespace ACE