133eb0b6dSopenharmony_ci/* 233eb0b6dSopenharmony_ci * Copyright (c) 2021-2024 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 1633eb0b6dSopenharmony_ci#include <chrono> 1733eb0b6dSopenharmony_ci#include <thread> 1833eb0b6dSopenharmony_ci 1933eb0b6dSopenharmony_ci#include "test.h" 2033eb0b6dSopenharmony_ci#include "test_common.h" 2133eb0b6dSopenharmony_ci#include "gtest/gtest.h" 2233eb0b6dSopenharmony_ci#include "napi/native_api.h" 2333eb0b6dSopenharmony_ci#include "napi/native_node_api.h" 2433eb0b6dSopenharmony_ci#include "napi/native_common.h" 2533eb0b6dSopenharmony_ci#include "securec.h" 2633eb0b6dSopenharmony_ci#include "utils/log.h" 2733eb0b6dSopenharmony_ci 2833eb0b6dSopenharmony_cistatic constexpr size_t TEST_STR_LENGTH = 30; 2933eb0b6dSopenharmony_ci 3033eb0b6dSopenharmony_ciclass NapiSendableTest : public NativeEngineTest { 3133eb0b6dSopenharmony_cipublic: 3233eb0b6dSopenharmony_ci static void SetUpTestCase() 3333eb0b6dSopenharmony_ci { 3433eb0b6dSopenharmony_ci GTEST_LOG_(INFO) << "NapiSendableTest SetUpTestCase"; 3533eb0b6dSopenharmony_ci } 3633eb0b6dSopenharmony_ci 3733eb0b6dSopenharmony_ci static void TearDownTestCase() 3833eb0b6dSopenharmony_ci { 3933eb0b6dSopenharmony_ci GTEST_LOG_(INFO) << "NapiSendableTest TearDownTestCase"; 4033eb0b6dSopenharmony_ci } 4133eb0b6dSopenharmony_ci 4233eb0b6dSopenharmony_ci void SetUp() override 4333eb0b6dSopenharmony_ci { 4433eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 4533eb0b6dSopenharmony_ci napi_open_handle_scope(env, &scope_); 4633eb0b6dSopenharmony_ci } 4733eb0b6dSopenharmony_ci 4833eb0b6dSopenharmony_ci void TearDown() override 4933eb0b6dSopenharmony_ci { 5033eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 5133eb0b6dSopenharmony_ci napi_value exception = nullptr; 5233eb0b6dSopenharmony_ci napi_get_and_clear_last_exception(env, &exception); 5333eb0b6dSopenharmony_ci napi_close_handle_scope(env, scope_); 5433eb0b6dSopenharmony_ci } 5533eb0b6dSopenharmony_ciprivate: 5633eb0b6dSopenharmony_ci napi_handle_scope scope_ = nullptr; 5733eb0b6dSopenharmony_ci}; 5833eb0b6dSopenharmony_ci 5933eb0b6dSopenharmony_cinapi_value GetSendableClass(napi_env env) 6033eb0b6dSopenharmony_ci{ 6133eb0b6dSopenharmony_ci auto constructor = [](napi_env env, napi_callback_info info) -> napi_value { 6233eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 6333eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 6433eb0b6dSopenharmony_ci return thisVar; 6533eb0b6dSopenharmony_ci }; 6633eb0b6dSopenharmony_ci 6733eb0b6dSopenharmony_ci napi_value static_str; 6833eb0b6dSopenharmony_ci napi_value non_static_str; 6933eb0b6dSopenharmony_ci napi_value instance_str; 7033eb0b6dSopenharmony_ci napi_create_string_utf8(env, "static", NAPI_AUTO_LENGTH, &static_str); 7133eb0b6dSopenharmony_ci napi_create_string_utf8(env, "nonStatic", NAPI_AUTO_LENGTH, &non_static_str); 7233eb0b6dSopenharmony_ci napi_create_string_utf8(env, "instance", NAPI_AUTO_LENGTH, &instance_str); 7333eb0b6dSopenharmony_ci 7433eb0b6dSopenharmony_ci napi_property_attributes napi_instance = static_cast<napi_property_attributes>(1 << 9 | 1 << 0); 7533eb0b6dSopenharmony_ci napi_property_descriptor desc[] = { DECLARE_NAPI_STATIC_PROPERTY("static", static_str), 7633eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("nonStatic", non_static_str), 7733eb0b6dSopenharmony_ci { "instance", nullptr, nullptr, nullptr, nullptr, instance_str, napi_instance, 7833eb0b6dSopenharmony_ci nullptr } }; 7933eb0b6dSopenharmony_ci 8033eb0b6dSopenharmony_ci napi_value sendableClass = nullptr; 8133eb0b6dSopenharmony_ci napi_define_sendable_class(env, "SendableClass", NAPI_AUTO_LENGTH, constructor, nullptr, 8233eb0b6dSopenharmony_ci sizeof(desc) / sizeof(desc[0]), desc, nullptr, &sendableClass); 8333eb0b6dSopenharmony_ci 8433eb0b6dSopenharmony_ci return sendableClass; 8533eb0b6dSopenharmony_ci} 8633eb0b6dSopenharmony_ci 8733eb0b6dSopenharmony_cinapi_value GetSendableChildClass(napi_env env, napi_value parentClass) 8833eb0b6dSopenharmony_ci{ 8933eb0b6dSopenharmony_ci auto constructor = [](napi_env env, napi_callback_info info) -> napi_value { 9033eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 9133eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 9233eb0b6dSopenharmony_ci return thisVar; 9333eb0b6dSopenharmony_ci }; 9433eb0b6dSopenharmony_ci 9533eb0b6dSopenharmony_ci napi_value static_str; 9633eb0b6dSopenharmony_ci napi_value non_static_str; 9733eb0b6dSopenharmony_ci napi_value instance_str; 9833eb0b6dSopenharmony_ci napi_create_string_utf8(env, "static", NAPI_AUTO_LENGTH, &static_str); 9933eb0b6dSopenharmony_ci napi_create_string_utf8(env, "nonStatic", NAPI_AUTO_LENGTH, &non_static_str); 10033eb0b6dSopenharmony_ci napi_create_string_utf8(env, "instance", NAPI_AUTO_LENGTH, &instance_str); 10133eb0b6dSopenharmony_ci 10233eb0b6dSopenharmony_ci napi_property_attributes napi_instance = static_cast<napi_property_attributes>(1 << 9 | 1 << 0); 10333eb0b6dSopenharmony_ci napi_property_descriptor desc[] = { DECLARE_NAPI_STATIC_PROPERTY("static", static_str), 10433eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("nonStatic", non_static_str), 10533eb0b6dSopenharmony_ci { "instance", nullptr, nullptr, nullptr, nullptr, instance_str, napi_instance, 10633eb0b6dSopenharmony_ci nullptr } }; 10733eb0b6dSopenharmony_ci 10833eb0b6dSopenharmony_ci napi_value childClass = nullptr; 10933eb0b6dSopenharmony_ci napi_define_sendable_class(env, "SendableClass", NAPI_AUTO_LENGTH, constructor, nullptr, 11033eb0b6dSopenharmony_ci sizeof(desc) / sizeof(desc[0]), desc, parentClass, &childClass); 11133eb0b6dSopenharmony_ci 11233eb0b6dSopenharmony_ci return childClass; 11333eb0b6dSopenharmony_ci} 11433eb0b6dSopenharmony_ci 11533eb0b6dSopenharmony_cinapi_value GetSendableParentClass(napi_env env) 11633eb0b6dSopenharmony_ci{ 11733eb0b6dSopenharmony_ci auto constructor = [](napi_env env, napi_callback_info info) -> napi_value { 11833eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 11933eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 12033eb0b6dSopenharmony_ci return thisVar; 12133eb0b6dSopenharmony_ci }; 12233eb0b6dSopenharmony_ci 12333eb0b6dSopenharmony_ci napi_value parent_static_str; 12433eb0b6dSopenharmony_ci napi_value parent_non_static_str; 12533eb0b6dSopenharmony_ci napi_value parent_instance_str; 12633eb0b6dSopenharmony_ci napi_create_string_utf8(env, "parentStatic", NAPI_AUTO_LENGTH, &parent_static_str); 12733eb0b6dSopenharmony_ci napi_create_string_utf8(env, "parentNonStatic", NAPI_AUTO_LENGTH, &parent_non_static_str); 12833eb0b6dSopenharmony_ci napi_create_string_utf8(env, "parentInstance", NAPI_AUTO_LENGTH, &parent_instance_str); 12933eb0b6dSopenharmony_ci 13033eb0b6dSopenharmony_ci napi_property_attributes napi_instance = static_cast<napi_property_attributes>(1 << 9 | 1 << 0); 13133eb0b6dSopenharmony_ci napi_property_descriptor parentDesc[] = { DECLARE_NAPI_STATIC_PROPERTY("parentStatic", parent_static_str), 13233eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("parentNonStatic", parent_non_static_str), 13333eb0b6dSopenharmony_ci { "parentInstance", nullptr, nullptr, nullptr, nullptr, 13433eb0b6dSopenharmony_ci parent_instance_str, napi_instance, nullptr } }; 13533eb0b6dSopenharmony_ci 13633eb0b6dSopenharmony_ci napi_value parentClass = nullptr; 13733eb0b6dSopenharmony_ci napi_define_sendable_class(env, "ParentClass", NAPI_AUTO_LENGTH, constructor, nullptr, 13833eb0b6dSopenharmony_ci sizeof(parentDesc) / sizeof(parentDesc[0]), parentDesc, nullptr, &parentClass); 13933eb0b6dSopenharmony_ci 14033eb0b6dSopenharmony_ci return parentClass; 14133eb0b6dSopenharmony_ci} 14233eb0b6dSopenharmony_ci 14333eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, IsSendableTest001, testing::ext::TestSize.Level1) 14433eb0b6dSopenharmony_ci{ 14533eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 14633eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 14733eb0b6dSopenharmony_ci napi_status res = napi_ok; 14833eb0b6dSopenharmony_ci 14933eb0b6dSopenharmony_ci res = napi_create_sendable_map(env, nullptr); 15033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 15133eb0b6dSopenharmony_ci 15233eb0b6dSopenharmony_ci napi_value result = nullptr; 15333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_map(env, &result)); 15433eb0b6dSopenharmony_ci 15533eb0b6dSopenharmony_ci bool isShared = false; 15633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_is_sendable(env, result, &isShared)); 15733eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 15833eb0b6dSopenharmony_ci} 15933eb0b6dSopenharmony_ci 16033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, IsSendableTest002, testing::ext::TestSize.Level1) 16133eb0b6dSopenharmony_ci{ 16233eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 16333eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 16433eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 16533eb0b6dSopenharmony_ci napi_status res = napi_ok; 16633eb0b6dSopenharmony_ci 16733eb0b6dSopenharmony_ci void *data; 16833eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 16933eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 17033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 17133eb0b6dSopenharmony_ci 17233eb0b6dSopenharmony_ci bool isShared = false; 17333eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 17433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 17533eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 17633eb0b6dSopenharmony_ci} 17733eb0b6dSopenharmony_ci 17833eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SendableClassTest001, testing::ext::TestSize.Level1) 17933eb0b6dSopenharmony_ci{ 18033eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 18133eb0b6dSopenharmony_ci 18233eb0b6dSopenharmony_ci auto constructor = [](napi_env env, napi_callback_info info) -> napi_value { 18333eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 18433eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 18533eb0b6dSopenharmony_ci return thisVar; 18633eb0b6dSopenharmony_ci }; 18733eb0b6dSopenharmony_ci 18833eb0b6dSopenharmony_ci napi_value static_str; 18933eb0b6dSopenharmony_ci napi_value non_static_str; 19033eb0b6dSopenharmony_ci napi_value name_str; 19133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "static", NAPI_AUTO_LENGTH, &static_str)); 19233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "nonStatic", NAPI_AUTO_LENGTH, &non_static_str)); 19333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "name", NAPI_AUTO_LENGTH, &name_str)); 19433eb0b6dSopenharmony_ci 19533eb0b6dSopenharmony_ci napi_property_descriptor desc[] = { 19633eb0b6dSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("static", static_str), 19733eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("nonStatic", non_static_str), 19833eb0b6dSopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("staticFunc", 19933eb0b6dSopenharmony_ci [](napi_env env, napi_callback_info info) -> napi_value { return nullptr; }), 20033eb0b6dSopenharmony_ci DECLARE_NAPI_FUNCTION("func", [](napi_env env, napi_callback_info info) -> napi_value { return nullptr; }), 20133eb0b6dSopenharmony_ci DECLARE_NAPI_GETTER_SETTER( 20233eb0b6dSopenharmony_ci "getterSetter", [](napi_env env, napi_callback_info info) -> napi_value { return nullptr; }, 20333eb0b6dSopenharmony_ci [](napi_env env, napi_callback_info info) -> napi_value { return nullptr; }), 20433eb0b6dSopenharmony_ci }; 20533eb0b6dSopenharmony_ci 20633eb0b6dSopenharmony_ci napi_value sendableClass = nullptr; 20733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_define_sendable_class(env, "SendableClass", NAPI_AUTO_LENGTH, constructor, nullptr, 20833eb0b6dSopenharmony_ci sizeof(desc) / sizeof(desc[0]), desc, nullptr, &sendableClass)); 20933eb0b6dSopenharmony_ci 21033eb0b6dSopenharmony_ci napi_value value = nullptr; 21133eb0b6dSopenharmony_ci char* str = new char[TEST_STR_LENGTH]; 21233eb0b6dSopenharmony_ci size_t length; 21333eb0b6dSopenharmony_ci 21433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableClass, name_str, &value)); 21533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 21633eb0b6dSopenharmony_ci ASSERT_STREQ("SendableClass", str); 21733eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, sendableClass, napi_function); 21833eb0b6dSopenharmony_ci} 21933eb0b6dSopenharmony_ci 22033eb0b6dSopenharmony_ci 22133eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SendableClassTest002, testing::ext::TestSize.Level1) 22233eb0b6dSopenharmony_ci{ 22333eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 22433eb0b6dSopenharmony_ci 22533eb0b6dSopenharmony_ci auto constructor = [](napi_env env, napi_callback_info info) -> napi_value { 22633eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 22733eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 22833eb0b6dSopenharmony_ci return thisVar; 22933eb0b6dSopenharmony_ci }; 23033eb0b6dSopenharmony_ci 23133eb0b6dSopenharmony_ci napi_value static_str; 23233eb0b6dSopenharmony_ci napi_value non_static_str; 23333eb0b6dSopenharmony_ci napi_value invalid_str; 23433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "static", NAPI_AUTO_LENGTH, &static_str)); 23533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "nonStatic", NAPI_AUTO_LENGTH, &non_static_str)); 23633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "invalid", NAPI_AUTO_LENGTH, &invalid_str)); 23733eb0b6dSopenharmony_ci 23833eb0b6dSopenharmony_ci napi_property_attributes napi_writable_static = static_cast<napi_property_attributes>(napi_static | napi_writable); 23933eb0b6dSopenharmony_ci napi_property_descriptor desc[] = { 24033eb0b6dSopenharmony_ci { "static", nullptr, nullptr, nullptr, nullptr, static_str, napi_writable_static, nullptr }, 24133eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("nonStatic", non_static_str), 24233eb0b6dSopenharmony_ci }; 24333eb0b6dSopenharmony_ci 24433eb0b6dSopenharmony_ci napi_value sendableClass = nullptr; 24533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_define_sendable_class(env, "SendableClass", NAPI_AUTO_LENGTH, constructor, nullptr, 24633eb0b6dSopenharmony_ci sizeof(desc) / sizeof(desc[0]), desc, nullptr, &sendableClass)); 24733eb0b6dSopenharmony_ci 24833eb0b6dSopenharmony_ci napi_value value = nullptr; 24933eb0b6dSopenharmony_ci char* str = new char[TEST_STR_LENGTH]; 25033eb0b6dSopenharmony_ci size_t length; 25133eb0b6dSopenharmony_ci 25233eb0b6dSopenharmony_ci // get static property from constructor 25333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableClass, static_str, &value)); 25433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 25533eb0b6dSopenharmony_ci ASSERT_STREQ("static", str); 25633eb0b6dSopenharmony_ci // get invalid property from constructor 25733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableClass, invalid_str, &value)); 25833eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_undefined); 25933eb0b6dSopenharmony_ci 26033eb0b6dSopenharmony_ci napi_value static_value; 26133eb0b6dSopenharmony_ci napi_value non_static_value; 26233eb0b6dSopenharmony_ci napi_value invalid_value; 26333eb0b6dSopenharmony_ci napi_value exception = nullptr; 26433eb0b6dSopenharmony_ci bool isExceptionPending = false; 26533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "static0", NAPI_AUTO_LENGTH, &static_value)); 26633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "nonStatic0", NAPI_AUTO_LENGTH, &non_static_value)); 26733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "invalid", NAPI_AUTO_LENGTH, &invalid_value)); 26833eb0b6dSopenharmony_ci 26933eb0b6dSopenharmony_ci // set static property on constructor 27033eb0b6dSopenharmony_ci napi_set_property(env, sendableClass, static_str, static_value); 27133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableClass, static_str, &value)); 27233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 27333eb0b6dSopenharmony_ci ASSERT_STREQ("static0", str); 27433eb0b6dSopenharmony_ci 27533eb0b6dSopenharmony_ci // set invalid property on constructor 27633eb0b6dSopenharmony_ci napi_is_exception_pending(env, &isExceptionPending); 27733eb0b6dSopenharmony_ci ASSERT_FALSE(isExceptionPending); 27833eb0b6dSopenharmony_ci napi_set_property(env, sendableClass, invalid_str, invalid_value); 27933eb0b6dSopenharmony_ci napi_is_exception_pending(env, &isExceptionPending); 28033eb0b6dSopenharmony_ci ASSERT_TRUE(isExceptionPending); 28133eb0b6dSopenharmony_ci napi_get_and_clear_last_exception(env, &exception); 28233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableClass, invalid_str, &value)); 28333eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_undefined); 28433eb0b6dSopenharmony_ci} 28533eb0b6dSopenharmony_ci 28633eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SendableClassTest003, testing::ext::TestSize.Level1) 28733eb0b6dSopenharmony_ci{ 28833eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 28933eb0b6dSopenharmony_ci 29033eb0b6dSopenharmony_ci napi_value sendableClass = GetSendableClass(env); 29133eb0b6dSopenharmony_ci napi_value non_static_str; 29233eb0b6dSopenharmony_ci napi_value invalid_str; 29333eb0b6dSopenharmony_ci napi_value instance_str; 29433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "nonStatic", NAPI_AUTO_LENGTH, &non_static_str)); 29533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "invalid", NAPI_AUTO_LENGTH, &invalid_str)); 29633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "instance", NAPI_AUTO_LENGTH, &instance_str)); 29733eb0b6dSopenharmony_ci 29833eb0b6dSopenharmony_ci // new instance 29933eb0b6dSopenharmony_ci napi_value sendableInstance = nullptr; 30033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_new_instance(env, sendableClass, 0, nullptr, &sendableInstance)); 30133eb0b6dSopenharmony_ci bool isInstanceOf = false; 30233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_instanceof(env, sendableInstance, sendableClass, &isInstanceOf)); 30333eb0b6dSopenharmony_ci ASSERT_TRUE(isInstanceOf); 30433eb0b6dSopenharmony_ci 30533eb0b6dSopenharmony_ci // get prototype 30633eb0b6dSopenharmony_ci napi_value prototype = nullptr; 30733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_prototype(env, sendableInstance, &prototype)); 30833eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, prototype, napi_object); 30933eb0b6dSopenharmony_ci 31033eb0b6dSopenharmony_ci napi_value value = nullptr; 31133eb0b6dSopenharmony_ci char* str = new char[TEST_STR_LENGTH]; 31233eb0b6dSopenharmony_ci size_t length; 31333eb0b6dSopenharmony_ci napi_value instance_value; 31433eb0b6dSopenharmony_ci napi_value non_static_value; 31533eb0b6dSopenharmony_ci napi_value invalid_value; 31633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "instance", NAPI_AUTO_LENGTH, &instance_value)); 31733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "nonStatic0", NAPI_AUTO_LENGTH, &non_static_value)); 31833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "invalid", NAPI_AUTO_LENGTH, &invalid_value)); 31933eb0b6dSopenharmony_ci 32033eb0b6dSopenharmony_ci // get initial instance property 32133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, instance_str, &value)); 32233eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_undefined); 32333eb0b6dSopenharmony_ci // set instance property 32433eb0b6dSopenharmony_ci napi_set_property(env, sendableInstance, instance_str, instance_value); 32533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, instance_str, &value)); 32633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 32733eb0b6dSopenharmony_ci ASSERT_STREQ("instance", str); 32833eb0b6dSopenharmony_ci 32933eb0b6dSopenharmony_ci // get non static property from instance 33033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, non_static_str, &value)); 33133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 33233eb0b6dSopenharmony_ci ASSERT_STREQ("nonStatic", str); 33333eb0b6dSopenharmony_ci // set non static property on prototype and get from instance 33433eb0b6dSopenharmony_ci napi_set_property(env, prototype, non_static_str, non_static_value); 33533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, non_static_str, &value)); 33633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 33733eb0b6dSopenharmony_ci ASSERT_STREQ("nonStatic0", str); 33833eb0b6dSopenharmony_ci} 33933eb0b6dSopenharmony_ci 34033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SendableClassTest004, testing::ext::TestSize.Level1) 34133eb0b6dSopenharmony_ci{ 34233eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 34333eb0b6dSopenharmony_ci 34433eb0b6dSopenharmony_ci napi_value sendableClass = GetSendableClass(env); 34533eb0b6dSopenharmony_ci napi_value non_static_str; 34633eb0b6dSopenharmony_ci napi_value invalid_str; 34733eb0b6dSopenharmony_ci napi_value instance_str; 34833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "nonStatic", NAPI_AUTO_LENGTH, &non_static_str)); 34933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "invalid", NAPI_AUTO_LENGTH, &invalid_str)); 35033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "instance", NAPI_AUTO_LENGTH, &instance_str)); 35133eb0b6dSopenharmony_ci 35233eb0b6dSopenharmony_ci // new instance 35333eb0b6dSopenharmony_ci napi_value sendableInstance = nullptr; 35433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_new_instance(env, sendableClass, 0, nullptr, &sendableInstance)); 35533eb0b6dSopenharmony_ci bool isInstanceOf = false; 35633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_instanceof(env, sendableInstance, sendableClass, &isInstanceOf)); 35733eb0b6dSopenharmony_ci ASSERT_TRUE(isInstanceOf); 35833eb0b6dSopenharmony_ci 35933eb0b6dSopenharmony_ci napi_value value = nullptr; 36033eb0b6dSopenharmony_ci char* str = new char[TEST_STR_LENGTH]; 36133eb0b6dSopenharmony_ci size_t length; 36233eb0b6dSopenharmony_ci napi_value non_static_value; 36333eb0b6dSopenharmony_ci napi_value invalid_value; 36433eb0b6dSopenharmony_ci napi_value exception = nullptr; 36533eb0b6dSopenharmony_ci bool isExceptionPending = false; 36633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "nonStatic0", NAPI_AUTO_LENGTH, &non_static_value)); 36733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "invalid", NAPI_AUTO_LENGTH, &invalid_value)); 36833eb0b6dSopenharmony_ci 36933eb0b6dSopenharmony_ci // set non static property on instance 37033eb0b6dSopenharmony_ci napi_is_exception_pending(env, &isExceptionPending); 37133eb0b6dSopenharmony_ci ASSERT_FALSE(isExceptionPending); 37233eb0b6dSopenharmony_ci napi_set_property(env, sendableInstance, non_static_str, non_static_value); 37333eb0b6dSopenharmony_ci napi_is_exception_pending(env, &isExceptionPending); 37433eb0b6dSopenharmony_ci ASSERT_TRUE(isExceptionPending); 37533eb0b6dSopenharmony_ci napi_get_and_clear_last_exception(env, &exception); 37633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, non_static_str, &value)); 37733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 37833eb0b6dSopenharmony_ci ASSERT_STREQ("nonStatic", str); 37933eb0b6dSopenharmony_ci 38033eb0b6dSopenharmony_ci // set invalid property on instance 38133eb0b6dSopenharmony_ci napi_is_exception_pending(env, &isExceptionPending); 38233eb0b6dSopenharmony_ci ASSERT_FALSE(isExceptionPending); 38333eb0b6dSopenharmony_ci napi_set_property(env, sendableInstance, invalid_str, invalid_value); 38433eb0b6dSopenharmony_ci napi_is_exception_pending(env, &isExceptionPending); 38533eb0b6dSopenharmony_ci ASSERT_TRUE(isExceptionPending); 38633eb0b6dSopenharmony_ci napi_get_and_clear_last_exception(env, &exception); 38733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, invalid_str, &value)); 38833eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_undefined); 38933eb0b6dSopenharmony_ci} 39033eb0b6dSopenharmony_ci 39133eb0b6dSopenharmony_ci 39233eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SendableClassTest005, testing::ext::TestSize.Level1) 39333eb0b6dSopenharmony_ci{ 39433eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 39533eb0b6dSopenharmony_ci 39633eb0b6dSopenharmony_ci napi_value parentClass = GetSendableParentClass(env); 39733eb0b6dSopenharmony_ci napi_value sendableClass = GetSendableChildClass(env, parentClass); 39833eb0b6dSopenharmony_ci napi_value parent_static_str; 39933eb0b6dSopenharmony_ci napi_value parent_non_static_str; 40033eb0b6dSopenharmony_ci napi_value parent_instance_str; 40133eb0b6dSopenharmony_ci napi_create_string_utf8(env, "parentStatic", NAPI_AUTO_LENGTH, &parent_static_str); 40233eb0b6dSopenharmony_ci napi_create_string_utf8(env, "parentNonStatic", NAPI_AUTO_LENGTH, &parent_non_static_str); 40333eb0b6dSopenharmony_ci napi_create_string_utf8(env, "parentInstance", NAPI_AUTO_LENGTH, &parent_instance_str); 40433eb0b6dSopenharmony_ci 40533eb0b6dSopenharmony_ci // new instance 40633eb0b6dSopenharmony_ci napi_value sendableInstance = nullptr; 40733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_new_instance(env, sendableClass, 0, nullptr, &sendableInstance)); 40833eb0b6dSopenharmony_ci bool isInstanceOf = false; 40933eb0b6dSopenharmony_ci bool isInstanceOfParent = false; 41033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_instanceof(env, sendableInstance, sendableClass, &isInstanceOf)); 41133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_instanceof(env, sendableInstance, parentClass, &isInstanceOfParent)); 41233eb0b6dSopenharmony_ci ASSERT_TRUE(isInstanceOf); 41333eb0b6dSopenharmony_ci ASSERT_TRUE(isInstanceOfParent); 41433eb0b6dSopenharmony_ci 41533eb0b6dSopenharmony_ci napi_value value = nullptr; 41633eb0b6dSopenharmony_ci char* str = new char[TEST_STR_LENGTH]; 41733eb0b6dSopenharmony_ci size_t length; 41833eb0b6dSopenharmony_ci napi_value parent_instance_value; 41933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "parentInstance", NAPI_AUTO_LENGTH, &parent_instance_value)); 42033eb0b6dSopenharmony_ci 42133eb0b6dSopenharmony_ci // get parent instance property on instance 42233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, parent_instance_str, &value)); 42333eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_undefined); 42433eb0b6dSopenharmony_ci // set parent instance property on instance 42533eb0b6dSopenharmony_ci napi_set_property(env, sendableInstance, parent_instance_str, parent_instance_value); 42633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, parent_instance_str, &value)); 42733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 42833eb0b6dSopenharmony_ci ASSERT_STREQ("parentInstance", str); 42933eb0b6dSopenharmony_ci 43033eb0b6dSopenharmony_ci // get parent static property from constructor 43133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableClass, parent_static_str, &value)); 43233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 43333eb0b6dSopenharmony_ci ASSERT_STREQ("parentStatic", str); 43433eb0b6dSopenharmony_ci 43533eb0b6dSopenharmony_ci // get parent non static property from instance 43633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_property(env, sendableInstance, parent_non_static_str, &value)); 43733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_string_utf8(env, value, str, TEST_STR_LENGTH, &length)); 43833eb0b6dSopenharmony_ci ASSERT_STREQ("parentNonStatic", str); 43933eb0b6dSopenharmony_ci} 44033eb0b6dSopenharmony_ci 44133eb0b6dSopenharmony_ci/** 44233eb0b6dSopenharmony_ci * @tc.name: CreateSendableMap001 44333eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_map. 44433eb0b6dSopenharmony_ci * @tc.type: FUNC 44533eb0b6dSopenharmony_ci */ 44633eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableMap001, testing::ext::TestSize.Level1) 44733eb0b6dSopenharmony_ci{ 44833eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 44933eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 45033eb0b6dSopenharmony_ci napi_status res = napi_ok; 45133eb0b6dSopenharmony_ci 45233eb0b6dSopenharmony_ci res = napi_create_sendable_map(env, nullptr); 45333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 45433eb0b6dSopenharmony_ci 45533eb0b6dSopenharmony_ci napi_value result = nullptr; 45633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_map(env, &result)); 45733eb0b6dSopenharmony_ci 45833eb0b6dSopenharmony_ci bool isShared = false; 45933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_is_sendable(env, result, &isShared)); 46033eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 46133eb0b6dSopenharmony_ci 46233eb0b6dSopenharmony_ci bool isMap = false; 46333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_is_map(env, result, &isMap)); 46433eb0b6dSopenharmony_ci ASSERT_EQ(isMap, true); 46533eb0b6dSopenharmony_ci} 46633eb0b6dSopenharmony_ci 46733eb0b6dSopenharmony_ci/** 46833eb0b6dSopenharmony_ci * @tc.name: CreateSendableMap002 46933eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_map. 47033eb0b6dSopenharmony_ci * @tc.type: FUNC 47133eb0b6dSopenharmony_ci */ 47233eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableMap002, testing::ext::TestSize.Level1) 47333eb0b6dSopenharmony_ci{ 47433eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 47533eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 47633eb0b6dSopenharmony_ci 47733eb0b6dSopenharmony_ci napi_value result = nullptr; 47833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_map(env, &result)); 47933eb0b6dSopenharmony_ci 48033eb0b6dSopenharmony_ci uint32_t length = 0; 48133eb0b6dSopenharmony_ci napi_value value = nullptr; 48233eb0b6dSopenharmony_ci bool hasKey = false; 48333eb0b6dSopenharmony_ci 48433eb0b6dSopenharmony_ci napi_value key = nullptr; 48533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_string_utf8(env, "null", NAPI_AUTO_LENGTH, &key)); 48633eb0b6dSopenharmony_ci napi_value null = nullptr; 48733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_null(env, &null)); 48833eb0b6dSopenharmony_ci napi_value undefined = nullptr; 48933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_undefined(env, &undefined)); 49033eb0b6dSopenharmony_ci 49133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_set_property(env, result, key, null)); 49233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_size(env, result, &length)); 49333eb0b6dSopenharmony_ci ASSERT_EQ(length, 1); 49433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_has_property(env, result, key, &hasKey)); 49533eb0b6dSopenharmony_ci ASSERT_TRUE(hasKey); 49633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_property(env, result, key, &value)); 49733eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_null); 49833eb0b6dSopenharmony_ci 49933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_delete_property(env, result, key)); 50033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_size(env, result, &length)); 50133eb0b6dSopenharmony_ci ASSERT_EQ(length, 0); 50233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_has_property(env, result, key, &hasKey)); 50333eb0b6dSopenharmony_ci ASSERT_FALSE(hasKey); 50433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_property(env, result, key, &value)); 50533eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_undefined); 50633eb0b6dSopenharmony_ci} 50733eb0b6dSopenharmony_ci 50833eb0b6dSopenharmony_ci/** 50933eb0b6dSopenharmony_ci * @tc.name: CreateSendableMap003 51033eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_map. 51133eb0b6dSopenharmony_ci * @tc.type: FUNC 51233eb0b6dSopenharmony_ci */ 51333eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableMap003, testing::ext::TestSize.Level1) 51433eb0b6dSopenharmony_ci{ 51533eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 51633eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 51733eb0b6dSopenharmony_ci 51833eb0b6dSopenharmony_ci napi_value result = nullptr; 51933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_map(env, &result)); 52033eb0b6dSopenharmony_ci 52133eb0b6dSopenharmony_ci uint32_t length = 0; 52233eb0b6dSopenharmony_ci napi_value value = nullptr; 52333eb0b6dSopenharmony_ci bool hasKey = false; 52433eb0b6dSopenharmony_ci 52533eb0b6dSopenharmony_ci const char* key = "null"; 52633eb0b6dSopenharmony_ci napi_value null = nullptr; 52733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_null(env, &null)); 52833eb0b6dSopenharmony_ci napi_value undefined = nullptr; 52933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_undefined(env, &undefined)); 53033eb0b6dSopenharmony_ci 53133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_set_named_property(env, result, key, null)); 53233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_size(env, result, &length)); 53333eb0b6dSopenharmony_ci ASSERT_EQ(length, 1); 53433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_has_named_property(env, result, key, &hasKey)); 53533eb0b6dSopenharmony_ci ASSERT_TRUE(hasKey); 53633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_named_property(env, result, key, &value)); 53733eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_null); 53833eb0b6dSopenharmony_ci 53933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_clear(env, result)); 54033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_size(env, result, &length)); 54133eb0b6dSopenharmony_ci ASSERT_EQ(length, 0); 54233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_has_named_property(env, result, key, &hasKey)); 54333eb0b6dSopenharmony_ci ASSERT_FALSE(hasKey); 54433eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_named_property(env, result, key, &value)); 54533eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, value, napi_undefined); 54633eb0b6dSopenharmony_ci 54733eb0b6dSopenharmony_ci bool isExceptionPending = false; 54833eb0b6dSopenharmony_ci napi_is_exception_pending(env, &isExceptionPending); 54933eb0b6dSopenharmony_ci ASSERT_FALSE(isExceptionPending); 55033eb0b6dSopenharmony_ci 55133eb0b6dSopenharmony_ci napi_value object = nullptr; 55233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_object(env, &object)); 55333eb0b6dSopenharmony_ci napi_status res = napi_map_set_named_property(env, result, key, object); 55433eb0b6dSopenharmony_ci ASSERT_TRUE(res == napi_pending_exception); 55533eb0b6dSopenharmony_ci} 55633eb0b6dSopenharmony_ci 55733eb0b6dSopenharmony_ci/** 55833eb0b6dSopenharmony_ci * @tc.name: CreateSendableMap004 55933eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_map. 56033eb0b6dSopenharmony_ci * @tc.type: FUNC 56133eb0b6dSopenharmony_ci */ 56233eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableMap004, testing::ext::TestSize.Level1) 56333eb0b6dSopenharmony_ci{ 56433eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 56533eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 56633eb0b6dSopenharmony_ci 56733eb0b6dSopenharmony_ci napi_value map = nullptr; 56833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_map(env, &map)); 56933eb0b6dSopenharmony_ci 57033eb0b6dSopenharmony_ci napi_value zero = nullptr; 57133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_int32(env, 0, &zero)); 57233eb0b6dSopenharmony_ci napi_value one = nullptr; 57333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_int32(env, 1, &one)); 57433eb0b6dSopenharmony_ci 57533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_set_property(env, map, zero, one)); 57633eb0b6dSopenharmony_ci 57733eb0b6dSopenharmony_ci napi_value entries; 57833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_entries(env, map, &entries)); 57933eb0b6dSopenharmony_ci 58033eb0b6dSopenharmony_ci napi_value entries0; 58133eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_iterator_get_next(env, entries, &entries0)); 58233eb0b6dSopenharmony_ci napi_value entries0Value = nullptr; 58333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_named_property(env, entries0, "value", &entries0Value)); 58433eb0b6dSopenharmony_ci napi_value key = nullptr; 58533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_element(env, entries0Value, 0, &key)); 58633eb0b6dSopenharmony_ci int32_t nativeKey; 58733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_int32(env, key, &nativeKey)); 58833eb0b6dSopenharmony_ci ASSERT_EQ(nativeKey, 0); 58933eb0b6dSopenharmony_ci napi_value value = nullptr; 59033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_element(env, entries0Value, 1, &value)); 59133eb0b6dSopenharmony_ci int32_t nativeValue; 59233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_int32(env, value, &nativeValue)); 59333eb0b6dSopenharmony_ci ASSERT_EQ(nativeValue, 1); 59433eb0b6dSopenharmony_ci 59533eb0b6dSopenharmony_ci napi_value end; 59633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_iterator_get_next(env, entries, &end)); 59733eb0b6dSopenharmony_ci napi_value done = nullptr; 59833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_named_property(env, end, "done", &done)); 59933eb0b6dSopenharmony_ci bool isDone; 60033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_bool(env, done, &isDone)); 60133eb0b6dSopenharmony_ci ASSERT_TRUE(isDone); 60233eb0b6dSopenharmony_ci} 60333eb0b6dSopenharmony_ci 60433eb0b6dSopenharmony_ci/** 60533eb0b6dSopenharmony_ci * @tc.name: CreateSendableMap005 60633eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_map. 60733eb0b6dSopenharmony_ci * @tc.type: FUNC 60833eb0b6dSopenharmony_ci */ 60933eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableMap005, testing::ext::TestSize.Level1) 61033eb0b6dSopenharmony_ci{ 61133eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 61233eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 61333eb0b6dSopenharmony_ci 61433eb0b6dSopenharmony_ci napi_value map = nullptr; 61533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_map(env, &map)); 61633eb0b6dSopenharmony_ci 61733eb0b6dSopenharmony_ci napi_value zero = nullptr; 61833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_int32(env, 0, &zero)); 61933eb0b6dSopenharmony_ci napi_value one = nullptr; 62033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_int32(env, 1, &one)); 62133eb0b6dSopenharmony_ci 62233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_set_property(env, map, zero, one)); 62333eb0b6dSopenharmony_ci 62433eb0b6dSopenharmony_ci napi_value keys; 62533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_keys(env, map, &keys)); 62633eb0b6dSopenharmony_ci 62733eb0b6dSopenharmony_ci napi_value keys0; 62833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_iterator_get_next(env, keys, &keys0)); 62933eb0b6dSopenharmony_ci napi_value key = nullptr; 63033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_named_property(env, keys0, "value", &key)); 63133eb0b6dSopenharmony_ci int32_t nativeKey; 63233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_int32(env, key, &nativeKey)); 63333eb0b6dSopenharmony_ci ASSERT_EQ(nativeKey, 0); 63433eb0b6dSopenharmony_ci 63533eb0b6dSopenharmony_ci napi_value end; 63633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_iterator_get_next(env, keys, &end)); 63733eb0b6dSopenharmony_ci napi_value done = nullptr; 63833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_named_property(env, end, "done", &done)); 63933eb0b6dSopenharmony_ci bool isDone; 64033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_bool(env, done, &isDone)); 64133eb0b6dSopenharmony_ci ASSERT_TRUE(isDone); 64233eb0b6dSopenharmony_ci} 64333eb0b6dSopenharmony_ci 64433eb0b6dSopenharmony_ci/** 64533eb0b6dSopenharmony_ci * @tc.name: CreateSendableMap006 64633eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_map. 64733eb0b6dSopenharmony_ci * @tc.type: FUNC 64833eb0b6dSopenharmony_ci */ 64933eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableMap006, testing::ext::TestSize.Level1) 65033eb0b6dSopenharmony_ci{ 65133eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 65233eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 65333eb0b6dSopenharmony_ci 65433eb0b6dSopenharmony_ci napi_value map = nullptr; 65533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_map(env, &map)); 65633eb0b6dSopenharmony_ci 65733eb0b6dSopenharmony_ci napi_value zero = nullptr; 65833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_int32(env, 0, &zero)); 65933eb0b6dSopenharmony_ci napi_value one = nullptr; 66033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_int32(env, 1, &one)); 66133eb0b6dSopenharmony_ci 66233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_set_property(env, map, zero, one)); 66333eb0b6dSopenharmony_ci 66433eb0b6dSopenharmony_ci napi_value values; 66533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_get_values(env, map, &values)); 66633eb0b6dSopenharmony_ci 66733eb0b6dSopenharmony_ci napi_value values0; 66833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_iterator_get_next(env, values, &values0)); 66933eb0b6dSopenharmony_ci napi_value value = nullptr; 67033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_named_property(env, values0, "value", &value)); 67133eb0b6dSopenharmony_ci int32_t nativeValue; 67233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_int32(env, value, &nativeValue)); 67333eb0b6dSopenharmony_ci ASSERT_EQ(nativeValue, 1); 67433eb0b6dSopenharmony_ci 67533eb0b6dSopenharmony_ci napi_value end; 67633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_map_iterator_get_next(env, values, &end)); 67733eb0b6dSopenharmony_ci napi_value done = nullptr; 67833eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_named_property(env, end, "done", &done)); 67933eb0b6dSopenharmony_ci bool isDone; 68033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_value_bool(env, done, &isDone)); 68133eb0b6dSopenharmony_ci ASSERT_TRUE(isDone); 68233eb0b6dSopenharmony_ci} 68333eb0b6dSopenharmony_ci 68433eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, WrapSendableTest001, testing::ext::TestSize.Level1) 68533eb0b6dSopenharmony_ci{ 68633eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 68733eb0b6dSopenharmony_ci napi_status res = napi_ok; 68833eb0b6dSopenharmony_ci 68933eb0b6dSopenharmony_ci napi_value testClass = nullptr; 69033eb0b6dSopenharmony_ci res = napi_define_sendable_class( 69133eb0b6dSopenharmony_ci env, "TestClass", NAPI_AUTO_LENGTH, 69233eb0b6dSopenharmony_ci [](napi_env env, napi_callback_info info) -> napi_value { 69333eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 69433eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 69533eb0b6dSopenharmony_ci return thisVar; 69633eb0b6dSopenharmony_ci }, 69733eb0b6dSopenharmony_ci nullptr, 0, nullptr, nullptr, &testClass); 69833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 69933eb0b6dSopenharmony_ci 70033eb0b6dSopenharmony_ci napi_value instanceValue = nullptr; 70133eb0b6dSopenharmony_ci res = napi_new_instance(env, testClass, 0, nullptr, &instanceValue); 70233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 70333eb0b6dSopenharmony_ci 70433eb0b6dSopenharmony_ci const char* testStr = "test"; 70533eb0b6dSopenharmony_ci res = napi_wrap_sendable( 70633eb0b6dSopenharmony_ci env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr); 70733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 70833eb0b6dSopenharmony_ci 70933eb0b6dSopenharmony_ci char* tmpTestStr = nullptr; 71033eb0b6dSopenharmony_ci res = napi_unwrap_sendable(env, instanceValue, (void**)&tmpTestStr); 71133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 71233eb0b6dSopenharmony_ci ASSERT_STREQ(testStr, tmpTestStr); 71333eb0b6dSopenharmony_ci 71433eb0b6dSopenharmony_ci char* tmpTestStr1 = nullptr; 71533eb0b6dSopenharmony_ci res = napi_remove_wrap_sendable(env, instanceValue, (void**)&tmpTestStr1); 71633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 71733eb0b6dSopenharmony_ci ASSERT_STREQ(testStr, tmpTestStr1); 71833eb0b6dSopenharmony_ci} 71933eb0b6dSopenharmony_ci 72033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, WrapSendableWithSizeTest001, testing::ext::TestSize.Level1) 72133eb0b6dSopenharmony_ci{ 72233eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 72333eb0b6dSopenharmony_ci 72433eb0b6dSopenharmony_ci napi_value testWrapClass = nullptr; 72533eb0b6dSopenharmony_ci napi_define_sendable_class( 72633eb0b6dSopenharmony_ci env, "TestWrapClass", NAPI_AUTO_LENGTH, 72733eb0b6dSopenharmony_ci [](napi_env env, napi_callback_info info) -> napi_value { 72833eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 72933eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 73033eb0b6dSopenharmony_ci return thisVar; 73133eb0b6dSopenharmony_ci }, 73233eb0b6dSopenharmony_ci nullptr, 0, nullptr, nullptr, &testWrapClass); 73333eb0b6dSopenharmony_ci 73433eb0b6dSopenharmony_ci napi_value instanceValue = nullptr; 73533eb0b6dSopenharmony_ci napi_new_instance(env, testWrapClass, 0, nullptr, &instanceValue); 73633eb0b6dSopenharmony_ci 73733eb0b6dSopenharmony_ci const char* testWrapStr = "testWrapStr"; 73833eb0b6dSopenharmony_ci size_t size = sizeof(*testWrapStr) / sizeof(char); 73933eb0b6dSopenharmony_ci napi_wrap_sendable_with_size( 74033eb0b6dSopenharmony_ci env, instanceValue, (void*)testWrapStr, [](napi_env env, void* data, void* hint) {}, nullptr, size); 74133eb0b6dSopenharmony_ci 74233eb0b6dSopenharmony_ci char* tempTestStr = nullptr; 74333eb0b6dSopenharmony_ci napi_unwrap_sendable(env, instanceValue, (void**)&tempTestStr); 74433eb0b6dSopenharmony_ci ASSERT_STREQ(testWrapStr, tempTestStr); 74533eb0b6dSopenharmony_ci 74633eb0b6dSopenharmony_ci char* tempTestStr1 = nullptr; 74733eb0b6dSopenharmony_ci napi_remove_wrap_sendable(env, instanceValue, (void**)&tempTestStr1); 74833eb0b6dSopenharmony_ci ASSERT_STREQ(testWrapStr, tempTestStr1); 74933eb0b6dSopenharmony_ci} 75033eb0b6dSopenharmony_ci 75133eb0b6dSopenharmony_ci/** 75233eb0b6dSopenharmony_ci * @tc.name: SharedArrayBufferTest001 75333eb0b6dSopenharmony_ci * @tc.desc: Test is shared array buffer. 75433eb0b6dSopenharmony_ci * @tc.type: FUNC 75533eb0b6dSopenharmony_ci */ 75633eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SharedArrayBufferTest001, testing::ext::TestSize.Level1) { 75733eb0b6dSopenharmony_ci napi_env env = (napi_env) engine_; 75833eb0b6dSopenharmony_ci 75933eb0b6dSopenharmony_ci napi_value arrayBuffer = nullptr; 76033eb0b6dSopenharmony_ci void* arrayBufferPtr = nullptr; 76133eb0b6dSopenharmony_ci size_t arrayBufferSize = 1024; 76233eb0b6dSopenharmony_ci napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer); 76333eb0b6dSopenharmony_ci 76433eb0b6dSopenharmony_ci bool isSharedArrayBuffer = true; 76533eb0b6dSopenharmony_ci napi_is_shared_array_buffer(env, arrayBuffer, &isSharedArrayBuffer); 76633eb0b6dSopenharmony_ci ASSERT_EQ(isSharedArrayBuffer, false); 76733eb0b6dSopenharmony_ci} 76833eb0b6dSopenharmony_ci 76933eb0b6dSopenharmony_ci 77033eb0b6dSopenharmony_ci/** 77133eb0b6dSopenharmony_ci * @tc.name: CreateSendableArray001 77233eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_array abnormal argument. 77333eb0b6dSopenharmony_ci * @tc.type: FUNC 77433eb0b6dSopenharmony_ci */ 77533eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArray001, testing::ext::TestSize.Level1) 77633eb0b6dSopenharmony_ci{ 77733eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 77833eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 77933eb0b6dSopenharmony_ci napi_status res = napi_ok; 78033eb0b6dSopenharmony_ci 78133eb0b6dSopenharmony_ci res = napi_create_sendable_array(env, nullptr); 78233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 78333eb0b6dSopenharmony_ci} 78433eb0b6dSopenharmony_ci 78533eb0b6dSopenharmony_ci/** 78633eb0b6dSopenharmony_ci * @tc.name: CreateSendableArray002 78733eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_array. 78833eb0b6dSopenharmony_ci * @tc.type: FUNC 78933eb0b6dSopenharmony_ci */ 79033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArray002, testing::ext::TestSize.Level1) 79133eb0b6dSopenharmony_ci{ 79233eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 79333eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 79433eb0b6dSopenharmony_ci napi_status res = napi_ok; 79533eb0b6dSopenharmony_ci 79633eb0b6dSopenharmony_ci napi_value result = nullptr; 79733eb0b6dSopenharmony_ci res = napi_create_sendable_array(env, &result); 79833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 79933eb0b6dSopenharmony_ci 80033eb0b6dSopenharmony_ci bool isShared = false; 80133eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 80233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 80333eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 80433eb0b6dSopenharmony_ci 80533eb0b6dSopenharmony_ci bool isArray = false; 80633eb0b6dSopenharmony_ci res = napi_is_array(env, result, &isArray); 80733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 80833eb0b6dSopenharmony_ci ASSERT_EQ(isArray, true); 80933eb0b6dSopenharmony_ci 81033eb0b6dSopenharmony_ci uint32_t length = 0; 81133eb0b6dSopenharmony_ci res = napi_get_array_length(env, result, &length); 81233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 81333eb0b6dSopenharmony_ci ASSERT_EQ(length, 0); 81433eb0b6dSopenharmony_ci 81533eb0b6dSopenharmony_ci napi_value undefined = nullptr; 81633eb0b6dSopenharmony_ci res = napi_get_undefined(env, &undefined); 81733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 81833eb0b6dSopenharmony_ci 81933eb0b6dSopenharmony_ci res = napi_set_element(env, result, 0, undefined); 82033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 82133eb0b6dSopenharmony_ci} 82233eb0b6dSopenharmony_ci 82333eb0b6dSopenharmony_ci/** 82433eb0b6dSopenharmony_ci * @tc.name: CreateSendableArrayWithLength001 82533eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_array_with_length. 82633eb0b6dSopenharmony_ci * @tc.type: FUNC 82733eb0b6dSopenharmony_ci */ 82833eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArrayWithLength001, testing::ext::TestSize.Level1) 82933eb0b6dSopenharmony_ci{ 83033eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 83133eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 83233eb0b6dSopenharmony_ci napi_status res = napi_ok; 83333eb0b6dSopenharmony_ci 83433eb0b6dSopenharmony_ci res = napi_create_sendable_array_with_length(env, 0, nullptr); 83533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 83633eb0b6dSopenharmony_ci} 83733eb0b6dSopenharmony_ci 83833eb0b6dSopenharmony_ci/** 83933eb0b6dSopenharmony_ci * @tc.name: CreateSendableArrayWithLength002 84033eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_array_with_length. 84133eb0b6dSopenharmony_ci * @tc.type: FUNC 84233eb0b6dSopenharmony_ci */ 84333eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArrayWithLength002, testing::ext::TestSize.Level1) 84433eb0b6dSopenharmony_ci{ 84533eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 84633eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 84733eb0b6dSopenharmony_ci napi_status res = napi_ok; 84833eb0b6dSopenharmony_ci 84933eb0b6dSopenharmony_ci napi_value result = nullptr; 85033eb0b6dSopenharmony_ci res = napi_create_sendable_array_with_length(env, 0, &result); 85133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 85233eb0b6dSopenharmony_ci 85333eb0b6dSopenharmony_ci bool isShared = false; 85433eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 85533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 85633eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 85733eb0b6dSopenharmony_ci 85833eb0b6dSopenharmony_ci bool isArray = false; 85933eb0b6dSopenharmony_ci res = napi_is_array(env, result, &isArray); 86033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 86133eb0b6dSopenharmony_ci ASSERT_EQ(isArray, true); 86233eb0b6dSopenharmony_ci 86333eb0b6dSopenharmony_ci uint32_t length = 0; 86433eb0b6dSopenharmony_ci res = napi_get_array_length(env, result, &length); 86533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 86633eb0b6dSopenharmony_ci ASSERT_EQ(length, 0); 86733eb0b6dSopenharmony_ci} 86833eb0b6dSopenharmony_ci 86933eb0b6dSopenharmony_ci/** 87033eb0b6dSopenharmony_ci * @tc.name: CreateSendableArrayWithLength003 87133eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_array_with_length. 87233eb0b6dSopenharmony_ci * @tc.type: FUNC 87333eb0b6dSopenharmony_ci */ 87433eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArrayWithLength003, testing::ext::TestSize.Level1) 87533eb0b6dSopenharmony_ci{ 87633eb0b6dSopenharmony_ci static uint32_t LENGTH = 1024; 87733eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 87833eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 87933eb0b6dSopenharmony_ci napi_status res = napi_ok; 88033eb0b6dSopenharmony_ci 88133eb0b6dSopenharmony_ci napi_value result = nullptr; 88233eb0b6dSopenharmony_ci res = napi_create_sendable_array_with_length(env, LENGTH, &result); 88333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 88433eb0b6dSopenharmony_ci 88533eb0b6dSopenharmony_ci bool isShared = false; 88633eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 88733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 88833eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 88933eb0b6dSopenharmony_ci 89033eb0b6dSopenharmony_ci bool isArray = false; 89133eb0b6dSopenharmony_ci res = napi_is_array(env, result, &isArray); 89233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 89333eb0b6dSopenharmony_ci ASSERT_EQ(isArray, true); 89433eb0b6dSopenharmony_ci 89533eb0b6dSopenharmony_ci uint32_t length = 0; 89633eb0b6dSopenharmony_ci res = napi_get_array_length(env, result, &length); 89733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 89833eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH); 89933eb0b6dSopenharmony_ci 90033eb0b6dSopenharmony_ci napi_value value = nullptr; 90133eb0b6dSopenharmony_ci napi_value boolTrue = nullptr; 90233eb0b6dSopenharmony_ci bool ret = false; 90333eb0b6dSopenharmony_ci res = napi_get_boolean(env, true, &boolTrue); 90433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 90533eb0b6dSopenharmony_ci 90633eb0b6dSopenharmony_ci res = napi_set_element(env, result, 0, boolTrue); 90733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 90833eb0b6dSopenharmony_ci res = napi_get_element(env, result, 0, &value); 90933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 91033eb0b6dSopenharmony_ci res = napi_get_value_bool(env, value, &ret); 91133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 91233eb0b6dSopenharmony_ci ASSERT_EQ(ret, true); 91333eb0b6dSopenharmony_ci 91433eb0b6dSopenharmony_ci res = napi_set_element(env, result, LENGTH - 1, boolTrue); 91533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 91633eb0b6dSopenharmony_ci res = napi_get_element(env, result, LENGTH - 1, &value); 91733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 91833eb0b6dSopenharmony_ci res = napi_get_value_bool(env, value, &ret); 91933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 92033eb0b6dSopenharmony_ci ASSERT_EQ(ret, true); 92133eb0b6dSopenharmony_ci} 92233eb0b6dSopenharmony_ci 92333eb0b6dSopenharmony_ci/** 92433eb0b6dSopenharmony_ci * @tc.name: CreateSendableArrayWithLength004 92533eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_array_with_length. 92633eb0b6dSopenharmony_ci * @tc.type: FUNC 92733eb0b6dSopenharmony_ci */ 92833eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArrayWithLength004, testing::ext::TestSize.Level1) 92933eb0b6dSopenharmony_ci{ 93033eb0b6dSopenharmony_ci static uint32_t LENGTH = 1024; 93133eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 93233eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 93333eb0b6dSopenharmony_ci napi_status res = napi_ok; 93433eb0b6dSopenharmony_ci 93533eb0b6dSopenharmony_ci napi_value result = nullptr; 93633eb0b6dSopenharmony_ci res = napi_create_sendable_array_with_length(env, LENGTH, &result); 93733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 93833eb0b6dSopenharmony_ci 93933eb0b6dSopenharmony_ci bool isShared = false; 94033eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 94133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 94233eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 94333eb0b6dSopenharmony_ci 94433eb0b6dSopenharmony_ci bool isArray = false; 94533eb0b6dSopenharmony_ci res = napi_is_array(env, result, &isArray); 94633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 94733eb0b6dSopenharmony_ci ASSERT_EQ(isArray, true); 94833eb0b6dSopenharmony_ci 94933eb0b6dSopenharmony_ci uint32_t length = 0; 95033eb0b6dSopenharmony_ci res = napi_get_array_length(env, result, &length); 95133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 95233eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH); 95333eb0b6dSopenharmony_ci 95433eb0b6dSopenharmony_ci napi_value value = nullptr; 95533eb0b6dSopenharmony_ci napi_value boolTrue = nullptr; 95633eb0b6dSopenharmony_ci bool ret = false; 95733eb0b6dSopenharmony_ci res = napi_get_boolean(env, true, &boolTrue); 95833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 95933eb0b6dSopenharmony_ci 96033eb0b6dSopenharmony_ci res = napi_get_element(env, result, 1, &value); 96133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 96233eb0b6dSopenharmony_ci napi_valuetype type = napi_undefined; 96333eb0b6dSopenharmony_ci res = napi_typeof(env, value, &type); 96433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 96533eb0b6dSopenharmony_ci ASSERT_EQ(napi_undefined, napi_undefined); 96633eb0b6dSopenharmony_ci 96733eb0b6dSopenharmony_ci res = napi_set_element(env, result, LENGTH, boolTrue); 96833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 96933eb0b6dSopenharmony_ci res = napi_get_element(env, result, LENGTH, &value); 97033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 97133eb0b6dSopenharmony_ci res = napi_get_value_bool(env, value, &ret); 97233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 97333eb0b6dSopenharmony_ci ASSERT_EQ(ret, true); 97433eb0b6dSopenharmony_ci 97533eb0b6dSopenharmony_ci res = napi_get_element(env, result, LENGTH + 1, &value); 97633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 97733eb0b6dSopenharmony_ci napi_valuetype getType = napi_undefined; 97833eb0b6dSopenharmony_ci res = napi_typeof(env, value, &getType); 97933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 98033eb0b6dSopenharmony_ci ASSERT_EQ(getType, napi_undefined); 98133eb0b6dSopenharmony_ci} 98233eb0b6dSopenharmony_ci 98333eb0b6dSopenharmony_ci/** 98433eb0b6dSopenharmony_ci * @tc.name: CreateSendableArrayBuffer001 98533eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 98633eb0b6dSopenharmony_ci * @tc.type: FUNC 98733eb0b6dSopenharmony_ci */ 98833eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArrayBuffer001, testing::ext::TestSize.Level1) 98933eb0b6dSopenharmony_ci{ 99033eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 99133eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 99233eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 99333eb0b6dSopenharmony_ci napi_status res = napi_ok; 99433eb0b6dSopenharmony_ci 99533eb0b6dSopenharmony_ci napi_value result = nullptr; 99633eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, nullptr, &result); 99733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 99833eb0b6dSopenharmony_ci 99933eb0b6dSopenharmony_ci void *data; 100033eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, nullptr); 100133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 100233eb0b6dSopenharmony_ci 100333eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, nullptr, nullptr); 100433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 100533eb0b6dSopenharmony_ci} 100633eb0b6dSopenharmony_ci 100733eb0b6dSopenharmony_ci/** 100833eb0b6dSopenharmony_ci * @tc.name: CreateSendableArrayBuffer002 100933eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 101033eb0b6dSopenharmony_ci * @tc.type: FUNC 101133eb0b6dSopenharmony_ci */ 101233eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableArrayBuffer002, testing::ext::TestSize.Level1) 101333eb0b6dSopenharmony_ci{ 101433eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 101533eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 101633eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 101733eb0b6dSopenharmony_ci napi_status res = napi_ok; 101833eb0b6dSopenharmony_ci 101933eb0b6dSopenharmony_ci void *data; 102033eb0b6dSopenharmony_ci napi_value result = nullptr; 102133eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, &result); 102233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 102333eb0b6dSopenharmony_ci 102433eb0b6dSopenharmony_ci bool isShared = false; 102533eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 102633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 102733eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 102833eb0b6dSopenharmony_ci 102933eb0b6dSopenharmony_ci bool isArrayBuffer = false; 103033eb0b6dSopenharmony_ci res = napi_is_arraybuffer(env, result, &isArrayBuffer); 103133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 103233eb0b6dSopenharmony_ci ASSERT_EQ(isArrayBuffer, true); 103333eb0b6dSopenharmony_ci 103433eb0b6dSopenharmony_ci void *getData = nullptr; 103533eb0b6dSopenharmony_ci size_t length = 0; 103633eb0b6dSopenharmony_ci res = napi_get_arraybuffer_info(env, result, &getData, &length); 103733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 103833eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH); 103933eb0b6dSopenharmony_ci ASSERT_EQ(getData, data); 104033eb0b6dSopenharmony_ci} 104133eb0b6dSopenharmony_ci 104233eb0b6dSopenharmony_ci/** 104333eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray001 104433eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 104533eb0b6dSopenharmony_ci * @tc.type: FUNC 104633eb0b6dSopenharmony_ci */ 104733eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray001, testing::ext::TestSize.Level1) 104833eb0b6dSopenharmony_ci{ 104933eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 105033eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 105133eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 105233eb0b6dSopenharmony_ci napi_status res = napi_ok; 105333eb0b6dSopenharmony_ci 105433eb0b6dSopenharmony_ci void *data; 105533eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 105633eb0b6dSopenharmony_ci napi_value result = nullptr; 105733eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, &arraybuffer); 105833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 105933eb0b6dSopenharmony_ci 106033eb0b6dSopenharmony_ci bool isShared = false; 106133eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 106233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 106333eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 106433eb0b6dSopenharmony_ci 106533eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint8_clamped_array, LENGTH / 2, arraybuffer, 1, &result); 106633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 106733eb0b6dSopenharmony_ci 106833eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint8_array, LENGTH / 2, arraybuffer, 1, nullptr); 106933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 107033eb0b6dSopenharmony_ci 107133eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint8_array, LENGTH / 2, nullptr, 1, &result); 107233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 107333eb0b6dSopenharmony_ci 107433eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int8_array, LENGTH / 2, nullptr, 1, &result); 107533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 107633eb0b6dSopenharmony_ci 107733eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int8_array, LENGTH / 2, nullptr, 1, &result); 107833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 107933eb0b6dSopenharmony_ci 108033eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint16_array, LENGTH / 2, nullptr, 1, &result); 108133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 108233eb0b6dSopenharmony_ci 108333eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint16_array, LENGTH / 2, nullptr, 1, &result); 108433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 108533eb0b6dSopenharmony_ci 108633eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int32_array, LENGTH / 2, nullptr, 1, &result); 108733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 108833eb0b6dSopenharmony_ci 108933eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int32_array, LENGTH / 2, nullptr, 1, &result); 109033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 109133eb0b6dSopenharmony_ci 109233eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint32_array, LENGTH / 2, nullptr, 1, &result); 109333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 109433eb0b6dSopenharmony_ci 109533eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint32_array, LENGTH / 2, nullptr, 1, &result); 109633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 109733eb0b6dSopenharmony_ci 109833eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_float32_array, LENGTH / 2, nullptr, 1, &result); 109933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 110033eb0b6dSopenharmony_ci 110133eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_float32_array, LENGTH / 2, nullptr, 1, &result); 110233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_invalid_arg); 110333eb0b6dSopenharmony_ci} 110433eb0b6dSopenharmony_ci 110533eb0b6dSopenharmony_ci/** 110633eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray002 110733eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 110833eb0b6dSopenharmony_ci * @tc.type: FUNC 110933eb0b6dSopenharmony_ci */ 111033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray002, testing::ext::TestSize.Level1) 111133eb0b6dSopenharmony_ci{ 111233eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 111333eb0b6dSopenharmony_ci static size_t OFFSET = 128; 111433eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 111533eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 111633eb0b6dSopenharmony_ci napi_status res = napi_ok; 111733eb0b6dSopenharmony_ci 111833eb0b6dSopenharmony_ci void *data; 111933eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 112033eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, &arraybuffer); 112133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 112233eb0b6dSopenharmony_ci 112333eb0b6dSopenharmony_ci napi_value result = nullptr; 112433eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint8_array, LENGTH / 2, arraybuffer, OFFSET, &result); 112533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 112633eb0b6dSopenharmony_ci 112733eb0b6dSopenharmony_ci bool isShared = false; 112833eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 112933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 113033eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 113133eb0b6dSopenharmony_ci 113233eb0b6dSopenharmony_ci bool isTypedArray = false; 113333eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 113433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 113533eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 113633eb0b6dSopenharmony_ci 113733eb0b6dSopenharmony_ci napi_typedarray_type type = napi_int8_array; 113833eb0b6dSopenharmony_ci size_t length = 0; 113933eb0b6dSopenharmony_ci void *getData = nullptr; 114033eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 114133eb0b6dSopenharmony_ci size_t byteOffset = 0; 114233eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 114333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 114433eb0b6dSopenharmony_ci 114533eb0b6dSopenharmony_ci bool isEqual = false; 114633eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 114733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 114833eb0b6dSopenharmony_ci 114933eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_uint8_array); 115033eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH / 2); 115133eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 115233eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 115333eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 115433eb0b6dSopenharmony_ci} 115533eb0b6dSopenharmony_ci 115633eb0b6dSopenharmony_ci/** 115733eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray003 115833eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 115933eb0b6dSopenharmony_ci * @tc.type: FUNC 116033eb0b6dSopenharmony_ci */ 116133eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray003, testing::ext::TestSize.Level1) 116233eb0b6dSopenharmony_ci{ 116333eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 116433eb0b6dSopenharmony_ci static size_t OFFSET = 128; 116533eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 116633eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 116733eb0b6dSopenharmony_ci napi_status res = napi_ok; 116833eb0b6dSopenharmony_ci 116933eb0b6dSopenharmony_ci void *data; 117033eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 117133eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, &arraybuffer); 117233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 117333eb0b6dSopenharmony_ci 117433eb0b6dSopenharmony_ci napi_value result = nullptr; 117533eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int8_array, LENGTH / 2, arraybuffer, OFFSET, &result); 117633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 117733eb0b6dSopenharmony_ci 117833eb0b6dSopenharmony_ci bool isShared = false; 117933eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 118033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 118133eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 118233eb0b6dSopenharmony_ci 118333eb0b6dSopenharmony_ci bool isTypedArray = false; 118433eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 118533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 118633eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 118733eb0b6dSopenharmony_ci 118833eb0b6dSopenharmony_ci napi_typedarray_type type = napi_uint8_array; 118933eb0b6dSopenharmony_ci size_t length = 0; 119033eb0b6dSopenharmony_ci void *getData = nullptr; 119133eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 119233eb0b6dSopenharmony_ci size_t byteOffset = 0; 119333eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 119433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 119533eb0b6dSopenharmony_ci 119633eb0b6dSopenharmony_ci bool isEqual = false; 119733eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 119833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 119933eb0b6dSopenharmony_ci 120033eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_int8_array); 120133eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH / 2); 120233eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 120333eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 120433eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 120533eb0b6dSopenharmony_ci} 120633eb0b6dSopenharmony_ci 120733eb0b6dSopenharmony_ci/** 120833eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray004 120933eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 121033eb0b6dSopenharmony_ci * @tc.type: FUNC 121133eb0b6dSopenharmony_ci */ 121233eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray004, testing::ext::TestSize.Level1) 121333eb0b6dSopenharmony_ci{ 121433eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 121533eb0b6dSopenharmony_ci static size_t OFFSET = 0; 121633eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 121733eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 121833eb0b6dSopenharmony_ci napi_status res = napi_ok; 121933eb0b6dSopenharmony_ci 122033eb0b6dSopenharmony_ci void *data; 122133eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 122233eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, &arraybuffer); 122333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 122433eb0b6dSopenharmony_ci 122533eb0b6dSopenharmony_ci napi_value result = nullptr; 122633eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int16_array, LENGTH / 2, arraybuffer, OFFSET, &result); 122733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 122833eb0b6dSopenharmony_ci 122933eb0b6dSopenharmony_ci bool isShared = false; 123033eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 123133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 123233eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 123333eb0b6dSopenharmony_ci 123433eb0b6dSopenharmony_ci bool isTypedArray = false; 123533eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 123633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 123733eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 123833eb0b6dSopenharmony_ci 123933eb0b6dSopenharmony_ci napi_typedarray_type type = napi_uint8_array; 124033eb0b6dSopenharmony_ci size_t length = 0; 124133eb0b6dSopenharmony_ci void *getData = nullptr; 124233eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 124333eb0b6dSopenharmony_ci size_t byteOffset = 0; 124433eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 124533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 124633eb0b6dSopenharmony_ci 124733eb0b6dSopenharmony_ci bool isEqual = false; 124833eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 124933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 125033eb0b6dSopenharmony_ci 125133eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_int16_array); 125233eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH); 125333eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 125433eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 125533eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 125633eb0b6dSopenharmony_ci} 125733eb0b6dSopenharmony_ci 125833eb0b6dSopenharmony_ci/** 125933eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray005 126033eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 126133eb0b6dSopenharmony_ci * @tc.type: FUNC 126233eb0b6dSopenharmony_ci */ 126333eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray005, testing::ext::TestSize.Level1) 126433eb0b6dSopenharmony_ci{ 126533eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 126633eb0b6dSopenharmony_ci static size_t OFFSET = 0; 126733eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 126833eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 126933eb0b6dSopenharmony_ci napi_status res = napi_ok; 127033eb0b6dSopenharmony_ci 127133eb0b6dSopenharmony_ci void *data; 127233eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 127333eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, &arraybuffer); 127433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 127533eb0b6dSopenharmony_ci 127633eb0b6dSopenharmony_ci napi_value result = nullptr; 127733eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint16_array, LENGTH / 2, arraybuffer, OFFSET, &result); 127833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 127933eb0b6dSopenharmony_ci 128033eb0b6dSopenharmony_ci bool isShared = false; 128133eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 128233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 128333eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 128433eb0b6dSopenharmony_ci 128533eb0b6dSopenharmony_ci bool isTypedArray = false; 128633eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 128733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 128833eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 128933eb0b6dSopenharmony_ci 129033eb0b6dSopenharmony_ci napi_typedarray_type type = napi_uint8_array; 129133eb0b6dSopenharmony_ci size_t length = 0; 129233eb0b6dSopenharmony_ci void *getData = nullptr; 129333eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 129433eb0b6dSopenharmony_ci size_t byteOffset = 0; 129533eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 129633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 129733eb0b6dSopenharmony_ci 129833eb0b6dSopenharmony_ci bool isEqual = false; 129933eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 130033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 130133eb0b6dSopenharmony_ci 130233eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_uint16_array); 130333eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH); 130433eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 130533eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 130633eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 130733eb0b6dSopenharmony_ci} 130833eb0b6dSopenharmony_ci 130933eb0b6dSopenharmony_ci/** 131033eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray006 131133eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 131233eb0b6dSopenharmony_ci * @tc.type: FUNC 131333eb0b6dSopenharmony_ci */ 131433eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray006, testing::ext::TestSize.Level1) 131533eb0b6dSopenharmony_ci{ 131633eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 131733eb0b6dSopenharmony_ci static size_t OFFSET = 0; 131833eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 131933eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 132033eb0b6dSopenharmony_ci napi_status res = napi_ok; 132133eb0b6dSopenharmony_ci 132233eb0b6dSopenharmony_ci void *data; 132333eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 132433eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH * 2, &data, &arraybuffer); 132533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 132633eb0b6dSopenharmony_ci 132733eb0b6dSopenharmony_ci napi_value result = nullptr; 132833eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint32_array, LENGTH / 2, arraybuffer, OFFSET, &result); 132933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 133033eb0b6dSopenharmony_ci 133133eb0b6dSopenharmony_ci bool isShared = false; 133233eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 133333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 133433eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 133533eb0b6dSopenharmony_ci 133633eb0b6dSopenharmony_ci bool isTypedArray = false; 133733eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 133833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 133933eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 134033eb0b6dSopenharmony_ci 134133eb0b6dSopenharmony_ci napi_typedarray_type type = napi_int8_array; 134233eb0b6dSopenharmony_ci size_t length = 0; 134333eb0b6dSopenharmony_ci void *getData = nullptr; 134433eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 134533eb0b6dSopenharmony_ci size_t byteOffset = 0; 134633eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 134733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 134833eb0b6dSopenharmony_ci 134933eb0b6dSopenharmony_ci bool isEqual = false; 135033eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 135133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 135233eb0b6dSopenharmony_ci 135333eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_uint32_array); 135433eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH * 2); 135533eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 135633eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 135733eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 135833eb0b6dSopenharmony_ci} 135933eb0b6dSopenharmony_ci 136033eb0b6dSopenharmony_ci/** 136133eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray007 136233eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 136333eb0b6dSopenharmony_ci * @tc.type: FUNC 136433eb0b6dSopenharmony_ci */ 136533eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray007, testing::ext::TestSize.Level1) 136633eb0b6dSopenharmony_ci{ 136733eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 136833eb0b6dSopenharmony_ci static size_t OFFSET = 0; 136933eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 137033eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 137133eb0b6dSopenharmony_ci napi_status res = napi_ok; 137233eb0b6dSopenharmony_ci 137333eb0b6dSopenharmony_ci void *data; 137433eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 137533eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH * 2, &data, &arraybuffer); 137633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 137733eb0b6dSopenharmony_ci 137833eb0b6dSopenharmony_ci napi_value result = nullptr; 137933eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int32_array, LENGTH / 2, arraybuffer, OFFSET, &result); 138033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 138133eb0b6dSopenharmony_ci 138233eb0b6dSopenharmony_ci bool isShared = false; 138333eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 138433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 138533eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 138633eb0b6dSopenharmony_ci 138733eb0b6dSopenharmony_ci bool isTypedArray = false; 138833eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 138933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 139033eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 139133eb0b6dSopenharmony_ci 139233eb0b6dSopenharmony_ci napi_typedarray_type type = napi_int8_array; 139333eb0b6dSopenharmony_ci size_t length = 0; 139433eb0b6dSopenharmony_ci void *getData = nullptr; 139533eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 139633eb0b6dSopenharmony_ci size_t byteOffset = 0; 139733eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 139833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 139933eb0b6dSopenharmony_ci 140033eb0b6dSopenharmony_ci bool isEqual = false; 140133eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 140233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 140333eb0b6dSopenharmony_ci 140433eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_int32_array); 140533eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH * 2); 140633eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 140733eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 140833eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 140933eb0b6dSopenharmony_ci} 141033eb0b6dSopenharmony_ci 141133eb0b6dSopenharmony_ci/** 141233eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray008 141333eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 141433eb0b6dSopenharmony_ci * @tc.type: FUNC 141533eb0b6dSopenharmony_ci */ 141633eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray008, testing::ext::TestSize.Level1) 141733eb0b6dSopenharmony_ci{ 141833eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 141933eb0b6dSopenharmony_ci static size_t OFFSET = 0; 142033eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 142133eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 142233eb0b6dSopenharmony_ci napi_status res = napi_ok; 142333eb0b6dSopenharmony_ci 142433eb0b6dSopenharmony_ci void *data; 142533eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 142633eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH * 2, &data, &arraybuffer); 142733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 142833eb0b6dSopenharmony_ci 142933eb0b6dSopenharmony_ci napi_value result = nullptr; 143033eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_float32_array, LENGTH / 2, arraybuffer, OFFSET, &result); 143133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 143233eb0b6dSopenharmony_ci 143333eb0b6dSopenharmony_ci bool isShared = false; 143433eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 143533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 143633eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 143733eb0b6dSopenharmony_ci 143833eb0b6dSopenharmony_ci bool isTypedArray = false; 143933eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 144033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 144133eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 144233eb0b6dSopenharmony_ci 144333eb0b6dSopenharmony_ci napi_typedarray_type type = napi_int8_array; 144433eb0b6dSopenharmony_ci size_t length = 0; 144533eb0b6dSopenharmony_ci void *getData = nullptr; 144633eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 144733eb0b6dSopenharmony_ci size_t byteOffset = 0; 144833eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 144933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 145033eb0b6dSopenharmony_ci 145133eb0b6dSopenharmony_ci bool isEqual = false; 145233eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 145333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 145433eb0b6dSopenharmony_ci 145533eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_float32_array); 145633eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH * 2); 145733eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 145833eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 145933eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 146033eb0b6dSopenharmony_ci} 146133eb0b6dSopenharmony_ci 146233eb0b6dSopenharmony_ci/** 146333eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray009 146433eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 146533eb0b6dSopenharmony_ci * @tc.type: FUNC 146633eb0b6dSopenharmony_ci */ 146733eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray009, testing::ext::TestSize.Level1) 146833eb0b6dSopenharmony_ci{ 146933eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 147033eb0b6dSopenharmony_ci static size_t OFFSET = 128; 147133eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 147233eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 147333eb0b6dSopenharmony_ci napi_status res = napi_ok; 147433eb0b6dSopenharmony_ci 147533eb0b6dSopenharmony_ci void *data; 147633eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 147733eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &data, &arraybuffer); 147833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 147933eb0b6dSopenharmony_ci 148033eb0b6dSopenharmony_ci napi_value result = nullptr; 148133eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint8_clamped_array, LENGTH / 2, arraybuffer, OFFSET, &result); 148233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 148333eb0b6dSopenharmony_ci 148433eb0b6dSopenharmony_ci bool isShared = false; 148533eb0b6dSopenharmony_ci res = napi_is_sendable(env, result, &isShared); 148633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 148733eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 148833eb0b6dSopenharmony_ci 148933eb0b6dSopenharmony_ci bool isTypedArray = false; 149033eb0b6dSopenharmony_ci res = napi_is_typedarray(env, result, &isTypedArray); 149133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 149233eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 149333eb0b6dSopenharmony_ci 149433eb0b6dSopenharmony_ci napi_typedarray_type type = napi_uint8_array; 149533eb0b6dSopenharmony_ci size_t length = 0; 149633eb0b6dSopenharmony_ci void *getData = nullptr; 149733eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 149833eb0b6dSopenharmony_ci size_t byteOffset = 0; 149933eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 150033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 150133eb0b6dSopenharmony_ci 150233eb0b6dSopenharmony_ci bool isEqual = false; 150333eb0b6dSopenharmony_ci res = napi_strict_equals(env, arraybuffer, getArrayBuffer, &isEqual); 150433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 150533eb0b6dSopenharmony_ci 150633eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_uint8_clamped_array); 150733eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH / 2); 150833eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(data) + OFFSET); 150933eb0b6dSopenharmony_ci ASSERT_EQ(isEqual, true); 151033eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 151133eb0b6dSopenharmony_ci} 151233eb0b6dSopenharmony_ci 151333eb0b6dSopenharmony_ci/** 151433eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray010 151533eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 151633eb0b6dSopenharmony_ci * @tc.type: FUNC 151733eb0b6dSopenharmony_ci */ 151833eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray010, testing::ext::TestSize.Level1) 151933eb0b6dSopenharmony_ci{ 152033eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 152133eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 152233eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 152333eb0b6dSopenharmony_ci napi_status res = napi_ok; 152433eb0b6dSopenharmony_ci 152533eb0b6dSopenharmony_ci void *data; 152633eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 152733eb0b6dSopenharmony_ci napi_value result = nullptr; 152833eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 152933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 153033eb0b6dSopenharmony_ci 153133eb0b6dSopenharmony_ci bool isShared = false; 153233eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 153333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 153433eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 153533eb0b6dSopenharmony_ci 153633eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint8_clamped_array, LENGTH / 2, arraybuffer, 1, &result); 153733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 153833eb0b6dSopenharmony_ci} 153933eb0b6dSopenharmony_ci 154033eb0b6dSopenharmony_ci/** 154133eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray011 154233eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 154333eb0b6dSopenharmony_ci * @tc.type: FUNC 154433eb0b6dSopenharmony_ci */ 154533eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray011, testing::ext::TestSize.Level1) 154633eb0b6dSopenharmony_ci{ 154733eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 154833eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 154933eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 155033eb0b6dSopenharmony_ci napi_status res = napi_ok; 155133eb0b6dSopenharmony_ci 155233eb0b6dSopenharmony_ci void *data; 155333eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 155433eb0b6dSopenharmony_ci napi_value result = nullptr; 155533eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 155633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 155733eb0b6dSopenharmony_ci 155833eb0b6dSopenharmony_ci bool isShared = false; 155933eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 156033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 156133eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 156233eb0b6dSopenharmony_ci 156333eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint8_array, LENGTH / 2, arraybuffer, 1, &result); 156433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 156533eb0b6dSopenharmony_ci} 156633eb0b6dSopenharmony_ci 156733eb0b6dSopenharmony_ci/** 156833eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray012 156933eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 157033eb0b6dSopenharmony_ci * @tc.type: FUNC 157133eb0b6dSopenharmony_ci */ 157233eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray012, testing::ext::TestSize.Level1) 157333eb0b6dSopenharmony_ci{ 157433eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 157533eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 157633eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 157733eb0b6dSopenharmony_ci napi_status res = napi_ok; 157833eb0b6dSopenharmony_ci 157933eb0b6dSopenharmony_ci void *data; 158033eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 158133eb0b6dSopenharmony_ci napi_value result = nullptr; 158233eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 158333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 158433eb0b6dSopenharmony_ci 158533eb0b6dSopenharmony_ci bool isShared = false; 158633eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 158733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 158833eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 158933eb0b6dSopenharmony_ci 159033eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int8_array, LENGTH / 2, arraybuffer, 1, &result); 159133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 159233eb0b6dSopenharmony_ci} 159333eb0b6dSopenharmony_ci 159433eb0b6dSopenharmony_ci/** 159533eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray013 159633eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 159733eb0b6dSopenharmony_ci * @tc.type: FUNC 159833eb0b6dSopenharmony_ci */ 159933eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray013, testing::ext::TestSize.Level1) 160033eb0b6dSopenharmony_ci{ 160133eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 160233eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 160333eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 160433eb0b6dSopenharmony_ci napi_status res = napi_ok; 160533eb0b6dSopenharmony_ci 160633eb0b6dSopenharmony_ci void *data; 160733eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 160833eb0b6dSopenharmony_ci napi_value result = nullptr; 160933eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 161033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 161133eb0b6dSopenharmony_ci 161233eb0b6dSopenharmony_ci bool isShared = false; 161333eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 161433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 161533eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 161633eb0b6dSopenharmony_ci 161733eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint16_array, LENGTH / 2, arraybuffer, 1, &result); 161833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 161933eb0b6dSopenharmony_ci} 162033eb0b6dSopenharmony_ci 162133eb0b6dSopenharmony_ci/** 162233eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray014 162333eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 162433eb0b6dSopenharmony_ci * @tc.type: FUNC 162533eb0b6dSopenharmony_ci */ 162633eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray014, testing::ext::TestSize.Level1) 162733eb0b6dSopenharmony_ci{ 162833eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 162933eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 163033eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 163133eb0b6dSopenharmony_ci napi_status res = napi_ok; 163233eb0b6dSopenharmony_ci 163333eb0b6dSopenharmony_ci void *data; 163433eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 163533eb0b6dSopenharmony_ci napi_value result = nullptr; 163633eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 163733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 163833eb0b6dSopenharmony_ci 163933eb0b6dSopenharmony_ci bool isShared = false; 164033eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 164133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 164233eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 164333eb0b6dSopenharmony_ci 164433eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int16_array, LENGTH / 2, arraybuffer, 1, &result); 164533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 164633eb0b6dSopenharmony_ci} 164733eb0b6dSopenharmony_ci 164833eb0b6dSopenharmony_ci/** 164933eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray015 165033eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 165133eb0b6dSopenharmony_ci * @tc.type: FUNC 165233eb0b6dSopenharmony_ci */ 165333eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray015, testing::ext::TestSize.Level1) 165433eb0b6dSopenharmony_ci{ 165533eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 165633eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 165733eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 165833eb0b6dSopenharmony_ci napi_status res = napi_ok; 165933eb0b6dSopenharmony_ci 166033eb0b6dSopenharmony_ci void *data; 166133eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 166233eb0b6dSopenharmony_ci napi_value result = nullptr; 166333eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 166433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 166533eb0b6dSopenharmony_ci 166633eb0b6dSopenharmony_ci bool isShared = false; 166733eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 166833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 166933eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 167033eb0b6dSopenharmony_ci 167133eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_uint32_array, LENGTH / 2, arraybuffer, 1, &result); 167233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 167333eb0b6dSopenharmony_ci} 167433eb0b6dSopenharmony_ci 167533eb0b6dSopenharmony_ci/** 167633eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray016 167733eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 167833eb0b6dSopenharmony_ci * @tc.type: FUNC 167933eb0b6dSopenharmony_ci */ 168033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray016, testing::ext::TestSize.Level1) 168133eb0b6dSopenharmony_ci{ 168233eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 168333eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 168433eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 168533eb0b6dSopenharmony_ci napi_status res = napi_ok; 168633eb0b6dSopenharmony_ci 168733eb0b6dSopenharmony_ci void *data; 168833eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 168933eb0b6dSopenharmony_ci napi_value result = nullptr; 169033eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 169133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 169233eb0b6dSopenharmony_ci 169333eb0b6dSopenharmony_ci bool isShared = false; 169433eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 169533eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 169633eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 169733eb0b6dSopenharmony_ci 169833eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int32_array, LENGTH / 2, arraybuffer, 1, &result); 169933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 170033eb0b6dSopenharmony_ci} 170133eb0b6dSopenharmony_ci 170233eb0b6dSopenharmony_ci/** 170333eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray017 170433eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_typedarray with non-sendable arraybuffer. 170533eb0b6dSopenharmony_ci * @tc.type: FUNC 170633eb0b6dSopenharmony_ci */ 170733eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray017, testing::ext::TestSize.Level1) 170833eb0b6dSopenharmony_ci{ 170933eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 171033eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 171133eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 171233eb0b6dSopenharmony_ci napi_status res = napi_ok; 171333eb0b6dSopenharmony_ci 171433eb0b6dSopenharmony_ci void *data; 171533eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 171633eb0b6dSopenharmony_ci napi_value result = nullptr; 171733eb0b6dSopenharmony_ci res = napi_create_arraybuffer(env, LENGTH, &data, &arraybuffer); 171833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 171933eb0b6dSopenharmony_ci 172033eb0b6dSopenharmony_ci bool isShared = false; 172133eb0b6dSopenharmony_ci res = napi_is_sendable(env, arraybuffer, &isShared); 172233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 172333eb0b6dSopenharmony_ci ASSERT_EQ(isShared, false); 172433eb0b6dSopenharmony_ci 172533eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_float32_array, LENGTH / 2, arraybuffer, 1, &result); 172633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_arraybuffer_expected); 172733eb0b6dSopenharmony_ci} 172833eb0b6dSopenharmony_ci 172933eb0b6dSopenharmony_ci/** 173033eb0b6dSopenharmony_ci * @tc.name: CreateSendableTypedArray018 173133eb0b6dSopenharmony_ci * @tc.desc: Test napi_create_sendable_arraybuffer. 173233eb0b6dSopenharmony_ci * @tc.type: FUNC 173333eb0b6dSopenharmony_ci */ 173433eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableTypedArray018, testing::ext::TestSize.Level1) 173533eb0b6dSopenharmony_ci{ 173633eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 173733eb0b6dSopenharmony_ci static size_t OFFSET = 0; 173833eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 173933eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 174033eb0b6dSopenharmony_ci 174133eb0b6dSopenharmony_ci void* data; 174233eb0b6dSopenharmony_ci napi_value arraybuffer = nullptr; 174333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_arraybuffer(env, LENGTH, &data, &arraybuffer)); 174433eb0b6dSopenharmony_ci 174533eb0b6dSopenharmony_ci for (int type = napi_int8_array; type <= napi_float32_array; ++type) { 174633eb0b6dSopenharmony_ci napi_value result = nullptr; 174733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_typedarray(env, static_cast<napi_typedarray_type>(type), LENGTH / 4, 174833eb0b6dSopenharmony_ci arraybuffer, OFFSET, &result)); 174933eb0b6dSopenharmony_ci bool isTypedArray = false; 175033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_is_typedarray(env, result, &isTypedArray)); 175133eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 175233eb0b6dSopenharmony_ci } 175333eb0b6dSopenharmony_ci} 175433eb0b6dSopenharmony_ci 175533eb0b6dSopenharmony_ci/** 175633eb0b6dSopenharmony_ci * @tc.name: IsDetachedSendableArrayBufferTest001 175733eb0b6dSopenharmony_ci * @tc.desc: Test is DetachedSendableArrayBuffer. 175833eb0b6dSopenharmony_ci * @tc.type: FUNC 175933eb0b6dSopenharmony_ci */ 176033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, IsDetachedSendableArrayBufferTest001, testing::ext::TestSize.Level1) 176133eb0b6dSopenharmony_ci{ 176233eb0b6dSopenharmony_ci static constexpr size_t arrayBufferSize = 1024; 176333eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 176433eb0b6dSopenharmony_ci napi_value arrayBuffer = nullptr; 176533eb0b6dSopenharmony_ci void* arrayBufferPtr = nullptr; 176633eb0b6dSopenharmony_ci napi_create_sendable_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer); 176733eb0b6dSopenharmony_ci 176833eb0b6dSopenharmony_ci auto out = napi_detach_arraybuffer(env, arrayBuffer); 176933eb0b6dSopenharmony_ci if (out == napi_ok) { 177033eb0b6dSopenharmony_ci arrayBufferPtr = nullptr; 177133eb0b6dSopenharmony_ci } 177233eb0b6dSopenharmony_ci ASSERT_EQ(out, napi_ok); 177333eb0b6dSopenharmony_ci} 177433eb0b6dSopenharmony_ci 177533eb0b6dSopenharmony_cistatic napi_value SendableGetter(napi_env env, napi_callback_info info) 177633eb0b6dSopenharmony_ci{ 177733eb0b6dSopenharmony_ci napi_value res; 177833eb0b6dSopenharmony_ci napi_get_boolean(env, false, &res); 177933eb0b6dSopenharmony_ci return res; 178033eb0b6dSopenharmony_ci} 178133eb0b6dSopenharmony_ci 178233eb0b6dSopenharmony_cistatic napi_value SendableSetter(napi_env env, napi_callback_info info) 178333eb0b6dSopenharmony_ci{ 178433eb0b6dSopenharmony_ci napi_value res; 178533eb0b6dSopenharmony_ci napi_get_boolean(env, true, &res); 178633eb0b6dSopenharmony_ci return res; 178733eb0b6dSopenharmony_ci} 178833eb0b6dSopenharmony_ci 178933eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableObjectWithPropertiesTest001, testing::ext::TestSize.Level1) 179033eb0b6dSopenharmony_ci{ 179133eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 179233eb0b6dSopenharmony_ci napi_value excep; 179333eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_and_clear_last_exception(env, &excep)); 179433eb0b6dSopenharmony_ci napi_value val_false; 179533eb0b6dSopenharmony_ci napi_value val_true; 179633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_boolean(env, false, &val_false)); 179733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_boolean(env, true, &val_true)); 179833eb0b6dSopenharmony_ci napi_property_descriptor desc1[] = { 179933eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("x", val_true), 180033eb0b6dSopenharmony_ci }; 180133eb0b6dSopenharmony_ci napi_value obj1; 180233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_object_with_properties(env, 1, desc1, &obj1)); 180333eb0b6dSopenharmony_ci napi_value obj2; 180433eb0b6dSopenharmony_ci napi_property_descriptor desc2[] = { 180533eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("a", val_false), 180633eb0b6dSopenharmony_ci DECLARE_NAPI_GETTER_SETTER("b", SendableGetter, SendableSetter), 180733eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("c", obj1), 180833eb0b6dSopenharmony_ci }; 180933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_object_with_properties(env, 3, desc2, &obj2)); 181033eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, obj1, napi_object); 181133eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, obj2, napi_object); 181233eb0b6dSopenharmony_ci auto checkPropertyEqualsTo = [env](napi_value obj, const char* keyStr, napi_value expect) -> bool { 181333eb0b6dSopenharmony_ci napi_value result; 181433eb0b6dSopenharmony_ci napi_get_named_property(env, obj, keyStr, &result); 181533eb0b6dSopenharmony_ci bool equal = false; 181633eb0b6dSopenharmony_ci napi_strict_equals(env, result, expect, &equal); 181733eb0b6dSopenharmony_ci return equal; 181833eb0b6dSopenharmony_ci }; 181933eb0b6dSopenharmony_ci // get obj1.x == true 182033eb0b6dSopenharmony_ci ASSERT_TRUE(checkPropertyEqualsTo(obj1, "x", val_true)); 182133eb0b6dSopenharmony_ci // set obj1.x = false 182233eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_set_named_property(env, obj1, "x", val_false)); 182333eb0b6dSopenharmony_ci // get obj1.x == false 182433eb0b6dSopenharmony_ci ASSERT_TRUE(checkPropertyEqualsTo(obj1, "x", val_false)); 182533eb0b6dSopenharmony_ci // get obj2.a == false 182633eb0b6dSopenharmony_ci ASSERT_TRUE(checkPropertyEqualsTo(obj2, "a", val_false)); 182733eb0b6dSopenharmony_ci // get obj2.b == false 182833eb0b6dSopenharmony_ci ASSERT_TRUE(checkPropertyEqualsTo(obj2, "b", val_false)); 182933eb0b6dSopenharmony_ci // set obj2.b = true (useless) 183033eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_set_named_property(env, obj2, "b", val_true)); 183133eb0b6dSopenharmony_ci // get obj2.b == false 183233eb0b6dSopenharmony_ci ASSERT_TRUE(checkPropertyEqualsTo(obj2, "b", val_false)); 183333eb0b6dSopenharmony_ci // get obj2.c == obj1 183433eb0b6dSopenharmony_ci ASSERT_TRUE(checkPropertyEqualsTo(obj2, "c", obj1)); 183533eb0b6dSopenharmony_ci // get obj2.c.x == false 183633eb0b6dSopenharmony_ci napi_value val_res; 183733eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_named_property(env, obj2, "c", &val_res)); 183833eb0b6dSopenharmony_ci ASSERT_TRUE(checkPropertyEqualsTo(val_res, "x", val_false)); 183933eb0b6dSopenharmony_ci} 184033eb0b6dSopenharmony_ci 184133eb0b6dSopenharmony_cibool g_funcCalled = false; 184233eb0b6dSopenharmony_cistatic napi_value Func(napi_env env, napi_callback_info info) 184333eb0b6dSopenharmony_ci{ 184433eb0b6dSopenharmony_ci napi_value boolTrue = nullptr; 184533eb0b6dSopenharmony_ci napi_value boolFalse = nullptr; 184633eb0b6dSopenharmony_ci napi_get_boolean(env, true, &boolTrue); 184733eb0b6dSopenharmony_ci napi_get_boolean(env, false, &boolFalse); 184833eb0b6dSopenharmony_ci 184933eb0b6dSopenharmony_ci if (g_funcCalled) { 185033eb0b6dSopenharmony_ci return boolFalse; 185133eb0b6dSopenharmony_ci } 185233eb0b6dSopenharmony_ci 185333eb0b6dSopenharmony_ci char *data = nullptr; 185433eb0b6dSopenharmony_ci napi_value thisVar = nullptr; 185533eb0b6dSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); 185633eb0b6dSopenharmony_ci napi_unwrap_sendable(env, thisVar, reinterpret_cast<void**>(&data)); 185733eb0b6dSopenharmony_ci if (*data == 'a') { 185833eb0b6dSopenharmony_ci g_funcCalled = true; 185933eb0b6dSopenharmony_ci delete [] data; 186033eb0b6dSopenharmony_ci } 186133eb0b6dSopenharmony_ci 186233eb0b6dSopenharmony_ci return boolTrue; 186333eb0b6dSopenharmony_ci} 186433eb0b6dSopenharmony_ci 186533eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, CreateSendableObjectWithPropertiesTest002, testing::ext::TestSize.Level1) 186633eb0b6dSopenharmony_ci{ 186733eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 186833eb0b6dSopenharmony_ci napi_value excep; 186933eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_and_clear_last_exception(env, &excep)); 187033eb0b6dSopenharmony_ci 187133eb0b6dSopenharmony_ci napi_value obj2; 187233eb0b6dSopenharmony_ci napi_property_descriptor desc2[] = { 187333eb0b6dSopenharmony_ci DECLARE_NAPI_FUNCTION("func", Func), 187433eb0b6dSopenharmony_ci }; 187533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_object_with_properties(env, 1, desc2, &obj2)); 187633eb0b6dSopenharmony_ci bool isShared = false; 187733eb0b6dSopenharmony_ci napi_is_sendable(env, obj2, &isShared); 187833eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 187933eb0b6dSopenharmony_ci 188033eb0b6dSopenharmony_ci auto data = new char[2]; 188133eb0b6dSopenharmony_ci *data = 'a'; 188233eb0b6dSopenharmony_ci *(data + 1) = 0; 188333eb0b6dSopenharmony_ci napi_wrap_sendable(env, obj2, data, nullptr, nullptr); 188433eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, obj2, napi_object); 188533eb0b6dSopenharmony_ci napi_value func = nullptr; 188633eb0b6dSopenharmony_ci napi_value ret = nullptr; 188733eb0b6dSopenharmony_ci napi_get_named_property(env, obj2, "func", &func); 188833eb0b6dSopenharmony_ci ASSERT_EQ(g_funcCalled, false); 188933eb0b6dSopenharmony_ci napi_call_function(env, obj2, func, 0, nullptr, &ret); 189033eb0b6dSopenharmony_ci bool resultBool = false; 189133eb0b6dSopenharmony_ci napi_get_value_bool(env, ret, &resultBool); 189233eb0b6dSopenharmony_ci ASSERT_EQ(resultBool, true); 189333eb0b6dSopenharmony_ci ASSERT_EQ(g_funcCalled, true); 189433eb0b6dSopenharmony_ci} 189533eb0b6dSopenharmony_ci 189633eb0b6dSopenharmony_ci/** 189733eb0b6dSopenharmony_ci * @tc.name: SerializeDeSerializeSendableDataTest001 189833eb0b6dSopenharmony_ci * @tc.desc: Test serialize & deserialize sendableArray. 189933eb0b6dSopenharmony_ci * @tc.type: FUNC 190033eb0b6dSopenharmony_ci */ 190133eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SerializeDeSerializeSendableDataTest001, testing::ext::TestSize.Level1) 190233eb0b6dSopenharmony_ci{ 190333eb0b6dSopenharmony_ci napi_env env = (napi_env)engine_; 190433eb0b6dSopenharmony_ci napi_status res = napi_ok; 190533eb0b6dSopenharmony_ci napi_value excep; 190633eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_get_and_clear_last_exception(env, &excep)); 190733eb0b6dSopenharmony_ci napi_value num = nullptr; 190833eb0b6dSopenharmony_ci uint32_t value = 1000; 190933eb0b6dSopenharmony_ci res = napi_create_uint32(env, value, &num); 191033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 191133eb0b6dSopenharmony_ci napi_property_descriptor desc[] = { 191233eb0b6dSopenharmony_ci DECLARE_NAPI_DEFAULT_PROPERTY("a", num), 191333eb0b6dSopenharmony_ci }; 191433eb0b6dSopenharmony_ci napi_value obj; 191533eb0b6dSopenharmony_ci ASSERT_CHECK_CALL(napi_create_sendable_object_with_properties(env, 1, desc, &obj)); 191633eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, obj, napi_object); 191733eb0b6dSopenharmony_ci 191833eb0b6dSopenharmony_ci napi_value undefined = nullptr; 191933eb0b6dSopenharmony_ci napi_get_undefined(env, &undefined); 192033eb0b6dSopenharmony_ci void* data = nullptr; 192133eb0b6dSopenharmony_ci res = napi_serialize(env, obj, undefined, undefined, &data); 192233eb0b6dSopenharmony_ci ASSERT_NE(data, nullptr); 192333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 192433eb0b6dSopenharmony_ci 192533eb0b6dSopenharmony_ci napi_value result1 = nullptr; 192633eb0b6dSopenharmony_ci res = napi_deserialize(env, data, &result1); 192733eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, result1, napi_object); 192833eb0b6dSopenharmony_ci 192933eb0b6dSopenharmony_ci napi_value number1 = nullptr;; 193033eb0b6dSopenharmony_ci napi_get_named_property(env, result1, "a", &number1); 193133eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, number1, napi_number); 193233eb0b6dSopenharmony_ci 193333eb0b6dSopenharmony_ci napi_delete_serialization_data(env, data); 193433eb0b6dSopenharmony_ci} 193533eb0b6dSopenharmony_ci 193633eb0b6dSopenharmony_ci/** 193733eb0b6dSopenharmony_ci * @tc.name: SerializeDeSerializeSendableDataTest002 193833eb0b6dSopenharmony_ci * @tc.desc: Test serialize & deserialize sendableArray. 193933eb0b6dSopenharmony_ci * @tc.type: FUNC 194033eb0b6dSopenharmony_ci */ 194133eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SerializeDeSerializeSendableDataTest002, testing::ext::TestSize.Level1) 194233eb0b6dSopenharmony_ci{ 194333eb0b6dSopenharmony_ci napi_env env = (napi_env) engine_; 194433eb0b6dSopenharmony_ci 194533eb0b6dSopenharmony_ci napi_status res = napi_ok; 194633eb0b6dSopenharmony_ci napi_value sendableArray = nullptr; 194733eb0b6dSopenharmony_ci napi_create_sendable_array(env, &sendableArray); 194833eb0b6dSopenharmony_ci ASSERT_NE(sendableArray, nullptr); 194933eb0b6dSopenharmony_ci bool isShared = false; 195033eb0b6dSopenharmony_ci res = napi_is_sendable(env, sendableArray, &isShared); 195133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 195233eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 195333eb0b6dSopenharmony_ci bool isArray = false; 195433eb0b6dSopenharmony_ci napi_is_array(env, sendableArray, &isArray); 195533eb0b6dSopenharmony_ci ASSERT_TRUE(isArray); 195633eb0b6dSopenharmony_ci for (size_t i = 0; i < 10; i++) { 195733eb0b6dSopenharmony_ci napi_value num = nullptr; 195833eb0b6dSopenharmony_ci napi_create_uint32(env, i, &num); 195933eb0b6dSopenharmony_ci napi_set_element(env, sendableArray, i, num); 196033eb0b6dSopenharmony_ci } 196133eb0b6dSopenharmony_ci 196233eb0b6dSopenharmony_ci uint32_t length = 0; 196333eb0b6dSopenharmony_ci res = napi_get_array_length(env, sendableArray, &length); 196433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 196533eb0b6dSopenharmony_ci ASSERT_EQ(length, 10u); 196633eb0b6dSopenharmony_ci 196733eb0b6dSopenharmony_ci napi_value undefined = nullptr; 196833eb0b6dSopenharmony_ci napi_get_undefined(env, &undefined); 196933eb0b6dSopenharmony_ci void* data = nullptr; 197033eb0b6dSopenharmony_ci res = napi_serialize(env, sendableArray, undefined, undefined, &data); 197133eb0b6dSopenharmony_ci ASSERT_NE(data, nullptr); 197233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 197333eb0b6dSopenharmony_ci 197433eb0b6dSopenharmony_ci napi_value result1 = nullptr; 197533eb0b6dSopenharmony_ci napi_deserialize(env, data, &result1); 197633eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, result1, napi_object); 197733eb0b6dSopenharmony_ci 197833eb0b6dSopenharmony_ci res = napi_get_array_length(env, result1, &length); 197933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 198033eb0b6dSopenharmony_ci ASSERT_EQ(length, 10u); 198133eb0b6dSopenharmony_ci 198233eb0b6dSopenharmony_ci napi_delete_serialization_data(env, data); 198333eb0b6dSopenharmony_ci} 198433eb0b6dSopenharmony_ci 198533eb0b6dSopenharmony_ci/** 198633eb0b6dSopenharmony_ci * @tc.name: SerializeDeSerializeSendableDataTest003 198733eb0b6dSopenharmony_ci * @tc.desc: Test serialize & deserialize sendableArrayWithLength. 198833eb0b6dSopenharmony_ci * @tc.type: FUNC 198933eb0b6dSopenharmony_ci */ 199033eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SerializeDeSerializeSendableDataTest003, testing::ext::TestSize.Level1) 199133eb0b6dSopenharmony_ci{ 199233eb0b6dSopenharmony_ci static uint32_t LENGTH = 1024; 199333eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 199433eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 199533eb0b6dSopenharmony_ci napi_status res = napi_ok; 199633eb0b6dSopenharmony_ci 199733eb0b6dSopenharmony_ci napi_value sendableArray = nullptr; 199833eb0b6dSopenharmony_ci res = napi_create_sendable_array_with_length(env, LENGTH, &sendableArray); 199933eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 200033eb0b6dSopenharmony_ci 200133eb0b6dSopenharmony_ci bool isShared = false; 200233eb0b6dSopenharmony_ci res = napi_is_sendable(env, sendableArray, &isShared); 200333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 200433eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 200533eb0b6dSopenharmony_ci bool isArray = false; 200633eb0b6dSopenharmony_ci napi_is_array(env, sendableArray, &isArray); 200733eb0b6dSopenharmony_ci ASSERT_TRUE(isArray); 200833eb0b6dSopenharmony_ci for (size_t i = 0; i < 100; i++) { 200933eb0b6dSopenharmony_ci napi_value num = nullptr; 201033eb0b6dSopenharmony_ci napi_create_uint32(env, i, &num); 201133eb0b6dSopenharmony_ci napi_set_element(env, sendableArray, i, num); 201233eb0b6dSopenharmony_ci } 201333eb0b6dSopenharmony_ci 201433eb0b6dSopenharmony_ci uint32_t length = 0; 201533eb0b6dSopenharmony_ci res = napi_get_array_length(env, sendableArray, &length); 201633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 201733eb0b6dSopenharmony_ci ASSERT_EQ(length, 1024); 201833eb0b6dSopenharmony_ci 201933eb0b6dSopenharmony_ci napi_value undefined = nullptr; 202033eb0b6dSopenharmony_ci napi_get_undefined(env, &undefined); 202133eb0b6dSopenharmony_ci void* data = nullptr; 202233eb0b6dSopenharmony_ci res = napi_serialize(env, sendableArray, undefined, undefined, &data); 202333eb0b6dSopenharmony_ci ASSERT_NE(data, nullptr); 202433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 202533eb0b6dSopenharmony_ci 202633eb0b6dSopenharmony_ci napi_value result1 = nullptr; 202733eb0b6dSopenharmony_ci napi_deserialize(env, data, &result1); 202833eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, result1, napi_object); 202933eb0b6dSopenharmony_ci 203033eb0b6dSopenharmony_ci res = napi_get_array_length(env, result1, &length); 203133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 203233eb0b6dSopenharmony_ci ASSERT_EQ(length, 1024); 203333eb0b6dSopenharmony_ci 203433eb0b6dSopenharmony_ci napi_delete_serialization_data(env, data); 203533eb0b6dSopenharmony_ci} 203633eb0b6dSopenharmony_ci 203733eb0b6dSopenharmony_ci/** 203833eb0b6dSopenharmony_ci * @tc.name: SerializeDeSerializeSendableDataTest004 203933eb0b6dSopenharmony_ci * @tc.desc: Test serialize & deserialize sendableTypedArray. 204033eb0b6dSopenharmony_ci * @tc.type: FUNC 204133eb0b6dSopenharmony_ci */ 204233eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SerializeDeSerializeSendableDataTest004, testing::ext::TestSize.Level1) 204333eb0b6dSopenharmony_ci{ 204433eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 204533eb0b6dSopenharmony_ci static size_t OFFSET = 128; 204633eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 204733eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 204833eb0b6dSopenharmony_ci napi_status res = napi_ok; 204933eb0b6dSopenharmony_ci 205033eb0b6dSopenharmony_ci void *tmpData; 205133eb0b6dSopenharmony_ci napi_value sendableArraybuffer = nullptr; 205233eb0b6dSopenharmony_ci napi_value sendableTypedarray = nullptr; 205333eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &tmpData, &sendableArraybuffer); 205433eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 205533eb0b6dSopenharmony_ci 205633eb0b6dSopenharmony_ci bool isShared = false; 205733eb0b6dSopenharmony_ci res = napi_is_sendable(env, sendableArraybuffer, &isShared); 205833eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 205933eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 206033eb0b6dSopenharmony_ci 206133eb0b6dSopenharmony_ci res = napi_create_sendable_typedarray(env, napi_int8_array, LENGTH / 2, 206233eb0b6dSopenharmony_ci sendableArraybuffer, OFFSET, &sendableTypedarray); 206333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 206433eb0b6dSopenharmony_ci 206533eb0b6dSopenharmony_ci isShared = false; 206633eb0b6dSopenharmony_ci res = napi_is_sendable(env, sendableArraybuffer, &isShared); 206733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 206833eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 206933eb0b6dSopenharmony_ci 207033eb0b6dSopenharmony_ci bool isTypedArray = false; 207133eb0b6dSopenharmony_ci res = napi_is_typedarray(env, sendableTypedarray, &isTypedArray); 207233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 207333eb0b6dSopenharmony_ci ASSERT_EQ(isTypedArray, true); 207433eb0b6dSopenharmony_ci 207533eb0b6dSopenharmony_ci napi_value undefined = nullptr; 207633eb0b6dSopenharmony_ci napi_get_undefined(env, &undefined); 207733eb0b6dSopenharmony_ci void* data = nullptr; 207833eb0b6dSopenharmony_ci res = napi_serialize(env, sendableTypedarray, undefined, undefined, &data); 207933eb0b6dSopenharmony_ci ASSERT_NE(data, nullptr); 208033eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 208133eb0b6dSopenharmony_ci 208233eb0b6dSopenharmony_ci napi_value result = nullptr; 208333eb0b6dSopenharmony_ci res = napi_deserialize(env, data, &result); 208433eb0b6dSopenharmony_ci ASSERT_CHECK_VALUE_TYPE(env, result, napi_object); 208533eb0b6dSopenharmony_ci 208633eb0b6dSopenharmony_ci napi_typedarray_type type = napi_uint8_array; 208733eb0b6dSopenharmony_ci size_t length = 0; 208833eb0b6dSopenharmony_ci void *getData = nullptr; 208933eb0b6dSopenharmony_ci napi_value getArrayBuffer = nullptr; 209033eb0b6dSopenharmony_ci size_t byteOffset = 0; 209133eb0b6dSopenharmony_ci res = napi_get_typedarray_info(env, result, &type, &length, &getData, &getArrayBuffer, &byteOffset); 209233eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 209333eb0b6dSopenharmony_ci 209433eb0b6dSopenharmony_ci ASSERT_EQ(type, napi_int8_array); 209533eb0b6dSopenharmony_ci ASSERT_EQ(length, LENGTH / 2); 209633eb0b6dSopenharmony_ci ASSERT_EQ(reinterpret_cast<size_t>(getData), reinterpret_cast<size_t>(tmpData) + OFFSET); 209733eb0b6dSopenharmony_ci ASSERT_EQ(byteOffset, OFFSET); 209833eb0b6dSopenharmony_ci 209933eb0b6dSopenharmony_ci napi_delete_serialization_data(env, data); 210033eb0b6dSopenharmony_ci} 210133eb0b6dSopenharmony_ci 210233eb0b6dSopenharmony_ci/** 210333eb0b6dSopenharmony_ci * @tc.name: SerializeDeSerializeSendableDataTest005 210433eb0b6dSopenharmony_ci * @tc.desc: Test serialize & deserialize sendableArrayBuffer. 210533eb0b6dSopenharmony_ci * @tc.type: FUNC 210633eb0b6dSopenharmony_ci */ 210733eb0b6dSopenharmony_ciHWTEST_F(NapiSendableTest, SerializeDeSerializeSendableDataTest005, testing::ext::TestSize.Level1) 210833eb0b6dSopenharmony_ci{ 210933eb0b6dSopenharmony_ci static size_t LENGTH = 1024; 211033eb0b6dSopenharmony_ci ASSERT_NE(engine_, nullptr); 211133eb0b6dSopenharmony_ci napi_env env = reinterpret_cast<napi_env>(engine_); 211233eb0b6dSopenharmony_ci napi_status res = napi_ok; 211333eb0b6dSopenharmony_ci 211433eb0b6dSopenharmony_ci void *tmpData; 211533eb0b6dSopenharmony_ci napi_value sendableBuffer = nullptr; 211633eb0b6dSopenharmony_ci res = napi_create_sendable_arraybuffer(env, LENGTH, &tmpData, &sendableBuffer); 211733eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 211833eb0b6dSopenharmony_ci 211933eb0b6dSopenharmony_ci bool isShared = false; 212033eb0b6dSopenharmony_ci res = napi_is_sendable(env, sendableBuffer, &isShared); 212133eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 212233eb0b6dSopenharmony_ci ASSERT_EQ(isShared, true); 212333eb0b6dSopenharmony_ci 212433eb0b6dSopenharmony_ci bool isArrayBuffer = false; 212533eb0b6dSopenharmony_ci res = napi_is_arraybuffer(env, sendableBuffer, &isArrayBuffer); 212633eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 212733eb0b6dSopenharmony_ci ASSERT_EQ(isArrayBuffer, true); 212833eb0b6dSopenharmony_ci 212933eb0b6dSopenharmony_ci napi_value undefined = nullptr; 213033eb0b6dSopenharmony_ci napi_get_undefined(env, &undefined); 213133eb0b6dSopenharmony_ci void* data = nullptr; 213233eb0b6dSopenharmony_ci res = napi_serialize(env, sendableBuffer, undefined, undefined, &data); 213333eb0b6dSopenharmony_ci ASSERT_EQ(res, napi_ok); 213433eb0b6dSopenharmony_ci ASSERT_NE(data, nullptr); 213533eb0b6dSopenharmony_ci 213633eb0b6dSopenharmony_ci napi_delete_serialization_data(env, data); 213733eb0b6dSopenharmony_ci}