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}