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 
17 namespace ACE {
18 namespace NAPI {
19 namespace SYSTEM_TEST_NAPI {
20 
IsTypeForNapiValue(napi_env env,napi_value param,napi_valuetype expectType)21 bool IsTypeForNapiValue(napi_env env, napi_value param, napi_valuetype expectType)
22 {
23     HILOG_INFO("%{public}s,called", __func__);
24     napi_valuetype valueType = napi_undefined;
25 
26     if (napi_typeof(env, param, &valueType) != napi_ok) {
27         return false;
28     }
29     return valueType == expectType;
30 }
31 
UnwrapIntValue(napi_env env,napi_value jsValue,int & result)32 bool UnwrapIntValue(napi_env env, napi_value jsValue, int& result)
33 {
34     HILOG_INFO("%{public}s,called", __func__);
35     napi_valuetype jsValueType = napi_undefined;
36     NAPI_CALL_BASE(env, napi_typeof(env, jsValue, &jsValueType), false);
37     if (jsValueType != napi_number) {
38         return false;
39     }
40     int32_t natValue32 = 0;
41     NAPI_CALL_BASE(env, napi_get_value_int32(env, jsValue, &natValue32), false);
42     result = static_cast<int>(natValue32);
43     return true;
44 }
45 
UnwrapStringParam(std::string & str,napi_env env,napi_value argv)46 napi_value UnwrapStringParam(std::string& str, napi_env env, napi_value argv)
47 {
48     HILOG_INFO("%{public}s,called", __func__);
49     napi_valuetype valueType = napi_valuetype::napi_undefined;
50 
51     napi_status rev = napi_typeof(env, argv, &valueType);
52     if (rev != napi_ok) {
53         return nullptr;
54     }
55 
56     if (valueType != napi_valuetype::napi_string) {
57         HILOG_INFO("%{public}s called, Parameter type does not match", __func__);
58         return nullptr;
59     }
60 
61     size_t len;
62     napi_status status = napi_get_value_string_utf8(env, argv, nullptr, 0, &len);
63     if (status != napi_ok) {
64         HILOG_INFO("%{public}s called, Get locale tag length failed", __func__);
65         return nullptr;
66     }
67     std::vector<char> buf(len + 1);
68     status = napi_get_value_string_utf8(env, argv, buf.data(), len + 1, &len);
69     if (status != napi_ok) {
70         HILOG_INFO("%{public}s called, Get locale tag failed", __func__);
71         return nullptr;
72     }
73     str = std::string(buf.data());
74 
75     napi_value result = nullptr;
76     NAPI_CALL(env, napi_create_int32(env, 1, &result));
77     return result;
78 }
79 } // namespace SYSTEM_TEST_NAPI
80 } // namespace NAPI
81 } // namespace ACE