14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci#include <cstddef>
174514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins.h"
184514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_function.h"
194514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_object.h"
204514f5e3Sopenharmony_ci#include "ecmascript/checkpoint/thread_state_transition.h"
214514f5e3Sopenharmony_ci#include "ecmascript/compiler/aot_file/an_file_data_manager.h"
224514f5e3Sopenharmony_ci#include "ecmascript/compiler/aot_file/aot_file_manager.h"
234514f5e3Sopenharmony_ci#include "ecmascript/compiler/circuit_builder_helper.h"
244514f5e3Sopenharmony_ci#include "ecmascript/deoptimizer/deoptimizer.h"
254514f5e3Sopenharmony_ci#include "ecmascript/ecma_global_storage.h"
264514f5e3Sopenharmony_ci#include "ecmascript/ecma_vm.h"
274514f5e3Sopenharmony_ci#include "ecmascript/global_env.h"
284514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_tree_map.h"
294514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_tree_set.h"
304514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_vector.h"
314514f5e3Sopenharmony_ci#include "ecmascript/js_array.h"
324514f5e3Sopenharmony_ci#include "ecmascript/js_bigint.h"
334514f5e3Sopenharmony_ci#include "ecmascript/js_date_time_format.h"
344514f5e3Sopenharmony_ci#include "ecmascript/js_generator_object.h"
354514f5e3Sopenharmony_ci#include "ecmascript/js_map.h"
364514f5e3Sopenharmony_ci#include "ecmascript/js_map_iterator.h"
374514f5e3Sopenharmony_ci#include "ecmascript/js_object-inl.h"
384514f5e3Sopenharmony_ci#include "ecmascript/js_primitive_ref.h"
394514f5e3Sopenharmony_ci#include "ecmascript/js_regexp.h"
404514f5e3Sopenharmony_ci#include "ecmascript/js_runtime_options.h"
414514f5e3Sopenharmony_ci#include "ecmascript/js_set.h"
424514f5e3Sopenharmony_ci#include "ecmascript/js_set_iterator.h"
434514f5e3Sopenharmony_ci#include "ecmascript/js_tagged_value.h"
444514f5e3Sopenharmony_ci#include "ecmascript/js_typed_array.h"
454514f5e3Sopenharmony_ci#include "ecmascript/js_thread.h"
464514f5e3Sopenharmony_ci#include "ecmascript/js_weak_container.h"
474514f5e3Sopenharmony_ci#include "ecmascript/linked_hash_table.h"
484514f5e3Sopenharmony_ci#include "ecmascript/mem/mem_map_allocator.h"
494514f5e3Sopenharmony_ci#include "ecmascript/module/js_module_manager.h"
504514f5e3Sopenharmony_ci#include "ecmascript/module/js_module_source_text.h"
514514f5e3Sopenharmony_ci#include "ecmascript/napi/include/jsnapi.h"
524514f5e3Sopenharmony_ci#include "ecmascript/napi/include/jsnapi_internals.h"
534514f5e3Sopenharmony_ci#include "ecmascript/napi/jsnapi_helper.h"
544514f5e3Sopenharmony_ci#include "ecmascript/object_factory.h"
554514f5e3Sopenharmony_ci#include "ecmascript/pgo_profiler/pgo_profiler.h"
564514f5e3Sopenharmony_ci#include "ecmascript/pgo_profiler/pgo_profiler_decoder.h"
574514f5e3Sopenharmony_ci#include "ecmascript/pgo_profiler/pgo_profiler_encoder.h"
584514f5e3Sopenharmony_ci#include "ecmascript/pgo_profiler/pgo_profiler_manager.h"
594514f5e3Sopenharmony_ci#include "ecmascript/tagged_array.h"
604514f5e3Sopenharmony_ci#include "ecmascript/tests/test_helper.h"
614514f5e3Sopenharmony_ci#include "ecmascript/tagged_tree.h"
624514f5e3Sopenharmony_ci#include "ecmascript/weak_vector.h"
634514f5e3Sopenharmony_ci#include "gtest/gtest.h"
644514f5e3Sopenharmony_ci
654514f5e3Sopenharmony_ciusing namespace panda;
664514f5e3Sopenharmony_ciusing namespace panda::ecmascript;
674514f5e3Sopenharmony_ciusing namespace panda::ecmascript::kungfu;
684514f5e3Sopenharmony_cistatic const char *TEST_KEY = "TestKey";
694514f5e3Sopenharmony_cistatic const char *TEST_VALUE = "TestValue";
704514f5e3Sopenharmony_cistatic const char *TEST_NUM1 = "-3.14";
714514f5e3Sopenharmony_cistatic const char *TEST_NUM2 = "-123.3";
724514f5e3Sopenharmony_cistatic const int INT_ONE = 1;
734514f5e3Sopenharmony_cistatic const int INT_MINUS_1 = -1;
744514f5e3Sopenharmony_cistatic const char *STR_TEST = "Test";
754514f5e3Sopenharmony_cistatic const char *STR_NUM = "123";
764514f5e3Sopenharmony_ciconstexpr char ARK_DEBUGGER_LIB_PATH[] = "LIBRARYPATH";
774514f5e3Sopenharmony_ci
784514f5e3Sopenharmony_cinamespace panda::test {
794514f5e3Sopenharmony_ciusing BuiltinsFunction = ecmascript::builtins::BuiltinsFunction;
804514f5e3Sopenharmony_ciusing PGOProfilerManager = panda::ecmascript::pgo::PGOProfilerManager;
814514f5e3Sopenharmony_ciusing FunctionForRef = Local<JSValueRef> (*)(JsiRuntimeCallInfo *);
824514f5e3Sopenharmony_ciclass JSNApiTests : public testing::Test {
834514f5e3Sopenharmony_cipublic:
844514f5e3Sopenharmony_ci    static void SetUpTestCase()
854514f5e3Sopenharmony_ci    {
864514f5e3Sopenharmony_ci        GTEST_LOG_(INFO) << "SetUpTestCase";
874514f5e3Sopenharmony_ci    }
884514f5e3Sopenharmony_ci
894514f5e3Sopenharmony_ci    static void TearDownTestCase()
904514f5e3Sopenharmony_ci    {
914514f5e3Sopenharmony_ci        GTEST_LOG_(INFO) << "TearDownCase";
924514f5e3Sopenharmony_ci    }
934514f5e3Sopenharmony_ci
944514f5e3Sopenharmony_ci    void SetUp() override
954514f5e3Sopenharmony_ci    {
964514f5e3Sopenharmony_ci        RuntimeOption option;
974514f5e3Sopenharmony_ci        option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR);
984514f5e3Sopenharmony_ci        vm_ = JSNApi::CreateJSVM(option);
994514f5e3Sopenharmony_ci        ASSERT_TRUE(vm_ != nullptr) << "Cannot create Runtime";
1004514f5e3Sopenharmony_ci        thread_ = vm_->GetJSThread();
1014514f5e3Sopenharmony_ci        vm_->SetEnableForceGC(true);
1024514f5e3Sopenharmony_ci        thread_->ManagedCodeBegin();
1034514f5e3Sopenharmony_ci    }
1044514f5e3Sopenharmony_ci
1054514f5e3Sopenharmony_ci    void TearDown() override
1064514f5e3Sopenharmony_ci    {
1074514f5e3Sopenharmony_ci        thread_->ManagedCodeEnd();
1084514f5e3Sopenharmony_ci        vm_->SetEnableForceGC(false);
1094514f5e3Sopenharmony_ci        JSNApi::DestroyJSVM(vm_);
1104514f5e3Sopenharmony_ci    }
1114514f5e3Sopenharmony_ci
1124514f5e3Sopenharmony_ci    template <typename T> void TestNumberRef(T val, TaggedType expected)
1134514f5e3Sopenharmony_ci    {
1144514f5e3Sopenharmony_ci        LocalScope scope(vm_);
1154514f5e3Sopenharmony_ci        Local<NumberRef> obj = NumberRef::New(vm_, val);
1164514f5e3Sopenharmony_ci        ASSERT_TRUE(obj->IsNumber());
1174514f5e3Sopenharmony_ci        JSTaggedType res = JSNApiHelper::ToJSTaggedValue(*obj).GetRawData();
1184514f5e3Sopenharmony_ci        ASSERT_EQ(res, expected);
1194514f5e3Sopenharmony_ci        if constexpr (std::is_floating_point_v<T>) {
1204514f5e3Sopenharmony_ci            if (std::isnan(val)) {
1214514f5e3Sopenharmony_ci                ASSERT_TRUE(std::isnan(obj->Value()));
1224514f5e3Sopenharmony_ci            } else {
1234514f5e3Sopenharmony_ci                ASSERT_EQ(obj->Value(), val);
1244514f5e3Sopenharmony_ci            }
1254514f5e3Sopenharmony_ci        } else if constexpr (sizeof(T) >= sizeof(int32_t)) {
1264514f5e3Sopenharmony_ci            ASSERT_EQ(obj->IntegerValue(vm_), val);
1274514f5e3Sopenharmony_ci        } else if constexpr (std::is_signed_v<T>) {
1284514f5e3Sopenharmony_ci            ASSERT_EQ(obj->Int32Value(vm_), val);
1294514f5e3Sopenharmony_ci        } else {
1304514f5e3Sopenharmony_ci            ASSERT_EQ(obj->Uint32Value(vm_), val);
1314514f5e3Sopenharmony_ci        }
1324514f5e3Sopenharmony_ci    }
1334514f5e3Sopenharmony_ci
1344514f5e3Sopenharmony_ci    TaggedType ConvertDouble(double val)
1354514f5e3Sopenharmony_ci    {
1364514f5e3Sopenharmony_ci        return base::bit_cast<JSTaggedType>(val) + JSTaggedValue::DOUBLE_ENCODE_OFFSET;
1374514f5e3Sopenharmony_ci    }
1384514f5e3Sopenharmony_ci
1394514f5e3Sopenharmony_ciprotected:
1404514f5e3Sopenharmony_ci    JSThread *thread_ = nullptr;
1414514f5e3Sopenharmony_ci    EcmaVM *vm_ = nullptr;
1424514f5e3Sopenharmony_ci};
1434514f5e3Sopenharmony_ci
1444514f5e3Sopenharmony_ciLocal<JSValueRef> FunctionCallback(JsiRuntimeCallInfo *info)
1454514f5e3Sopenharmony_ci{
1464514f5e3Sopenharmony_ci    EscapeLocalScope scope(info->GetVM());
1474514f5e3Sopenharmony_ci    return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
1484514f5e3Sopenharmony_ci}
1494514f5e3Sopenharmony_ci
1504514f5e3Sopenharmony_civoid WeakRefCallback(EcmaVM *vm)
1514514f5e3Sopenharmony_ci{
1524514f5e3Sopenharmony_ci    LocalScope scope(vm);
1534514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm);
1544514f5e3Sopenharmony_ci    Global<ObjectRef> globalObject(vm, object);
1554514f5e3Sopenharmony_ci    globalObject.SetWeak();
1564514f5e3Sopenharmony_ci    Local<ObjectRef> object1 = ObjectRef::New(vm);
1574514f5e3Sopenharmony_ci    Global<ObjectRef> globalObject1(vm, object1);
1584514f5e3Sopenharmony_ci    globalObject1.SetWeak();
1594514f5e3Sopenharmony_ci    vm->CollectGarbage(TriggerGCType::YOUNG_GC);
1604514f5e3Sopenharmony_ci    vm->CollectGarbage(TriggerGCType::OLD_GC);
1614514f5e3Sopenharmony_ci    globalObject.FreeGlobalHandleAddr();
1624514f5e3Sopenharmony_ci}
1634514f5e3Sopenharmony_ci
1644514f5e3Sopenharmony_civoid ThreadCheck(const EcmaVM *vm)
1654514f5e3Sopenharmony_ci{
1664514f5e3Sopenharmony_ci    EXPECT_TRUE(vm->GetJSThread()->GetThreadId() != JSThread::GetCurrentThreadId());
1674514f5e3Sopenharmony_ci}
1684514f5e3Sopenharmony_ci
1694514f5e3Sopenharmony_civoid CheckReject(JsiRuntimeCallInfo *info)
1704514f5e3Sopenharmony_ci{
1714514f5e3Sopenharmony_ci    ASSERT_EQ(info->GetArgsNumber(), 1U);
1724514f5e3Sopenharmony_ci    Local<JSValueRef> reason = info->GetCallArgRef(0);
1734514f5e3Sopenharmony_ci    ASSERT_TRUE(reason->IsString(info->GetVM()));
1744514f5e3Sopenharmony_ci    ASSERT_EQ(Local<StringRef>(reason)->ToString(info->GetVM()), "Reject");
1754514f5e3Sopenharmony_ci}
1764514f5e3Sopenharmony_ci
1774514f5e3Sopenharmony_ciLocal<JSValueRef> RejectCallback(JsiRuntimeCallInfo *info)
1784514f5e3Sopenharmony_ci{
1794514f5e3Sopenharmony_ci    LocalScope scope(info->GetVM());
1804514f5e3Sopenharmony_ci    CheckReject(info);
1814514f5e3Sopenharmony_ci    return JSValueRef::Undefined(info->GetVM());
1824514f5e3Sopenharmony_ci}
1834514f5e3Sopenharmony_ci
1844514f5e3Sopenharmony_ci/**
1854514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_054
1864514f5e3Sopenharmony_ci * @tc.name: NumberRef_uint32_int64
1874514f5e3Sopenharmony_ci * @tc.desc:Define the variable input of type uint32_t and int64_t to determine whether the object is of numerical type
1884514f5e3Sopenharmony_ci * @tc.type: FUNC
1894514f5e3Sopenharmony_ci * @tc.require:  parameter
1904514f5e3Sopenharmony_ci */
1914514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, NumberRef_uint32_int64)
1924514f5e3Sopenharmony_ci{
1934514f5e3Sopenharmony_ci    uint32_t input = 32;
1944514f5e3Sopenharmony_ci    int64_t input1 = 1;
1954514f5e3Sopenharmony_ci    Local<NumberRef> res = NumberRef::New(vm_, input);
1964514f5e3Sopenharmony_ci    Local<NumberRef> res1 = NumberRef::New(vm_, input1);
1974514f5e3Sopenharmony_ci    ASSERT_TRUE(res->IsNumber());
1984514f5e3Sopenharmony_ci    ASSERT_TRUE(res1->IsNumber());
1994514f5e3Sopenharmony_ci}
2004514f5e3Sopenharmony_ci
2014514f5e3Sopenharmony_ci/**
2024514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_055
2034514f5e3Sopenharmony_ci * @tc.name: NumberRef_int32_t_double
2044514f5e3Sopenharmony_ci * @tc.desc:Define the variable input of type int32 and double to determine whether the object is of numerical type
2054514f5e3Sopenharmony_ci * @tc.type: FUNC
2064514f5e3Sopenharmony_ci * @tc.require:  parameter
2074514f5e3Sopenharmony_ci */
2084514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, NumberRef_int32_t_double)
2094514f5e3Sopenharmony_ci{
2104514f5e3Sopenharmony_ci    int32_t input = -1;
2114514f5e3Sopenharmony_ci    double input1 = 1.1;
2124514f5e3Sopenharmony_ci    Local<NumberRef> res = NumberRef::New(vm_, input);
2134514f5e3Sopenharmony_ci    Local<NumberRef> res1 = NumberRef::New(vm_, input1);
2144514f5e3Sopenharmony_ci    ASSERT_TRUE(res->IsNumber());
2154514f5e3Sopenharmony_ci    ASSERT_TRUE(res1->IsNumber());
2164514f5e3Sopenharmony_ci}
2174514f5e3Sopenharmony_ci
2184514f5e3Sopenharmony_ci/**
2194514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_056
2204514f5e3Sopenharmony_ci * @tc.name: ObjectRef_Freeze
2214514f5e3Sopenharmony_ci * @tc.desc:Execute a Freeze operation and call the JSObject:: SetIntegrity Level method to achieve immutability
2224514f5e3Sopenharmony_ci * @tc.type: FUNC
2234514f5e3Sopenharmony_ci * @tc.require:  parameter
2244514f5e3Sopenharmony_ci */
2254514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ObjectRef_Freeze)
2264514f5e3Sopenharmony_ci{
2274514f5e3Sopenharmony_ci    LocalScope scope(vm_);
2284514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm_);
2294514f5e3Sopenharmony_ci    thread_ = vm_->GetJSThread();
2304514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
2314514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> set = env->GetBuiltinsSetFunction();
2324514f5e3Sopenharmony_ci    object->Freeze(vm_);
2334514f5e3Sopenharmony_ci    ecmascript::ThreadManagedScope managedScope(thread_);
2344514f5e3Sopenharmony_ci    bool status = JSObject::SetIntegrityLevel(thread_, JSHandle<JSObject>::Cast(set), IntegrityLevel::FROZEN);
2354514f5e3Sopenharmony_ci    ASSERT_TRUE(status);
2364514f5e3Sopenharmony_ci}
2374514f5e3Sopenharmony_ci
2384514f5e3Sopenharmony_ci/**
2394514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_057
2404514f5e3Sopenharmony_ci * @tc.name: ObjectRef_Seal
2414514f5e3Sopenharmony_ci * @tc.desc:The function is to perform a closed (Seal) operation by calling the JSObject::SetIntegrity Level method
2424514f5e3Sopenharmony_ci * to ensure that its properties cannot be modified or deleted, and to set the integrity level of
2434514f5e3Sopenharmony_ci * the object to SEALED
2444514f5e3Sopenharmony_ci * @tc.type: FUNC
2454514f5e3Sopenharmony_ci * @tc.require:  parameter
2464514f5e3Sopenharmony_ci */
2474514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ObjectRef_Seal)
2484514f5e3Sopenharmony_ci{
2494514f5e3Sopenharmony_ci    LocalScope scope(vm_);
2504514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm_); // 创建一个新的空对象
2514514f5e3Sopenharmony_ci    thread_ = vm_->GetJSThread();
2524514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
2534514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> set = env->GetBuiltinsSetFunction();
2544514f5e3Sopenharmony_ci    object->Seal(vm_); // 尝试将对象封闭
2554514f5e3Sopenharmony_ci    ecmascript::ThreadManagedScope managedScope(thread_);
2564514f5e3Sopenharmony_ci    bool status = JSObject::SetIntegrityLevel(thread_, JSHandle<JSObject>::Cast(set), IntegrityLevel::SEALED);
2574514f5e3Sopenharmony_ci    ASSERT_TRUE(status);
2584514f5e3Sopenharmony_ci}
2594514f5e3Sopenharmony_ci
2604514f5e3Sopenharmony_ci/**
2614514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_058
2624514f5e3Sopenharmony_ci * @tc.name: ObjectRef_GetAllPropertyNames
2634514f5e3Sopenharmony_ci * @tc.desc:Use the GetAllPropertyNames method to obtain all property names of the object and return an ArrayRef object.
2644514f5e3Sopenharmony_ci * @tc.type: FUNC
2654514f5e3Sopenharmony_ci * @tc.require:  parameter
2664514f5e3Sopenharmony_ci */
2674514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ObjectRef_GetAllPropertyNames)
2684514f5e3Sopenharmony_ci{
2694514f5e3Sopenharmony_ci    LocalScope scope(vm_);
2704514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm_);
2714514f5e3Sopenharmony_ci    uint32_t filter = 3;
2724514f5e3Sopenharmony_ci    Local<ArrayRef> res = object->GetAllPropertyNames(vm_, filter);
2734514f5e3Sopenharmony_ci    ASSERT_FALSE(res->IsBigInt(vm_));
2744514f5e3Sopenharmony_ci    ASSERT_TRUE(res->IsArray(vm_));
2754514f5e3Sopenharmony_ci}
2764514f5e3Sopenharmony_ci
2774514f5e3Sopenharmony_ci/**
2784514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_059
2794514f5e3Sopenharmony_ci * @tc.name: GetIndex
2804514f5e3Sopenharmony_ci * @tc.desc:Call the GetIndex() function to obtain the index value and use EXCECT_ EQ()
2814514f5e3Sopenharmony_ci * assertion is used to verify whether the result is 0, which is the initial index value.
2824514f5e3Sopenharmony_ci * @tc.type: FUNC
2834514f5e3Sopenharmony_ci * @tc.require:  parameter
2844514f5e3Sopenharmony_ci */
2854514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetIndex)
2864514f5e3Sopenharmony_ci{
2874514f5e3Sopenharmony_ci    ecmascript::ThreadManagedScope managedScope(vm_->GetJSThread());
2884514f5e3Sopenharmony_ci    LocalScope scope(vm_);
2894514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
2904514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
2914514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
2924514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsMapFunction();
2934514f5e3Sopenharmony_ci    JSHandle<JSMap> jsMap =
2944514f5e3Sopenharmony_ci        JSHandle<JSMap>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
2954514f5e3Sopenharmony_ci    JSHandle<LinkedHashMap> hashMap = LinkedHashMap::Create(thread);
2964514f5e3Sopenharmony_ci    jsMap->SetLinkedMap(thread, hashMap);
2974514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> mapTag = JSHandle<JSTaggedValue>::Cast(jsMap);
2984514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag4 = JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::VALUE);
2994514f5e3Sopenharmony_ci    JSHandle<JSMapIterator> jsMapIterator4(jsMapIteratorTag4);
3004514f5e3Sopenharmony_ci    Local<MapIteratorRef> mapIterator4 = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag4);
3014514f5e3Sopenharmony_ci    int32_t res4 = mapIterator4->GetIndex();
3024514f5e3Sopenharmony_ci    EXPECT_EQ(0, res4);
3034514f5e3Sopenharmony_ci}
3044514f5e3Sopenharmony_ci
3054514f5e3Sopenharmony_ci/**
3064514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_060
3074514f5e3Sopenharmony_ci * @tc.name: GetKind_entries_values_keys
3084514f5e3Sopenharmony_ci * @tc.desc:This test case is mainly used to verify whether the GetKind method of the JSMapIterator object can
3094514f5e3Sopenharmony_ci * correctly return the expected type.
3104514f5e3Sopenharmony_ci * @tc.type: FUNC
3114514f5e3Sopenharmony_ci * @tc.require:  parameter
3124514f5e3Sopenharmony_ci */
3134514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetKind_entries_values_keys)
3144514f5e3Sopenharmony_ci{
3154514f5e3Sopenharmony_ci    LocalScope scope(vm_);
3164514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
3174514f5e3Sopenharmony_ci    ecmascript::ThreadManagedScope managedScope(thread);
3184514f5e3Sopenharmony_ci    std::string expectedResult = "entries";
3194514f5e3Sopenharmony_ci    std::string valuesResult = "values";
3204514f5e3Sopenharmony_ci    std::string keysResult = "keys";
3214514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
3224514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
3234514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsMapFunction();
3244514f5e3Sopenharmony_ci    JSHandle<JSMap> jsMap =
3254514f5e3Sopenharmony_ci        JSHandle<JSMap>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
3264514f5e3Sopenharmony_ci    JSHandle<LinkedHashMap> hashMap = LinkedHashMap::Create(thread);
3274514f5e3Sopenharmony_ci    jsMap->SetLinkedMap(thread, hashMap);
3284514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> mapTag = JSHandle<JSTaggedValue>::Cast(jsMap);
3294514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag =
3304514f5e3Sopenharmony_ci        JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::KEY_AND_VALUE);
3314514f5e3Sopenharmony_ci    JSHandle<JSMapIterator> jsMapIterator(jsMapIteratorTag);
3324514f5e3Sopenharmony_ci    EXPECT_EQ(JSTaggedValue::SameValue(jsMapIterator->GetIteratedMap(), jsMap->GetLinkedMap()), true);
3334514f5e3Sopenharmony_ci    Local<MapIteratorRef> mapIterator = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag);
3344514f5e3Sopenharmony_ci    Local<JSValueRef> res = mapIterator->GetKind(vm_);
3354514f5e3Sopenharmony_ci    EXPECT_EQ(expectedResult, res->ToString(vm_)->ToString(vm_));
3364514f5e3Sopenharmony_ci    EXPECT_TRUE(mapIterator->IsMapIterator(vm_));
3374514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag1 = JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::KEY);
3384514f5e3Sopenharmony_ci    Local<MapIteratorRef> mapIterator1 = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag1);
3394514f5e3Sopenharmony_ci    Local<JSValueRef> res1 = mapIterator1->GetKind(vm_);
3404514f5e3Sopenharmony_ci    EXPECT_EQ(keysResult, res1->ToString(vm_)->ToString(vm_));
3414514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag2 = JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::VALUE);
3424514f5e3Sopenharmony_ci    Local<MapIteratorRef> mapIterator2 = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag2);
3434514f5e3Sopenharmony_ci    Local<JSValueRef> res2 = mapIterator2->GetKind(vm_);
3444514f5e3Sopenharmony_ci    EXPECT_EQ(valuesResult, res2->ToString(vm_)->ToString(vm_));
3454514f5e3Sopenharmony_ci}
3464514f5e3Sopenharmony_ci
3474514f5e3Sopenharmony_ci/**
3484514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_061
3494514f5e3Sopenharmony_ci * @tc.name: GetKind_001
3504514f5e3Sopenharmony_ci * @tc.desc:This test case is mainly used to verify whether the GetKind method of the JSMapIterator object can
3514514f5e3Sopenharmony_ci * correctly return the expected type (in this example, the expected type is "keys").
3524514f5e3Sopenharmony_ci * @tc.type: FUNC
3534514f5e3Sopenharmony_ci * @tc.require:  parameter
3544514f5e3Sopenharmony_ci */
3554514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetKind_001)
3564514f5e3Sopenharmony_ci{
3574514f5e3Sopenharmony_ci    ecmascript::ThreadManagedScope managedScope(vm_->GetJSThread());
3584514f5e3Sopenharmony_ci    LocalScope scope(vm_);
3594514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
3604514f5e3Sopenharmony_ci    std::string keysResult = "keys";
3614514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
3624514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
3634514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsMapFunction();
3644514f5e3Sopenharmony_ci    JSHandle<JSMap> jsMap =
3654514f5e3Sopenharmony_ci        JSHandle<JSMap>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
3664514f5e3Sopenharmony_ci    JSHandle<LinkedHashMap> hashMap = LinkedHashMap::Create(thread);
3674514f5e3Sopenharmony_ci    jsMap->SetLinkedMap(thread, hashMap);
3684514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> mapTag = JSHandle<JSTaggedValue>::Cast(jsMap);
3694514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag1 = JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::KEY);
3704514f5e3Sopenharmony_ci    JSHandle<JSMapIterator> jsMapIterator1(jsMapIteratorTag1);
3714514f5e3Sopenharmony_ci    EXPECT_EQ(JSTaggedValue::SameValue(jsMapIterator1->GetIteratedMap(), jsMap->GetLinkedMap()), true);
3724514f5e3Sopenharmony_ci    Local<MapIteratorRef> mapIterator1 = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag1);
3734514f5e3Sopenharmony_ci    Local<JSValueRef> res1 = mapIterator1->GetKind(vm_);
3744514f5e3Sopenharmony_ci    EXPECT_EQ(keysResult, res1->ToString(vm_)->ToString(vm_));
3754514f5e3Sopenharmony_ci}
3764514f5e3Sopenharmony_ci
3774514f5e3Sopenharmony_ci/**
3784514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_062
3794514f5e3Sopenharmony_ci * @tc.name: GetKind_002
3804514f5e3Sopenharmony_ci * @tc.desc:This test case is mainly used to verify whether the GetKind method of the JSMapIterator object can
3814514f5e3Sopenharmony_ci * correctly return the expected type (in this example, the expected type is "values").
3824514f5e3Sopenharmony_ci * @tc.type: FUNC
3834514f5e3Sopenharmony_ci * @tc.require:  parameter
3844514f5e3Sopenharmony_ci */
3854514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetKind_002)
3864514f5e3Sopenharmony_ci{
3874514f5e3Sopenharmony_ci    ecmascript::ThreadManagedScope managedScope(vm_->GetJSThread());
3884514f5e3Sopenharmony_ci    LocalScope scope(vm_);
3894514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
3904514f5e3Sopenharmony_ci    std::string valuesResult = "values";
3914514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
3924514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
3934514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsMapFunction();
3944514f5e3Sopenharmony_ci    JSHandle<JSMap> jsMap =
3954514f5e3Sopenharmony_ci        JSHandle<JSMap>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
3964514f5e3Sopenharmony_ci    JSHandle<LinkedHashMap> hashMap = LinkedHashMap::Create(thread);
3974514f5e3Sopenharmony_ci    jsMap->SetLinkedMap(thread, hashMap);
3984514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> mapTag = JSHandle<JSTaggedValue>::Cast(jsMap);
3994514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag2 = JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::VALUE);
4004514f5e3Sopenharmony_ci    JSHandle<JSMapIterator> jsMapIterator2(jsMapIteratorTag2);
4014514f5e3Sopenharmony_ci    EXPECT_EQ(JSTaggedValue::SameValue(jsMapIterator2->GetIteratedMap(), jsMap->GetLinkedMap()), true);
4024514f5e3Sopenharmony_ci    Local<MapIteratorRef> mapIterator2 = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag2);
4034514f5e3Sopenharmony_ci    Local<JSValueRef> res2 = mapIterator2->GetKind(vm_);
4044514f5e3Sopenharmony_ci    EXPECT_EQ(valuesResult, res2->ToString(vm_)->ToString(vm_));
4054514f5e3Sopenharmony_ci}
4064514f5e3Sopenharmony_ci
4074514f5e3Sopenharmony_ci/**
4084514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_063
4094514f5e3Sopenharmony_ci * @tc.name: GetKind_003
4104514f5e3Sopenharmony_ci * @tc.desc:Calling the GetKind method to obtain the iteration type KEY_AND_VALUE Compare with the string
4114514f5e3Sopenharmony_ci * variable 'entries' to assert whether the expected result is the same as the actual result
4124514f5e3Sopenharmony_ci * @tc.type: FUNC
4134514f5e3Sopenharmony_ci * @tc.require:  parameter
4144514f5e3Sopenharmony_ci */
4154514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetKind_003)
4164514f5e3Sopenharmony_ci{
4174514f5e3Sopenharmony_ci    ecmascript::ThreadManagedScope managedScope(vm_->GetJSThread());
4184514f5e3Sopenharmony_ci    LocalScope scope(vm_);
4194514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
4204514f5e3Sopenharmony_ci    std::string expectedResult = "entries";
4214514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
4224514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
4234514f5e3Sopenharmony_ci    // 从全局环境(GlobalEnv)中获取内置的Map构造函数
4244514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsMapFunction();
4254514f5e3Sopenharmony_ci    // 使用构造函数创建一个新的JSMap对象
4264514f5e3Sopenharmony_ci    JSHandle<JSMap> jsMap =
4274514f5e3Sopenharmony_ci        JSHandle<JSMap>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
4284514f5e3Sopenharmony_ci    JSHandle<LinkedHashMap> hashMap = LinkedHashMap::Create(thread);
4294514f5e3Sopenharmony_ci    // 将创建的LinkedHashMap设置为JSMap的内部数据结构
4304514f5e3Sopenharmony_ci    jsMap->SetLinkedMap(thread, hashMap);
4314514f5e3Sopenharmony_ci    // 将jsMap转换为JSTaggedValue的句柄
4324514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> mapTag = JSHandle<JSTaggedValue>::Cast(jsMap);
4334514f5e3Sopenharmony_ci    // 创建一个新的JSMapIterator对象,并将其迭代方式设置为KEY_AND_VALUE
4344514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag =
4354514f5e3Sopenharmony_ci        JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::KEY_AND_VALUE);
4364514f5e3Sopenharmony_ci    JSHandle<JSMapIterator> jsMapIterator(jsMapIteratorTag);
4374514f5e3Sopenharmony_ci    EXPECT_EQ(JSTaggedValue::SameValue(jsMapIterator->GetIteratedMap(), jsMap->GetLinkedMap()), true);
4384514f5e3Sopenharmony_ci    // 将jsMapIteratorTag转换为本地代码可以使用的MapIteratorRef类型
4394514f5e3Sopenharmony_ci    Local<MapIteratorRef> mapIterator = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag);
4404514f5e3Sopenharmony_ci    Local<JSValueRef> res = mapIterator->GetKind(vm_);
4414514f5e3Sopenharmony_ci    EXPECT_EQ(expectedResult, res->ToString(vm_)->ToString(vm_));
4424514f5e3Sopenharmony_ci    EXPECT_TRUE(mapIterator->IsMapIterator(vm_));
4434514f5e3Sopenharmony_ci}
4444514f5e3Sopenharmony_ci
4454514f5e3Sopenharmony_ci/*
4464514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_064
4474514f5e3Sopenharmony_ci * @tc.name: GetProperty_IsFunction
4484514f5e3Sopenharmony_ci * @tc.desc: Verify if the GetProperty function of the JavaScript virtual machine correctly returns a
4494514f5e3Sopenharmony_ci * function as the property of the 'Number' key.
4504514f5e3Sopenharmony_ci * @tc.type: FUNC
4514514f5e3Sopenharmony_ci * @tc.require:  parameter
4524514f5e3Sopenharmony_ci */
4534514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetProperty_IsFunction)
4544514f5e3Sopenharmony_ci{
4554514f5e3Sopenharmony_ci    LocalScope scope(vm_);
4564514f5e3Sopenharmony_ci    Local<ObjectRef> globalObject = JSNApi::GetGlobalObject(vm_);
4574514f5e3Sopenharmony_ci    ASSERT_FALSE(globalObject.IsEmpty());
4584514f5e3Sopenharmony_ci    ASSERT_TRUE(globalObject->IsObject(vm_));
4594514f5e3Sopenharmony_ci
4604514f5e3Sopenharmony_ci    Local<ObjectRef> key = StringRef::NewFromUtf8(vm_, "Number");
4614514f5e3Sopenharmony_ci    Local<ObjectRef> property = globalObject->Get(vm_, key);
4624514f5e3Sopenharmony_ci    ASSERT_TRUE(property->IsFunction(vm_));
4634514f5e3Sopenharmony_ci}
4644514f5e3Sopenharmony_ci
4654514f5e3Sopenharmony_ci/**
4664514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_065
4674514f5e3Sopenharmony_ci * @tc.name: NewClassFunction
4684514f5e3Sopenharmony_ci * @tc.desc:Check if the function created through the NewClassFunction method meets the specifications of the class
4694514f5e3Sopenharmony_ci * constructor, and obtain and verify the properties of the function.
4704514f5e3Sopenharmony_ci * @tc.type: FUNC
4714514f5e3Sopenharmony_ci * @tc.require:  parameter
4724514f5e3Sopenharmony_ci */
4734514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, NewClassFunction)
4744514f5e3Sopenharmony_ci{
4754514f5e3Sopenharmony_ci    LocalScope scope(vm_);
4764514f5e3Sopenharmony_ci    Local<FunctionRef> cls = FunctionRef::NewClassFunction(vm_, FunctionCallback, nullptr, nullptr);
4774514f5e3Sopenharmony_ci
4784514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> obj = JSNApiHelper::ToJSHandle(Local<JSValueRef>(cls));
4794514f5e3Sopenharmony_ci    // 断言obj是一个类构造函数
4804514f5e3Sopenharmony_ci    ASSERT_TRUE(obj->IsClassConstructor());
4814514f5e3Sopenharmony_ci    // GetPropertyInlinedProps方法获取内联属性的方法,CLASS_PROTOTYPE_INLINE_PROPERTY_INDEX类原型的内联属性索引
4824514f5e3Sopenharmony_ci    JSTaggedValue res =
4834514f5e3Sopenharmony_ci        JSHandle<JSFunction>(obj)->GetPropertyInlinedProps(JSFunction::CLASS_PROTOTYPE_INLINE_PROPERTY_INDEX);
4844514f5e3Sopenharmony_ci    // 断言获取的属性是一个内部访问器
4854514f5e3Sopenharmony_ci    ASSERT_TRUE(res.IsInternalAccessor());
4864514f5e3Sopenharmony_ci}
4874514f5e3Sopenharmony_ci
4884514f5e3Sopenharmony_ci/**
4894514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_066
4904514f5e3Sopenharmony_ci * @tc.name: PromiseRef_Finally_IsPromise
4914514f5e3Sopenharmony_ci * @tc.desc:FunctionRef:: New Create a reject callback function reject. The function of the code is to test the
4924514f5e3Sopenharmony_ci * behavior of the Finally and Then methods of the Promise object
4934514f5e3Sopenharmony_ci * in various situations, ensuring that they all return Promise objects and meet the expected behavior.
4944514f5e3Sopenharmony_ci * @tc.type: FUNC
4954514f5e3Sopenharmony_ci * @tc.require:  parameter
4964514f5e3Sopenharmony_ci */
4974514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, PromiseRef_Finally_IsPromise)
4984514f5e3Sopenharmony_ci{
4994514f5e3Sopenharmony_ci    LocalScope scope(vm_);
5004514f5e3Sopenharmony_ci    Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
5014514f5e3Sopenharmony_ci
5024514f5e3Sopenharmony_ci    Local<PromiseRef> gitpromise = capability->GetPromise(vm_);
5034514f5e3Sopenharmony_ci    Local<FunctionRef> rejectcallback = FunctionRef::New(vm_, RejectCallback);
5044514f5e3Sopenharmony_ci    Local<PromiseRef> catchPromise = gitpromise->Finally(vm_, rejectcallback);
5054514f5e3Sopenharmony_ci    ASSERT_TRUE(gitpromise->IsPromise(vm_));
5064514f5e3Sopenharmony_ci    ASSERT_TRUE(catchPromise->IsPromise(vm_));
5074514f5e3Sopenharmony_ci    Local<PromiseRef> catchPromise2 = gitpromise->Then(vm_, rejectcallback, rejectcallback);
5084514f5e3Sopenharmony_ci    ASSERT_TRUE(catchPromise2->IsPromise(vm_));
5094514f5e3Sopenharmony_ci    Local<FunctionRef> functioncallback = FunctionRef::New(vm_, FunctionCallback);
5104514f5e3Sopenharmony_ci    ASSERT_TRUE(!functioncallback.IsEmpty());
5114514f5e3Sopenharmony_ci    Local<PromiseRef> catchPromise3 = gitpromise->Then(vm_, functioncallback);
5124514f5e3Sopenharmony_ci    ASSERT_TRUE(catchPromise3->IsPromise(vm_));
5134514f5e3Sopenharmony_ci}
5144514f5e3Sopenharmony_ci
5154514f5e3Sopenharmony_ci/**
5164514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_067
5174514f5e3Sopenharmony_ci * @tc.name: IsBuffer
5184514f5e3Sopenharmony_ci * @tc.desc: Construct a BufferRef function to determine whether it is a Buffer
5194514f5e3Sopenharmony_ci * @tc.type: FUNC
5204514f5e3Sopenharmony_ci * @tc.require:  parameter
5214514f5e3Sopenharmony_ci */
5224514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsBuffer)
5234514f5e3Sopenharmony_ci{
5244514f5e3Sopenharmony_ci    LocalScope scope(vm_);
5254514f5e3Sopenharmony_ci    const int32_t length = 15;
5264514f5e3Sopenharmony_ci    Local<BufferRef> buffer = BufferRef::New(vm_, length);
5274514f5e3Sopenharmony_ci    ASSERT_TRUE(buffer->IsBuffer(vm_));
5284514f5e3Sopenharmony_ci}
5294514f5e3Sopenharmony_ci
5304514f5e3Sopenharmony_ci/**
5314514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_068
5324514f5e3Sopenharmony_ci * @tc.name: IsDataView
5334514f5e3Sopenharmony_ci * @tc.desc: Construct a BufferRef function to determine whether it is a dataView
5344514f5e3Sopenharmony_ci * @tc.type: FUNC
5354514f5e3Sopenharmony_ci * @tc.require:  parameter
5364514f5e3Sopenharmony_ci */
5374514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsDataView)
5384514f5e3Sopenharmony_ci{
5394514f5e3Sopenharmony_ci    LocalScope scope(vm_);
5404514f5e3Sopenharmony_ci    const int32_t length = 15;
5414514f5e3Sopenharmony_ci    Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
5424514f5e3Sopenharmony_ci    Local<DataViewRef> dataView = DataViewRef::New(vm_, arrayBuffer, 5, 7);
5434514f5e3Sopenharmony_ci    ASSERT_TRUE(dataView->IsDataView(vm_));
5444514f5e3Sopenharmony_ci}
5454514f5e3Sopenharmony_ci
5464514f5e3Sopenharmony_ci/**
5474514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_071
5484514f5e3Sopenharmony_ci * @tc.name: IsSharedArrayBuffer
5494514f5e3Sopenharmony_ci * @tc.desc: Construct a BufferRef function to determine whether it is a SharedArrayBuffer
5504514f5e3Sopenharmony_ci * @tc.type: FUNC
5514514f5e3Sopenharmony_ci * @tc.require:  parameter
5524514f5e3Sopenharmony_ci */
5534514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsSharedArrayBuffer)
5544514f5e3Sopenharmony_ci{
5554514f5e3Sopenharmony_ci    LocalScope scope(vm_);
5564514f5e3Sopenharmony_ci    const int32_t length = 15;
5574514f5e3Sopenharmony_ci    Local<JSValueRef> sharedArrayBuffer = ArrayBufferRef::New(vm_, length);
5584514f5e3Sopenharmony_ci    ASSERT_FALSE(sharedArrayBuffer->IsSharedArrayBuffer(vm_));
5594514f5e3Sopenharmony_ci}
5604514f5e3Sopenharmony_ci
5614514f5e3Sopenharmony_ci
5624514f5e3Sopenharmony_ci/**
5634514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_072
5644514f5e3Sopenharmony_ci * @tc.name: IsTrue
5654514f5e3Sopenharmony_ci * @tc.desc: Construct a BufferRef function to determine whether it is a IsTrue
5664514f5e3Sopenharmony_ci * @tc.type: FUNC
5674514f5e3Sopenharmony_ci * @tc.require:  parameter
5684514f5e3Sopenharmony_ci */
5694514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsTrue)
5704514f5e3Sopenharmony_ci{
5714514f5e3Sopenharmony_ci    LocalScope scope(vm_);
5724514f5e3Sopenharmony_ci    Local<JSValueRef> b = JSValueRef::True(vm_);
5734514f5e3Sopenharmony_ci    ASSERT_TRUE(b->IsTrue());
5744514f5e3Sopenharmony_ci}
5754514f5e3Sopenharmony_ci
5764514f5e3Sopenharmony_ci
5774514f5e3Sopenharmony_ci/**
5784514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_073
5794514f5e3Sopenharmony_ci * @tc.name: IsFalse
5804514f5e3Sopenharmony_ci * @tc.desc: Construct a BufferRef function to determine whether it is a IsFalse
5814514f5e3Sopenharmony_ci * @tc.type: FUNC
5824514f5e3Sopenharmony_ci * @tc.require:  parameter
5834514f5e3Sopenharmony_ci */
5844514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsFalse)
5854514f5e3Sopenharmony_ci{
5864514f5e3Sopenharmony_ci    LocalScope scope(vm_);
5874514f5e3Sopenharmony_ci    Local<JSValueRef> c = JSValueRef::False(vm_);
5884514f5e3Sopenharmony_ci    ASSERT_TRUE(c->IsFalse());
5894514f5e3Sopenharmony_ci}
5904514f5e3Sopenharmony_ci
5914514f5e3Sopenharmony_ci/**
5924514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_074
5934514f5e3Sopenharmony_ci * @tc.name: IsConstructor
5944514f5e3Sopenharmony_ci * @tc.desc: Construct a BufferRef function to determine whether it is a Constructor
5954514f5e3Sopenharmony_ci * @tc.require:  parameter
5964514f5e3Sopenharmony_ci */
5974514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsConstructor)
5984514f5e3Sopenharmony_ci{
5994514f5e3Sopenharmony_ci    LocalScope scope(vm_);
6004514f5e3Sopenharmony_ci    Local<FunctionRef> target = FunctionRef::New(vm_, FunctionCallback);
6014514f5e3Sopenharmony_ci    ASSERT_FALSE(target->IsConstructor(vm_));
6024514f5e3Sopenharmony_ci}
6034514f5e3Sopenharmony_ci
6044514f5e3Sopenharmony_ci
6054514f5e3Sopenharmony_ci/**
6064514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_076
6074514f5e3Sopenharmony_ci * @tc.name: GetOwnProperty
6084514f5e3Sopenharmony_ci * @tc.desc: Construct a BufferRef function to determine whether it is a GetOwnProperty  not Construct function
6094514f5e3Sopenharmony_ci * @tc.type: FUNC
6104514f5e3Sopenharmony_ci * @tc.require:  parameter
6114514f5e3Sopenharmony_ci */
6124514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetOwnProperty)
6134514f5e3Sopenharmony_ci{
6144514f5e3Sopenharmony_ci    LocalScope scope(vm_);
6154514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm_);
6164514f5e3Sopenharmony_ci    Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, TEST_KEY);
6174514f5e3Sopenharmony_ci    Local<JSValueRef> value = ObjectRef::New(vm_);
6184514f5e3Sopenharmony_ci    PropertyAttribute attribute(value, true, true, true);
6194514f5e3Sopenharmony_ci
6204514f5e3Sopenharmony_ci    ASSERT_TRUE(object->DefineProperty(vm_, key, attribute));
6214514f5e3Sopenharmony_ci    Local<JSValueRef> value1 = object->Get(vm_, key);
6224514f5e3Sopenharmony_ci    ASSERT_TRUE(value->IsStrictEquals(vm_, value1));
6234514f5e3Sopenharmony_ci}
6244514f5e3Sopenharmony_ci
6254514f5e3Sopenharmony_ci/**
6264514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_078
6274514f5e3Sopenharmony_ci * @tc.name: IsTreeMap
6284514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the given object is a TreeMap.
6294514f5e3Sopenharmony_ci * @tc.type: FUNC
6304514f5e3Sopenharmony_ci * @tc.require:  parameter
6314514f5e3Sopenharmony_ci */
6324514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsTreeMap)
6334514f5e3Sopenharmony_ci{
6344514f5e3Sopenharmony_ci    LocalScope scope(vm_);
6354514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
6364514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
6374514f5e3Sopenharmony_ci    auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
6384514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
6394514f5e3Sopenharmony_ci    JSHandle<JSHClass> mapClass = factory->NewEcmaHClass(JSAPITreeMap::SIZE, JSType::JS_API_TREE_MAP, proto);
6404514f5e3Sopenharmony_ci    JSHandle<JSAPITreeMap> jsTreeMap = JSHandle<JSAPITreeMap>::Cast(factory->NewJSObjectWithInit(mapClass));
6414514f5e3Sopenharmony_ci    JSHandle<TaggedTreeMap> treeMap(thread, TaggedTreeMap::Create(thread));
6424514f5e3Sopenharmony_ci    jsTreeMap->SetTreeMap(thread, treeMap);
6434514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(jsTreeMap);
6444514f5e3Sopenharmony_ci    Local<JSValueRef> TreeMap = JSNApiHelper::ToLocal<JSAPITreeSet>(argumentTag);
6454514f5e3Sopenharmony_ci    EXPECT_TRUE(TreeMap->IsTreeMap(vm_));
6464514f5e3Sopenharmony_ci}
6474514f5e3Sopenharmony_ci
6484514f5e3Sopenharmony_ci/**
6494514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_079
6504514f5e3Sopenharmony_ci * @tc.name: IsTreeSet
6514514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the given object is a TreeSet.
6524514f5e3Sopenharmony_ci * @tc.type: FUNC
6534514f5e3Sopenharmony_ci * @tc.require:  parameter
6544514f5e3Sopenharmony_ci */
6554514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsTreeSet)
6564514f5e3Sopenharmony_ci{
6574514f5e3Sopenharmony_ci    LocalScope scope(vm_);
6584514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
6594514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
6604514f5e3Sopenharmony_ci    auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
6614514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
6624514f5e3Sopenharmony_ci    JSHandle<JSHClass> setClass = factory->NewEcmaHClass(JSAPITreeSet::SIZE, JSType::JS_API_TREE_SET, proto);
6634514f5e3Sopenharmony_ci    JSHandle<JSAPITreeSet> jsTreeSet = JSHandle<JSAPITreeSet>::Cast(factory->NewJSObjectWithInit(setClass));
6644514f5e3Sopenharmony_ci    JSHandle<TaggedTreeSet> treeSet(thread, TaggedTreeSet::Create(thread));
6654514f5e3Sopenharmony_ci    jsTreeSet->SetTreeSet(thread, treeSet);
6664514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(jsTreeSet);
6674514f5e3Sopenharmony_ci    Local<JSValueRef> TreeSet = JSNApiHelper::ToLocal<JSAPITreeSet>(argumentTag);
6684514f5e3Sopenharmony_ci    EXPECT_TRUE(TreeSet->IsTreeSet(vm_));
6694514f5e3Sopenharmony_ci}
6704514f5e3Sopenharmony_ci
6714514f5e3Sopenharmony_ci/**
6724514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_080
6734514f5e3Sopenharmony_ci * @tc.name: IsVector
6744514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the given object is a Vector.
6754514f5e3Sopenharmony_ci * @tc.type: FUNC
6764514f5e3Sopenharmony_ci * @tc.require:  parameter
6774514f5e3Sopenharmony_ci */
6784514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsVector)
6794514f5e3Sopenharmony_ci{
6804514f5e3Sopenharmony_ci    LocalScope scope(vm_);
6814514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
6824514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
6834514f5e3Sopenharmony_ci    auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
6844514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
6854514f5e3Sopenharmony_ci    JSHandle<JSHClass> vectorClass = factory->NewEcmaHClass(JSAPIVector::SIZE, JSType::JS_API_VECTOR, proto);
6864514f5e3Sopenharmony_ci    JSHandle<JSAPIVector> jsVector = JSHandle<JSAPIVector>::Cast(factory->NewJSObjectWithInit(vectorClass));
6874514f5e3Sopenharmony_ci    jsVector->SetLength(0);
6884514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(jsVector);
6894514f5e3Sopenharmony_ci    Local<JSValueRef> Vector = JSNApiHelper::ToLocal<JSAPIVector>(argumentTag);
6904514f5e3Sopenharmony_ci    EXPECT_TRUE(Vector->IsVector(vm_));
6914514f5e3Sopenharmony_ci}
6924514f5e3Sopenharmony_ci
6934514f5e3Sopenharmony_ci/**
6944514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_081
6954514f5e3Sopenharmony_ci * @tc.name: IsJSArray
6964514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the given object is a JSArray.
6974514f5e3Sopenharmony_ci * @tc.type: FUNC
6984514f5e3Sopenharmony_ci * @tc.require:  parameter
6994514f5e3Sopenharmony_ci */
7004514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsJSArray)
7014514f5e3Sopenharmony_ci{
7024514f5e3Sopenharmony_ci    LocalScope scope(vm_);
7034514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsArrayTag = JSArray::ArrayCreate(vm_->GetJSThread(), JSTaggedNumber(0));
7044514f5e3Sopenharmony_ci    Local<JSValueRef> jsArray = JSNApiHelper::ToLocal<JSTypedArray>(jsArrayTag);
7054514f5e3Sopenharmony_ci    EXPECT_TRUE(jsArray->IsJSArray(vm_));
7064514f5e3Sopenharmony_ci    Local<JSValueRef> array = JSNApiHelper::ToLocal<ArrayRef>(jsArrayTag);
7074514f5e3Sopenharmony_ci    EXPECT_TRUE(array->IsArray(vm_));
7084514f5e3Sopenharmony_ci}
7094514f5e3Sopenharmony_ci
7104514f5e3Sopenharmony_ci/**
7114514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_082
7124514f5e3Sopenharmony_ci * @tc.name: IsMap
7134514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the given object is a map container.
7144514f5e3Sopenharmony_ci * @tc.type: FUNC
7154514f5e3Sopenharmony_ci * @tc.require:  parameter
7164514f5e3Sopenharmony_ci */
7174514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsMap)
7184514f5e3Sopenharmony_ci{
7194514f5e3Sopenharmony_ci    LocalScope scope(vm_);
7204514f5e3Sopenharmony_ci    Local<MapRef> map = MapRef::New(vm_);
7214514f5e3Sopenharmony_ci    EXPECT_TRUE(map->IsMap(vm_));
7224514f5e3Sopenharmony_ci}
7234514f5e3Sopenharmony_ci
7244514f5e3Sopenharmony_ci/**
7254514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_083
7264514f5e3Sopenharmony_ci * @tc.name: IsSet
7274514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the given object is a Set container.
7284514f5e3Sopenharmony_ci * @tc.type: FUNC
7294514f5e3Sopenharmony_ci * @tc.require:  parameter
7304514f5e3Sopenharmony_ci */
7314514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, SetRef_IsSet)
7324514f5e3Sopenharmony_ci{
7334514f5e3Sopenharmony_ci    LocalScope scope(vm_);
7344514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
7354514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
7364514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
7374514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsSetFunction();
7384514f5e3Sopenharmony_ci    JSHandle<JSSet> set =
7394514f5e3Sopenharmony_ci        JSHandle<JSSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
7404514f5e3Sopenharmony_ci    JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread);
7414514f5e3Sopenharmony_ci    set->SetLinkedSet(thread, hashSet);
7424514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> setTag = JSHandle<JSTaggedValue>::Cast(set);
7434514f5e3Sopenharmony_ci    Local<SetRef> Set = JSNApiHelper::ToLocal<SetRef>(setTag);
7444514f5e3Sopenharmony_ci    EXPECT_TRUE(Set->IsSet(vm_));
7454514f5e3Sopenharmony_ci}
7464514f5e3Sopenharmony_ci
7474514f5e3Sopenharmony_ci/**
7484514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_084
7494514f5e3Sopenharmony_ci * @tc.name: ObjectRef_NEW
7504514f5e3Sopenharmony_ci * @tc.desc: Creating a new Object Ref object is not NULL if successfully created.
7514514f5e3Sopenharmony_ci * @tc.type: FUNC
7524514f5e3Sopenharmony_ci * @tc.require:  parameter
7534514f5e3Sopenharmony_ci */
7544514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ObjectRef_NEW)
7554514f5e3Sopenharmony_ci{
7564514f5e3Sopenharmony_ci    LocalScope scope(vm_);
7574514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm_);
7584514f5e3Sopenharmony_ci    ASSERT_FALSE(object.IsNull());
7594514f5e3Sopenharmony_ci}
7604514f5e3Sopenharmony_ci
7614514f5e3Sopenharmony_ci/**
7624514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_085
7634514f5e3Sopenharmony_ci * @tc.name: IsFalse
7644514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the given object is false.
7654514f5e3Sopenharmony_ci * @tc.type: FUNC
7664514f5e3Sopenharmony_ci * @tc.require:  parameter
7674514f5e3Sopenharmony_ci */
7684514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNAPI_IsFalse)
7694514f5e3Sopenharmony_ci{
7704514f5e3Sopenharmony_ci    LocalScope scope(vm_);
7714514f5e3Sopenharmony_ci    Local<PrimitiveRef> res = JSValueRef::False(vm_);
7724514f5e3Sopenharmony_ci    EXPECT_TRUE(res->IsFalse());
7734514f5e3Sopenharmony_ci}
7744514f5e3Sopenharmony_ci
7754514f5e3Sopenharmony_ci/**
7764514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_086
7774514f5e3Sopenharmony_ci * @tc.name: GetDescription
7784514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the object used to obtain descriptive information was successful.
7794514f5e3Sopenharmony_ci * @tc.type: FUNC
7804514f5e3Sopenharmony_ci * @tc.require:  parameter
7814514f5e3Sopenharmony_ci */
7824514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, SymbolRef_GetDescription)
7834514f5e3Sopenharmony_ci{
7844514f5e3Sopenharmony_ci    LocalScope scope(vm_);
7854514f5e3Sopenharmony_ci    Local<StringRef> description = StringRef::NewFromUtf8(vm_, "test");
7864514f5e3Sopenharmony_ci    Local<SymbolRef> symbol = SymbolRef::New(vm_, description);
7874514f5e3Sopenharmony_ci    Local<StringRef> desc = symbol->GetDescription(vm_);
7884514f5e3Sopenharmony_ci    EXPECT_EQ(description->ToString(vm_), desc->ToString(vm_));
7894514f5e3Sopenharmony_ci    EXPECT_FALSE(symbol.IsNull());
7904514f5e3Sopenharmony_ci    EXPECT_FALSE(description.IsEmpty());
7914514f5e3Sopenharmony_ci}
7924514f5e3Sopenharmony_ci
7934514f5e3Sopenharmony_ci/**
7944514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_087
7954514f5e3Sopenharmony_ci * @tc.name: ArrayRefNew_uint32Length_SetValueAt_GetValueAt
7964514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether obtaining the length of the array, setting the value of the specified
7974514f5e3Sopenharmony_ci * index position of the array, and obtaining the value of the specified index position of the
7984514f5e3Sopenharmony_ci * array were successful
7994514f5e3Sopenharmony_ci * @tc.type: FUNC
8004514f5e3Sopenharmony_ci * @tc.require:  parameter
8014514f5e3Sopenharmony_ci */
8024514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ArrayRefNew_uint32Length_SetValueAt_GetValueAt)
8034514f5e3Sopenharmony_ci{
8044514f5e3Sopenharmony_ci    LocalScope scope(vm_);
8054514f5e3Sopenharmony_ci    Local<ObjectRef> globalObject = JSNApi::GetGlobalObject(vm_);
8064514f5e3Sopenharmony_ci    ASSERT_FALSE(globalObject.IsEmpty());
8074514f5e3Sopenharmony_ci    ASSERT_TRUE(globalObject->IsObject(vm_));
8084514f5e3Sopenharmony_ci    Local<ArrayRef> property = ArrayRef::New(vm_, 3); // 3 : length
8094514f5e3Sopenharmony_ci    ASSERT_TRUE(property->IsArray(vm_));
8104514f5e3Sopenharmony_ci    ASSERT_EQ(property->Length(vm_), 3); // 3 : test case of input
8114514f5e3Sopenharmony_ci    uint32_t index = 1;
8124514f5e3Sopenharmony_ci    Local<JSValueRef> value = ObjectRef::New(vm_);
8134514f5e3Sopenharmony_ci    bool result = property->SetValueAt(vm_, globalObject, index, value);
8144514f5e3Sopenharmony_ci    ASSERT_TRUE(result);
8154514f5e3Sopenharmony_ci    Local<JSValueRef> value1 = property->GetValueAt(vm_, globalObject, index);
8164514f5e3Sopenharmony_ci    ASSERT_FALSE(value1.IsNull());
8174514f5e3Sopenharmony_ci}
8184514f5e3Sopenharmony_ci
8194514f5e3Sopenharmony_ci/**
8204514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_088
8214514f5e3Sopenharmony_ci * @tc.name: WeakSetRef_GetSize_GetTotalElements_GetValue
8224514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the size of the weakset for obtaining settings, the total number of
8234514f5e3Sopenharmony_ci * elements obtained, and the value of the specified index position obtained were successful
8244514f5e3Sopenharmony_ci * @tc.type: FUNC
8254514f5e3Sopenharmony_ci * @tc.require:  parameter
8264514f5e3Sopenharmony_ci */
8274514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, WeakSetRef_GetSize_GetTotalElements_GetValue)
8284514f5e3Sopenharmony_ci{
8294514f5e3Sopenharmony_ci    LocalScope scope(vm_);
8304514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
8314514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
8324514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
8334514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsWeakSetFunction();
8344514f5e3Sopenharmony_ci    JSHandle<JSWeakSet> weakSet =
8354514f5e3Sopenharmony_ci        JSHandle<JSWeakSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
8364514f5e3Sopenharmony_ci    JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread);
8374514f5e3Sopenharmony_ci    weakSet->SetLinkedSet(thread, hashSet);
8384514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> weakSetTag = JSHandle<JSTaggedValue>::Cast(weakSet);
8394514f5e3Sopenharmony_ci    Local<JSValueRef> set1 = JSNApiHelper::ToLocal<WeakSetRef>(weakSetTag);
8404514f5e3Sopenharmony_ci    EXPECT_TRUE(set1->IsWeakSet(vm_));
8414514f5e3Sopenharmony_ci    Local<WeakSetRef> set = JSNApiHelper::ToLocal<WeakSetRef>(weakSetTag);
8424514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> value(factory->NewFromASCII("value"));
8434514f5e3Sopenharmony_ci    JSWeakSet::Add(thread, weakSet, value);
8444514f5e3Sopenharmony_ci    int32_t num = set->GetSize(vm_);
8454514f5e3Sopenharmony_ci    int32_t num1 = set->GetTotalElements(vm_);
8464514f5e3Sopenharmony_ci    ASSERT_EQ(num, 1);
8474514f5e3Sopenharmony_ci    ASSERT_EQ(num1, 1);
8484514f5e3Sopenharmony_ci    Local<JSValueRef> res2 = set->GetValue(vm_, 0);
8494514f5e3Sopenharmony_ci    ASSERT_EQ(res2->ToString(vm_)->ToString(vm_), "value");
8504514f5e3Sopenharmony_ci}
8514514f5e3Sopenharmony_ci
8524514f5e3Sopenharmony_ci/**
8534514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_089
8544514f5e3Sopenharmony_ci * @tc.name: GetOwnPropertyNames
8554514f5e3Sopenharmony_ci * @tc.desc: An array of self owned property names used to validate the acquisition of objects.
8564514f5e3Sopenharmony_ci * @tc.type: FUNC
8574514f5e3Sopenharmony_ci * @tc.require:  parameter
8584514f5e3Sopenharmony_ci */
8594514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ObjectRef_GetOwnPropertyNames)
8604514f5e3Sopenharmony_ci{
8614514f5e3Sopenharmony_ci    LocalScope scope(vm_);
8624514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm_);
8634514f5e3Sopenharmony_ci    Local<ArrayRef> res = object->GetOwnPropertyNames(vm_);
8644514f5e3Sopenharmony_ci    EXPECT_TRUE(res->IsArray(vm_));
8654514f5e3Sopenharmony_ci}
8664514f5e3Sopenharmony_ci
8674514f5e3Sopenharmony_ci/**
8684514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_090
8694514f5e3Sopenharmony_ci * @tc.name: SetBundle
8704514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the initialization resource package was successfully set.
8714514f5e3Sopenharmony_ci * @tc.type: FUNC
8724514f5e3Sopenharmony_ci * @tc.require:  parameter
8734514f5e3Sopenharmony_ci */
8744514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, SetBundle)
8754514f5e3Sopenharmony_ci{
8764514f5e3Sopenharmony_ci    LocalScope scope(vm_);
8774514f5e3Sopenharmony_ci    bool value = true;
8784514f5e3Sopenharmony_ci    JSNApi::SetBundle(vm_, value);
8794514f5e3Sopenharmony_ci    bool res = JSNApi::IsBundle(vm_);
8804514f5e3Sopenharmony_ci    EXPECT_TRUE(res);
8814514f5e3Sopenharmony_ci}
8824514f5e3Sopenharmony_ci
8834514f5e3Sopenharmony_ci/**
8844514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_091
8854514f5e3Sopenharmony_ci * @tc.name: SetMockModuleList
8864514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the function of setting the map container module was successful.
8874514f5e3Sopenharmony_ci * @tc.type: FUNC
8884514f5e3Sopenharmony_ci * @tc.require:  parameter
8894514f5e3Sopenharmony_ci */
8904514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_SetMockModuleList)
8914514f5e3Sopenharmony_ci{
8924514f5e3Sopenharmony_ci    LocalScope scope(vm_);
8934514f5e3Sopenharmony_ci    std::map<std::string, std::string> str = { { TEST_NUM1, TEST_NUM2 } };
8944514f5e3Sopenharmony_ci    JSNApi::SetMockModuleList(vm_, str);
8954514f5e3Sopenharmony_ci    ASSERT_EQ(std::string(vm_->GetMockModule(TEST_NUM1)), TEST_NUM2);
8964514f5e3Sopenharmony_ci}
8974514f5e3Sopenharmony_ci
8984514f5e3Sopenharmony_ci/**
8994514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_092
9004514f5e3Sopenharmony_ci * @tc.name: SetSourceMapTranslateCallback
9014514f5e3Sopenharmony_ci * @tc.desc: Whether the source mapping translation callback function used to verify the settings.
9024514f5e3Sopenharmony_ci * was successfully set
9034514f5e3Sopenharmony_ci * @tc.type: FUNC
9044514f5e3Sopenharmony_ci * @tc.require:  parameter
9054514f5e3Sopenharmony_ci */
9064514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNAPI_SetSourceMapTranslateCallback)
9074514f5e3Sopenharmony_ci{
9084514f5e3Sopenharmony_ci    LocalScope scope(vm_);
9094514f5e3Sopenharmony_ci    SourceMapTranslateCallback tag { nullptr };
9104514f5e3Sopenharmony_ci    JSNApi::SetSourceMapTranslateCallback(vm_, tag);
9114514f5e3Sopenharmony_ci    SourceMapTranslateCallback cur = vm_->GetSourceMapTranslateCallback();
9124514f5e3Sopenharmony_ci    ASSERT_EQ(nullptr, cur);
9134514f5e3Sopenharmony_ci}
9144514f5e3Sopenharmony_ci
9154514f5e3Sopenharmony_ci/**
9164514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_093
9174514f5e3Sopenharmony_ci * @tc.name: ExecutePendingJob
9184514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the pending task has been successfully executed.
9194514f5e3Sopenharmony_ci * @tc.type: FUNC
9204514f5e3Sopenharmony_ci * @tc.require:  parameter
9214514f5e3Sopenharmony_ci */
9224514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_ExecutePendingJob)
9234514f5e3Sopenharmony_ci{
9244514f5e3Sopenharmony_ci    LocalScope scope(vm_);
9254514f5e3Sopenharmony_ci    JSNApi::ExecutePendingJob(vm_);
9264514f5e3Sopenharmony_ci    bool res = EcmaVM::ConstCast(vm_)->GetJSThread()->GetCurrentEcmaContext()->ExecutePromisePendingJob();
9274514f5e3Sopenharmony_ci    EXPECT_TRUE(res);
9284514f5e3Sopenharmony_ci}
9294514f5e3Sopenharmony_ci
9304514f5e3Sopenharmony_ci/**
9314514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_096
9324514f5e3Sopenharmony_ci * @tc.name: IsRegExp
9334514f5e3Sopenharmony_ci * @tc.desc: Used to determine whether a given object is a regular expression.
9344514f5e3Sopenharmony_ci * @tc.type: FUNC
9354514f5e3Sopenharmony_ci * @tc.require:  parameter
9364514f5e3Sopenharmony_ci */
9374514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsRegExp)
9384514f5e3Sopenharmony_ci{
9394514f5e3Sopenharmony_ci    LocalScope scope(vm_);
9404514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
9414514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
9424514f5e3Sopenharmony_ci    auto globalEnv = thread->GetEcmaVM()->GetGlobalEnv();
9434514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> proto = globalEnv->GetObjectFunctionPrototype();
9444514f5e3Sopenharmony_ci    JSHandle<JSHClass> jSRegExpClass = factory->NewEcmaHClass(JSRegExp::SIZE, JSType::JS_REG_EXP, proto);
9454514f5e3Sopenharmony_ci    JSHandle<JSRegExp> jSRegExp = JSHandle<JSRegExp>::Cast(factory->NewJSObject(jSRegExpClass));
9464514f5e3Sopenharmony_ci    jSRegExp->SetByteCodeBuffer(thread, JSTaggedValue::Undefined());
9474514f5e3Sopenharmony_ci    jSRegExp->SetOriginalSource(thread, JSTaggedValue::Undefined());
9484514f5e3Sopenharmony_ci    jSRegExp->SetGroupName(thread, JSTaggedValue::Undefined());
9494514f5e3Sopenharmony_ci    jSRegExp->SetOriginalFlags(thread, JSTaggedValue(0));
9504514f5e3Sopenharmony_ci    jSRegExp->SetLength(0);
9514514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(jSRegExp);
9524514f5e3Sopenharmony_ci    Local<JSValueRef> regexp = JSNApiHelper::ToLocal<JSRegExp>(argumentTag);
9534514f5e3Sopenharmony_ci    EXPECT_TRUE(regexp->IsRegExp(vm_));
9544514f5e3Sopenharmony_ci}
9554514f5e3Sopenharmony_ci
9564514f5e3Sopenharmony_ci/**
9574514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_097
9584514f5e3Sopenharmony_ci * @tc.name: GetAndClearUncaughtException
9594514f5e3Sopenharmony_ci * @tc.desc: Used to verify the success of obtaining and clearing uncaught exceptions
9604514f5e3Sopenharmony_ci * @tc.type: FUNC
9614514f5e3Sopenharmony_ci * @tc.require:  parameter
9624514f5e3Sopenharmony_ci */
9634514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetAndClearUncaughtException)
9644514f5e3Sopenharmony_ci{
9654514f5e3Sopenharmony_ci    LocalScope scope(vm_);
9664514f5e3Sopenharmony_ci    TryCatch tryCatch(vm_);
9674514f5e3Sopenharmony_ci    EXPECT_FALSE(tryCatch.HasCaught());
9684514f5e3Sopenharmony_ci    Local<StringRef> message = StringRef::NewFromUtf8(vm_, "ErrorTest");
9694514f5e3Sopenharmony_ci    Local<JSValueRef> error = Exception::Error(vm_, message);
9704514f5e3Sopenharmony_ci    EXPECT_TRUE(error->IsError(vm_));
9714514f5e3Sopenharmony_ci    JSNApi::ThrowException(vm_, error);
9724514f5e3Sopenharmony_ci    EXPECT_TRUE(vm_->GetJSThread()->HasPendingException());
9734514f5e3Sopenharmony_ci    JSNApi::GetAndClearUncaughtException(vm_);
9744514f5e3Sopenharmony_ci    EXPECT_FALSE(vm_->GetJSThread()->HasPendingException());
9754514f5e3Sopenharmony_ci}
9764514f5e3Sopenharmony_ci
9774514f5e3Sopenharmony_ci/**
9784514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_098
9794514f5e3Sopenharmony_ci * @tc.name: IsJSPrimitiveNumber
9804514f5e3Sopenharmony_ci * @tc.desc: Verify if the given JSValueRef object is a primativenumber.
9814514f5e3Sopenharmony_ci * @tc.type: FUNC
9824514f5e3Sopenharmony_ci * @tc.require:  parameter
9834514f5e3Sopenharmony_ci */
9844514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsJSPrimitiveNumber)
9854514f5e3Sopenharmony_ci{
9864514f5e3Sopenharmony_ci    LocalScope scope(vm_);
9874514f5e3Sopenharmony_ci    ObjectFactory *factory = vm_->GetFactory();
9884514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jstagvalue;
9894514f5e3Sopenharmony_ci    JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_NUMBER, jstagvalue);
9904514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jspri = JSHandle<JSTaggedValue>::Cast(jsprimitive);
9914514f5e3Sopenharmony_ci    Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspri);
9924514f5e3Sopenharmony_ci    EXPECT_FALSE(object->IsJSPrimitiveNumber(vm_));
9934514f5e3Sopenharmony_ci}
9944514f5e3Sopenharmony_ci
9954514f5e3Sopenharmony_ci
9964514f5e3Sopenharmony_ci/**
9974514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_099
9984514f5e3Sopenharmony_ci * @tc.name: StringUtf16_NewFromUtf16_Length_WriteUtf16_01
9994514f5e3Sopenharmony_ci * @tc.desc:
10004514f5e3Sopenharmony_ci * NewFromUtf16:Create StringRef in UTF8 format
10014514f5e3Sopenharmony_ci * WriteUtf16:Write the value of StringRef to char16_ T array buffer, testing Chinese
10024514f5e3Sopenharmony_ci * @tc.type: FUNC
10034514f5e3Sopenharmony_ci * @tc.require:  parameter
10044514f5e3Sopenharmony_ci */
10054514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, StringUtf16_NewFromUtf16_Length_WriteUtf16_01)
10064514f5e3Sopenharmony_ci{
10074514f5e3Sopenharmony_ci    LocalScope scope(vm_);
10084514f5e3Sopenharmony_ci    const char16_t *test = u"年度";
10094514f5e3Sopenharmony_ci    Local<StringRef> testString = StringRef::NewFromUtf16(vm_, test);
10104514f5e3Sopenharmony_ci    EXPECT_EQ(testString->Length(vm_), 2);              // 2 : length of testString("年度")
10114514f5e3Sopenharmony_ci    char16_t buffer[3];                              // 3 : length of testString + 1
10124514f5e3Sopenharmony_ci    EXPECT_EQ(testString->WriteUtf16(vm_, buffer, 2), 2); // 2 : length of testString("年度")
10134514f5e3Sopenharmony_ci    GTEST_LOG_(WARNING) << "年度test =" << buffer;
10144514f5e3Sopenharmony_ci    ASSERT_EQ(buffer[0], u'年');
10154514f5e3Sopenharmony_ci    ASSERT_EQ(buffer[1], u'度');
10164514f5e3Sopenharmony_ci}
10174514f5e3Sopenharmony_ci
10184514f5e3Sopenharmony_ci/**
10194514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_100
10204514f5e3Sopenharmony_ci * @tc.name: StringUtf16_NewFromUtf16_Length_WriteUtf16_01
10214514f5e3Sopenharmony_ci * @tc.desc: Write the value of StringRef to char16_ T array buffer, testing non Chinese
10224514f5e3Sopenharmony_ci * @tc.type: FUNC
10234514f5e3Sopenharmony_ci * @tc.require:  parameter
10244514f5e3Sopenharmony_ci */
10254514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, StringUtf16_NewFromUtf16_Length_WriteUtf16_02)
10264514f5e3Sopenharmony_ci{
10274514f5e3Sopenharmony_ci    LocalScope scope(vm_);
10284514f5e3Sopenharmony_ci    const char16_t *test = u"hello world!0?";
10294514f5e3Sopenharmony_ci    Local<StringRef> testString = StringRef::NewFromUtf16(vm_, test);
10304514f5e3Sopenharmony_ci
10314514f5e3Sopenharmony_ci    EXPECT_EQ(testString->Length(vm_), 14);
10324514f5e3Sopenharmony_ci    char16_t buffer[15];                               // 15 : length of testString + 1
10334514f5e3Sopenharmony_ci    EXPECT_EQ(testString->WriteUtf16(vm_, buffer, 14), 14); // 14 : length of testString("hello world!!!")
10344514f5e3Sopenharmony_ci    ASSERT_EQ(buffer[0], u'h');
10354514f5e3Sopenharmony_ci    ASSERT_EQ(buffer[13], u'?');
10364514f5e3Sopenharmony_ci}
10374514f5e3Sopenharmony_ci
10384514f5e3Sopenharmony_ci/**
10394514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_101
10404514f5e3Sopenharmony_ci * @tc.name: SetRef_IsSet_GetSize_GetTotalElements_GetValue
10414514f5e3Sopenharmony_ci * @tc.desc:
10424514f5e3Sopenharmony_ci * IsSet:Determine if it is a set container object
10434514f5e3Sopenharmony_ci * GetSize:Get set length size
10444514f5e3Sopenharmony_ci * GetTotalElements:Get the total number of set elements
10454514f5e3Sopenharmony_ci * GetValue:Obtain the element values of the set container according to the following table
10464514f5e3Sopenharmony_ci * @tc.type: FUNC
10474514f5e3Sopenharmony_ci * @tc.require:  parameter
10484514f5e3Sopenharmony_ci */
10494514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, SetRef_IsSet_GetSize_GetTotalElements_GetValue)
10504514f5e3Sopenharmony_ci{
10514514f5e3Sopenharmony_ci    LocalScope scope(vm_);
10524514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
10534514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
10544514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
10554514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsSetFunction();
10564514f5e3Sopenharmony_ci    JSHandle<JSSet> jsSet =
10574514f5e3Sopenharmony_ci        JSHandle<JSSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
10584514f5e3Sopenharmony_ci    JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread);
10594514f5e3Sopenharmony_ci    jsSet->SetLinkedSet(thread, hashSet);
10604514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> setTag = JSHandle<JSTaggedValue>::Cast(jsSet);
10614514f5e3Sopenharmony_ci    Local<SetRef> set = JSNApiHelper::ToLocal<SetRef>(setTag);
10624514f5e3Sopenharmony_ci    EXPECT_TRUE(set->IsSet(vm_));
10634514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> fristValue(factory->NewFromASCII("vlue1"));
10644514f5e3Sopenharmony_ci    JSSet::Add(thread, jsSet, fristValue);
10654514f5e3Sopenharmony_ci    JSSet::Add(thread, jsSet, fristValue);
10664514f5e3Sopenharmony_ci    int32_t num = set->GetSize(vm_);
10674514f5e3Sopenharmony_ci    int32_t num1 = set->GetTotalElements(vm_);
10684514f5e3Sopenharmony_ci    ASSERT_EQ(num, 1);
10694514f5e3Sopenharmony_ci    ASSERT_EQ(num1, 1);
10704514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> secondValue(factory->NewFromASCII("vlue2"));
10714514f5e3Sopenharmony_ci    JSSet::Add(thread, jsSet, secondValue);
10724514f5e3Sopenharmony_ci    num = set->GetSize(vm_);
10734514f5e3Sopenharmony_ci    num1 = set->GetTotalElements(vm_);
10744514f5e3Sopenharmony_ci    ASSERT_EQ(num, 2);
10754514f5e3Sopenharmony_ci    ASSERT_EQ(num1, 2);
10764514f5e3Sopenharmony_ci    Local<JSValueRef> res1 = set->GetValue(vm_, 0);
10774514f5e3Sopenharmony_ci    ASSERT_EQ(res1->ToString(vm_)->ToString(vm_), "vlue1");
10784514f5e3Sopenharmony_ci    Local<JSValueRef> res2 = set->GetValue(vm_, 1);
10794514f5e3Sopenharmony_ci    ASSERT_EQ(res2->ToString(vm_)->ToString(vm_), "vlue2");
10804514f5e3Sopenharmony_ci}
10814514f5e3Sopenharmony_ci
10824514f5e3Sopenharmony_cistatic JSSet *CreateJSSet(JSThread *thread)
10834514f5e3Sopenharmony_ci{
10844514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
10854514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
10864514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsSetFunction();
10874514f5e3Sopenharmony_ci    JSHandle<JSSet> set =
10884514f5e3Sopenharmony_ci        JSHandle<JSSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
10894514f5e3Sopenharmony_ci    JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread);
10904514f5e3Sopenharmony_ci    set->SetLinkedSet(thread, hashSet);
10914514f5e3Sopenharmony_ci    return JSSet::Cast(set.GetTaggedValue().GetTaggedObject());
10924514f5e3Sopenharmony_ci}
10934514f5e3Sopenharmony_ci
10944514f5e3Sopenharmony_ci/**
10954514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_102
10964514f5e3Sopenharmony_ci * @tc.name: JSSetIterator_IsSetIterator_GetIndex_GetKind
10974514f5e3Sopenharmony_ci * @tc.desc:
10984514f5e3Sopenharmony_ci * IsSetIterator:Determine if it is a set iterator
10994514f5e3Sopenharmony_ci * GetIndex:Gets the index of the subscript position currently pointed to by the set iterator
11004514f5e3Sopenharmony_ci * GetKind:Obtain the index type 'key/value/key_and_value' for the set iterator
11014514f5e3Sopenharmony_ci * @tc.type: FUNC
11024514f5e3Sopenharmony_ci * @tc.require:  parameter
11034514f5e3Sopenharmony_ci */
11044514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSSetIterator_IsSetIterator_GetIndex_GetKind)
11054514f5e3Sopenharmony_ci{
11064514f5e3Sopenharmony_ci    LocalScope scope(vm_);
11074514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
11084514f5e3Sopenharmony_ci    JSHandle<JSSet> jsSet(thread, CreateJSSet(thread));
11094514f5e3Sopenharmony_ci    EXPECT_TRUE(*jsSet != nullptr);
11104514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsTagSetIterator =
11114514f5e3Sopenharmony_ci        JSSetIterator::CreateSetIterator(thread, JSHandle<JSTaggedValue>(jsSet), IterationKind::KEY);
11124514f5e3Sopenharmony_ci    JSHandle<JSSetIterator> jsSetIterator1(jsTagSetIterator);
11134514f5e3Sopenharmony_ci    EXPECT_EQ(JSTaggedValue::SameValue(jsSetIterator1->GetIteratedSet(), jsSet->GetLinkedSet()), true);
11144514f5e3Sopenharmony_ci    Local<SetIteratorRef> setIterator = JSNApiHelper::ToLocal<SetIteratorRef>(jsTagSetIterator);
11154514f5e3Sopenharmony_ci    EXPECT_TRUE(setIterator->IsSetIterator(vm_));
11164514f5e3Sopenharmony_ci    EXPECT_EQ(setIterator->GetIndex(), 0U);
11174514f5e3Sopenharmony_ci    Local<JSValueRef> resultKey = StringRef::NewFromUtf8(vm_, "keys");
11184514f5e3Sopenharmony_ci    EXPECT_EQ(setIterator->GetKind(vm_)->ToString(vm_)->ToString(vm_), resultKey->ToString(vm_)->ToString(vm_));
11194514f5e3Sopenharmony_ci}
11204514f5e3Sopenharmony_ci
11214514f5e3Sopenharmony_ci/**
11224514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_103
11234514f5e3Sopenharmony_ci * @tc.name: JSValueRef_IsMapIterator
11244514f5e3Sopenharmony_ci * @tc.desc: Determine if it is a Map iterator
11254514f5e3Sopenharmony_ci * @tc.type: FUNC
11264514f5e3Sopenharmony_ci * @tc.require:  parameter
11274514f5e3Sopenharmony_ci */
11284514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsMapIterator)
11294514f5e3Sopenharmony_ci{
11304514f5e3Sopenharmony_ci    LocalScope scope(vm_);
11314514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
11324514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
11334514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
11344514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsMapFunction();
11354514f5e3Sopenharmony_ci    JSHandle<JSMap> jsMap =
11364514f5e3Sopenharmony_ci        JSHandle<JSMap>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
11374514f5e3Sopenharmony_ci    JSHandle<LinkedHashMap> hashMap = LinkedHashMap::Create(thread);
11384514f5e3Sopenharmony_ci    jsMap->SetLinkedMap(thread, hashMap);
11394514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> mapTag = JSHandle<JSTaggedValue>::Cast(jsMap);
11404514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> jsMapIteratorTag =
11414514f5e3Sopenharmony_ci        JSMapIterator::CreateMapIterator(thread, mapTag, IterationKind::KEY_AND_VALUE);
11424514f5e3Sopenharmony_ci    JSHandle<JSMapIterator> jsMapIterator(jsMapIteratorTag);
11434514f5e3Sopenharmony_ci    EXPECT_EQ(JSTaggedValue::SameValue(jsMapIterator->GetIteratedMap(), jsMap->GetLinkedMap()), true);
11444514f5e3Sopenharmony_ci    Local<JSValueRef> mapIterator = JSNApiHelper::ToLocal<MapIteratorRef>(jsMapIteratorTag);
11454514f5e3Sopenharmony_ci    EXPECT_TRUE(mapIterator->IsMapIterator(vm_));
11464514f5e3Sopenharmony_ci}
11474514f5e3Sopenharmony_ci
11484514f5e3Sopenharmony_ci/**
11494514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_104
11504514f5e3Sopenharmony_ci * @tc.name: JSValueRef_IsModuleNamespaceObject
11514514f5e3Sopenharmony_ci * @tc.desc: Determine if it is a module space object
11524514f5e3Sopenharmony_ci * @tc.type: FUNC
11534514f5e3Sopenharmony_ci * @tc.require:  parameter
11544514f5e3Sopenharmony_ci */
11554514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSValueRef_IsModuleNamespaceObject)
11564514f5e3Sopenharmony_ci{
11574514f5e3Sopenharmony_ci    LocalScope scope(vm_);
11584514f5e3Sopenharmony_ci    ObjectFactory *objectFactory = thread_->GetEcmaVM()->GetFactory();
11594514f5e3Sopenharmony_ci    JSHandle<SourceTextModule> module = objectFactory->NewSourceTextModule();
11604514f5e3Sopenharmony_ci    JSHandle<LocalExportEntry> localExportEntry1 = objectFactory->NewLocalExportEntry();
11614514f5e3Sopenharmony_ci    SourceTextModule::AddLocalExportEntry(thread_, module, localExportEntry1, 0, 2);
11624514f5e3Sopenharmony_ci    JSHandle<LocalExportEntry> localExportEntry2 = objectFactory->NewLocalExportEntry();
11634514f5e3Sopenharmony_ci    SourceTextModule::AddLocalExportEntry(thread_, module, localExportEntry2, 1, 2);
11644514f5e3Sopenharmony_ci    JSHandle<TaggedArray> localExportEntries(thread_, module->GetLocalExportEntries());
11654514f5e3Sopenharmony_ci    CString baseFileName = "a.abc";
11664514f5e3Sopenharmony_ci    module->SetEcmaModuleFilenameString(baseFileName);
11674514f5e3Sopenharmony_ci    ModuleManager *moduleManager = thread_->GetCurrentEcmaContext()->GetModuleManager();
11684514f5e3Sopenharmony_ci    moduleManager->AddResolveImportedModule(baseFileName, module.GetTaggedValue());
11694514f5e3Sopenharmony_ci    JSHandle<ModuleNamespace> np =
11704514f5e3Sopenharmony_ci        ModuleNamespace::ModuleNamespaceCreate(thread_, JSHandle<JSTaggedValue>::Cast(module), localExportEntries);
11714514f5e3Sopenharmony_ci    EXPECT_TRUE(ModuleNamespace::PreventExtensions());
11724514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> moduleNamespaceTag = JSHandle<JSTaggedValue>::Cast(np);
11734514f5e3Sopenharmony_ci    Local<JSValueRef> moduleNamespace = JSNApiHelper::ToLocal<ModuleNamespace>(moduleNamespaceTag);
11744514f5e3Sopenharmony_ci    ASSERT_TRUE(moduleNamespace->IsModuleNamespaceObject(vm_));
11754514f5e3Sopenharmony_ci}
11764514f5e3Sopenharmony_ci
11774514f5e3Sopenharmony_ci
11784514f5e3Sopenharmony_ci/**
11794514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_105
11804514f5e3Sopenharmony_ci * @tc.name: IsHole
11814514f5e3Sopenharmony_ci * @tc.desc: Determine if it is a hole
11824514f5e3Sopenharmony_ci * @tc.type: FUNC
11834514f5e3Sopenharmony_ci * @tc.require:  parameter
11844514f5e3Sopenharmony_ci */
11854514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsHole)
11864514f5e3Sopenharmony_ci{
11874514f5e3Sopenharmony_ci    LocalScope scope(vm_);
11884514f5e3Sopenharmony_ci    Local<JSValueRef> b = JSValueRef::Hole(vm_);
11894514f5e3Sopenharmony_ci    ASSERT_TRUE(b->IsHole());
11904514f5e3Sopenharmony_ci}
11914514f5e3Sopenharmony_ci
11924514f5e3Sopenharmony_ci
11934514f5e3Sopenharmony_ci/**
11944514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_106
11954514f5e3Sopenharmony_ci * @tc.name: GetValueDouble
11964514f5e3Sopenharmony_ci * @tc.desc: Get value double from isNumber
11974514f5e3Sopenharmony_ci * @tc.type: FUNC
11984514f5e3Sopenharmony_ci * @tc.require:  parameter
11994514f5e3Sopenharmony_ci */
12004514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetValueDouble)
12014514f5e3Sopenharmony_ci{
12024514f5e3Sopenharmony_ci    LocalScope scope(vm_);
12034514f5e3Sopenharmony_ci    bool isNumber = true;
12044514f5e3Sopenharmony_ci    panda::JSValueRef* nativeValue = new JSValueRef();
12054514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueDouble(isNumber));
12064514f5e3Sopenharmony_ci    isNumber = false;
12074514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueDouble(isNumber));
12084514f5e3Sopenharmony_ci
12094514f5e3Sopenharmony_ci    delete nativeValue;
12104514f5e3Sopenharmony_ci}
12114514f5e3Sopenharmony_ci
12124514f5e3Sopenharmony_ci
12134514f5e3Sopenharmony_ci/**
12144514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_107
12154514f5e3Sopenharmony_ci * @tc.name: GetValueInt32
12164514f5e3Sopenharmony_ci * @tc.desc: Get value int32 from isNumber
12174514f5e3Sopenharmony_ci * @tc.type: FUNC
12184514f5e3Sopenharmony_ci * @tc.require:  parameter
12194514f5e3Sopenharmony_ci */
12204514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetValueInt32)
12214514f5e3Sopenharmony_ci{
12224514f5e3Sopenharmony_ci    LocalScope scope(vm_);
12234514f5e3Sopenharmony_ci    bool isNumber = true;
12244514f5e3Sopenharmony_ci    panda::JSValueRef* nativeValue = new JSValueRef();
12254514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueInt32(isNumber));
12264514f5e3Sopenharmony_ci    isNumber = false;
12274514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueInt32(isNumber));
12284514f5e3Sopenharmony_ci
12294514f5e3Sopenharmony_ci    delete nativeValue;
12304514f5e3Sopenharmony_ci}
12314514f5e3Sopenharmony_ci
12324514f5e3Sopenharmony_ci
12334514f5e3Sopenharmony_ci/**
12344514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_108
12354514f5e3Sopenharmony_ci * @tc.name: GetValueUint32
12364514f5e3Sopenharmony_ci * @tc.desc: Get value uint32 from isNumber
12374514f5e3Sopenharmony_ci * @tc.type: FUNC
12384514f5e3Sopenharmony_ci * @tc.require:  parameter
12394514f5e3Sopenharmony_ci */
12404514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetValueUint32)
12414514f5e3Sopenharmony_ci{
12424514f5e3Sopenharmony_ci    LocalScope scope(vm_);
12434514f5e3Sopenharmony_ci    bool isNumber = true;
12444514f5e3Sopenharmony_ci    panda::JSValueRef* nativeValue = new JSValueRef();
12454514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueUint32(isNumber));
12464514f5e3Sopenharmony_ci    isNumber = false;
12474514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueUint32(isNumber));
12484514f5e3Sopenharmony_ci
12494514f5e3Sopenharmony_ci    delete nativeValue;
12504514f5e3Sopenharmony_ci}
12514514f5e3Sopenharmony_ci
12524514f5e3Sopenharmony_ci
12534514f5e3Sopenharmony_ci/**
12544514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_109
12554514f5e3Sopenharmony_ci * @tc.name: GetValueInt64
12564514f5e3Sopenharmony_ci * @tc.desc: Get value int64 from isNumber
12574514f5e3Sopenharmony_ci * @tc.type: FUNC
12584514f5e3Sopenharmony_ci * @tc.require:  parameter
12594514f5e3Sopenharmony_ci */
12604514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetValueInt64)
12614514f5e3Sopenharmony_ci{
12624514f5e3Sopenharmony_ci    LocalScope scope(vm_);
12634514f5e3Sopenharmony_ci    bool isNumber = true;
12644514f5e3Sopenharmony_ci    panda::JSValueRef* nativeValue = new JSValueRef();
12654514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueInt64(isNumber));
12664514f5e3Sopenharmony_ci    isNumber = false;
12674514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueInt64(isNumber));
12684514f5e3Sopenharmony_ci
12694514f5e3Sopenharmony_ci    delete nativeValue;
12704514f5e3Sopenharmony_ci}
12714514f5e3Sopenharmony_ci
12724514f5e3Sopenharmony_ci
12734514f5e3Sopenharmony_ci/**
12744514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_110
12754514f5e3Sopenharmony_ci * @tc.name: GetValueBool
12764514f5e3Sopenharmony_ci * @tc.desc: Get value bool from isNumber
12774514f5e3Sopenharmony_ci * @tc.type: FUNC
12784514f5e3Sopenharmony_ci * @tc.require:  parameter
12794514f5e3Sopenharmony_ci */
12804514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetValueBool)
12814514f5e3Sopenharmony_ci{
12824514f5e3Sopenharmony_ci    LocalScope scope(vm_);
12834514f5e3Sopenharmony_ci    bool isNumber = true;
12844514f5e3Sopenharmony_ci    panda::JSValueRef* nativeValue = new JSValueRef();
12854514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueBool(isNumber));
12864514f5e3Sopenharmony_ci    isNumber = false;
12874514f5e3Sopenharmony_ci    ASSERT_FALSE(nativeValue->GetValueBool(isNumber));
12884514f5e3Sopenharmony_ci
12894514f5e3Sopenharmony_ci    delete nativeValue;
12904514f5e3Sopenharmony_ci}
12914514f5e3Sopenharmony_ci
12924514f5e3Sopenharmony_ci
12934514f5e3Sopenharmony_ci/**
12944514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_111
12954514f5e3Sopenharmony_ci * @tc.name: ToBigInt
12964514f5e3Sopenharmony_ci * @tc.desc: String to big int
12974514f5e3Sopenharmony_ci * @tc.type: FUNC
12984514f5e3Sopenharmony_ci * @tc.require:  parameter
12994514f5e3Sopenharmony_ci */
13004514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ToBigInt)
13014514f5e3Sopenharmony_ci{
13024514f5e3Sopenharmony_ci    LocalScope scope(vm_);
13034514f5e3Sopenharmony_ci    Local<StringRef> toString = StringRef::NewFromUtf8(vm_, TEST_NUM2);
13044514f5e3Sopenharmony_ci    Local<JSValueRef> toValue(toString);
13054514f5e3Sopenharmony_ci    EXPECT_FALSE(toValue->ToBigInt(vm_)->IsBigInt(vm_));
13064514f5e3Sopenharmony_ci}
13074514f5e3Sopenharmony_ci
13084514f5e3Sopenharmony_ci
13094514f5e3Sopenharmony_ci/**
13104514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_112
13114514f5e3Sopenharmony_ci * @tc.name: IsInt && WithinInt32
13124514f5e3Sopenharmony_ci * @tc.desc: Determine if it is int && Within Int32
13134514f5e3Sopenharmony_ci * @tc.type: FUNC
13144514f5e3Sopenharmony_ci * @tc.require:  parameter
13154514f5e3Sopenharmony_ci */
13164514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsInt)
13174514f5e3Sopenharmony_ci{
13184514f5e3Sopenharmony_ci    LocalScope scope(vm_);
13194514f5e3Sopenharmony_ci    bool input = true;
13204514f5e3Sopenharmony_ci    Local<IntegerRef> res = IntegerRef::New(vm_, input);
13214514f5e3Sopenharmony_ci    EXPECT_TRUE(res->IsInt());
13224514f5e3Sopenharmony_ci    EXPECT_TRUE(res->WithinInt32());
13234514f5e3Sopenharmony_ci}
13244514f5e3Sopenharmony_ci
13254514f5e3Sopenharmony_ci
13264514f5e3Sopenharmony_ci/**
13274514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_113
13284514f5e3Sopenharmony_ci * @tc.name: IsJSFunction
13294514f5e3Sopenharmony_ci * @tc.desc: Determine if it is JSFunction
13304514f5e3Sopenharmony_ci * @tc.type: FUNC
13314514f5e3Sopenharmony_ci * @tc.require:  parameter
13324514f5e3Sopenharmony_ci */
13334514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsJSFunction)
13344514f5e3Sopenharmony_ci{
13354514f5e3Sopenharmony_ci    LocalScope scope(vm_);
13364514f5e3Sopenharmony_ci    bool input = true;
13374514f5e3Sopenharmony_ci    Local<FunctionRef> res = IntegerRef::New(vm_, input);
13384514f5e3Sopenharmony_ci    EXPECT_FALSE(res->IsJSFunction(vm_));
13394514f5e3Sopenharmony_ci}
13404514f5e3Sopenharmony_ci
13414514f5e3Sopenharmony_ci
13424514f5e3Sopenharmony_ci/**
13434514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_114
13444514f5e3Sopenharmony_ci * @tc.name: IsWeakRef
13454514f5e3Sopenharmony_ci * @tc.desc: Determine if it is JSFunction
13464514f5e3Sopenharmony_ci * @tc.type: FUNC
13474514f5e3Sopenharmony_ci * @tc.require:  parameter
13484514f5e3Sopenharmony_ci */
13494514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsWeakRef)
13504514f5e3Sopenharmony_ci{
13514514f5e3Sopenharmony_ci    LocalScope scope(vm_);
13524514f5e3Sopenharmony_ci    Local<JSValueRef> tag = BooleanRef::New(vm_, true);
13534514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsWeakRef(vm_));
13544514f5e3Sopenharmony_ci}
13554514f5e3Sopenharmony_ci
13564514f5e3Sopenharmony_ci
13574514f5e3Sopenharmony_ci/**
13584514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_115
13594514f5e3Sopenharmony_ci * @tc.name: IsArrayIterator
13604514f5e3Sopenharmony_ci * @tc.desc: Determine if it is arrayIterator
13614514f5e3Sopenharmony_ci * @tc.type: FUNC
13624514f5e3Sopenharmony_ci * @tc.require:  parameter
13634514f5e3Sopenharmony_ci */
13644514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsArrayIterator)
13654514f5e3Sopenharmony_ci{
13664514f5e3Sopenharmony_ci    LocalScope scope(vm_);
13674514f5e3Sopenharmony_ci    Local<JSValueRef> tag = ArrayRef::New(vm_, true);
13684514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsArrayIterator(vm_));
13694514f5e3Sopenharmony_ci}
13704514f5e3Sopenharmony_ci
13714514f5e3Sopenharmony_ci
13724514f5e3Sopenharmony_ci/**
13734514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_116
13744514f5e3Sopenharmony_ci * @tc.name: IsStringIterator
13754514f5e3Sopenharmony_ci * @tc.desc: Determine if it is string Iterator
13764514f5e3Sopenharmony_ci * @tc.type: FUNC
13774514f5e3Sopenharmony_ci * @tc.require:  parameter
13784514f5e3Sopenharmony_ci */
13794514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsStringIterator)
13804514f5e3Sopenharmony_ci{
13814514f5e3Sopenharmony_ci    LocalScope scope(vm_);
13824514f5e3Sopenharmony_ci    Local<StringRef> toString = StringRef::NewFromUtf8(vm_, TEST_NUM2);
13834514f5e3Sopenharmony_ci    EXPECT_FALSE(toString->IsStringIterator(vm_));
13844514f5e3Sopenharmony_ci    std::string str = TEST_NUM2;
13854514f5e3Sopenharmony_ci    EXPECT_EQ(toString->DebuggerToString(vm_), str);
13864514f5e3Sopenharmony_ci}
13874514f5e3Sopenharmony_ci
13884514f5e3Sopenharmony_ci
13894514f5e3Sopenharmony_ci/**
13904514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_116
13914514f5e3Sopenharmony_ci * @tc.name: IsJSSharedInt8Array
13924514f5e3Sopenharmony_ci * @tc.desc: Determine if it is JSSharedArray
13934514f5e3Sopenharmony_ci * @tc.type: FUNC
13944514f5e3Sopenharmony_ci * @tc.require:  parameter
13954514f5e3Sopenharmony_ci */
13964514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsJSSharedInt8Array)
13974514f5e3Sopenharmony_ci{
13984514f5e3Sopenharmony_ci    LocalScope scope(vm_);
13994514f5e3Sopenharmony_ci    Local<JSValueRef> tag = ArrayRef::New(vm_, true);
14004514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedInt8Array(vm_));
14014514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedUint8Array(vm_));
14024514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedUint8ClampedArray(vm_));
14034514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedInt16Array(vm_));
14044514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedUint16Array(vm_));
14054514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedInt32Array(vm_));
14064514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedFloat32Array(vm_));
14074514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSSharedUint32Array(vm_));
14084514f5e3Sopenharmony_ci}
14094514f5e3Sopenharmony_ci
14104514f5e3Sopenharmony_ci
14114514f5e3Sopenharmony_ci/**
14124514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_117
14134514f5e3Sopenharmony_ci * @tc.name: IsNativeModuleFailureInfoObject
14144514f5e3Sopenharmony_ci * @tc.desc: Determine if it is nativeModuleFailureInfoObject
14154514f5e3Sopenharmony_ci * @tc.type: FUNC
14164514f5e3Sopenharmony_ci * @tc.require:  parameter
14174514f5e3Sopenharmony_ci */
14184514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsNativeModuleFailureInfoObject)
14194514f5e3Sopenharmony_ci{
14204514f5e3Sopenharmony_ci    LocalScope scope(vm_);
14214514f5e3Sopenharmony_ci    Local<JSValueRef> tag = ArrayRef::New(vm_, true);
14224514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsNativeModuleFailureInfoObject(vm_));
14234514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsSendableArrayBuffer(vm_));
14244514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSLocale(vm_));
14254514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSDateTimeFormat(vm_));
14264514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSRelativeTimeFormat(vm_));
14274514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSIntl(vm_));
14284514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSNumberFormat(vm_));
14294514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSCollator(vm_));
14304514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSPluralRules(vm_));
14314514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsJSListFormat(vm_));
14324514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsAsyncGeneratorObject(vm_));
14334514f5e3Sopenharmony_ci}
14344514f5e3Sopenharmony_ci
14354514f5e3Sopenharmony_ci
14364514f5e3Sopenharmony_ci/**
14374514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_118
14384514f5e3Sopenharmony_ci * @tc.name: IsAsyncGeneratorObject
14394514f5e3Sopenharmony_ci * @tc.desc: Determine if it is asyncGeneratorObject
14404514f5e3Sopenharmony_ci * @tc.type: FUNC
14414514f5e3Sopenharmony_ci * @tc.require:  parameter
14424514f5e3Sopenharmony_ci */
14434514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsAsyncGeneratorObject)
14444514f5e3Sopenharmony_ci{
14454514f5e3Sopenharmony_ci    LocalScope scope(vm_);
14464514f5e3Sopenharmony_ci    Local<JSValueRef> tag = ArrayRef::New(vm_, true);
14474514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsAsyncGeneratorObject(vm_));
14484514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsArrayList(vm_));
14494514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsDeque(vm_));
14504514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsHashMap(vm_));
14514514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsHashSet(vm_));
14524514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsLightWeightMap(vm_));
14534514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsLightWeightSet(vm_));
14544514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsLinkedList(vm_));
14554514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsLinkedListIterator(vm_));
14564514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsList(vm_));
14574514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsPlainArray(vm_));
14584514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsQueue(vm_));
14594514f5e3Sopenharmony_ci    EXPECT_FALSE(tag->IsStack(vm_));
14604514f5e3Sopenharmony_ci}
14614514f5e3Sopenharmony_ci
14624514f5e3Sopenharmony_ci
14634514f5e3Sopenharmony_ci/**
14644514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_119
14654514f5e3Sopenharmony_ci * @tc.name: IsSendableObject
14664514f5e3Sopenharmony_ci * @tc.desc: Determine if it is sendableObject
14674514f5e3Sopenharmony_ci * @tc.type: FUNC
14684514f5e3Sopenharmony_ci * @tc.require:  parameter
14694514f5e3Sopenharmony_ci */
14704514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsSendableObject)
14714514f5e3Sopenharmony_ci{
14724514f5e3Sopenharmony_ci    LocalScope scope(vm_);
14734514f5e3Sopenharmony_ci    Local<JSValueRef> value = ObjectRef::New(vm_);
14744514f5e3Sopenharmony_ci    EXPECT_FALSE(value->IsSendableObject(vm_));
14754514f5e3Sopenharmony_ci    EXPECT_FALSE(value->IsJSShared(vm_));
14764514f5e3Sopenharmony_ci    EXPECT_FALSE(value->IsSharedArray(vm_));
14774514f5e3Sopenharmony_ci    EXPECT_FALSE(value->IsSharedTypedArray(vm_));
14784514f5e3Sopenharmony_ci    EXPECT_FALSE(value->IsSharedSet(vm_));
14794514f5e3Sopenharmony_ci    EXPECT_FALSE(value->IsSharedMap(vm_));
14804514f5e3Sopenharmony_ci    EXPECT_FALSE(value->IsSharedMapIterator(vm_));
14814514f5e3Sopenharmony_ci    EXPECT_TRUE(value->IsHeapObject());
14824514f5e3Sopenharmony_ci}
14834514f5e3Sopenharmony_ci
14844514f5e3Sopenharmony_ci
14854514f5e3Sopenharmony_ci/**
14864514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_120
14874514f5e3Sopenharmony_ci * @tc.name: GetNativePointerValue
14884514f5e3Sopenharmony_ci * @tc.desc: GetNativePointerValue
14894514f5e3Sopenharmony_ci * @tc.type: FUNC
14904514f5e3Sopenharmony_ci * @tc.require:  parameter
14914514f5e3Sopenharmony_ci */
14924514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetNativePointerValue)
14934514f5e3Sopenharmony_ci{
14944514f5e3Sopenharmony_ci    LocalScope scope(vm_);
14954514f5e3Sopenharmony_ci    Local<JSValueRef> value = ObjectRef::New(vm_);
14964514f5e3Sopenharmony_ci    bool isNativePointer = true;
14974514f5e3Sopenharmony_ci    EXPECT_FALSE(value->GetNativePointerValue(vm_, isNativePointer));
14984514f5e3Sopenharmony_ci}
14994514f5e3Sopenharmony_ci
15004514f5e3Sopenharmony_ci
15014514f5e3Sopenharmony_ci/**
15024514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_121
15034514f5e3Sopenharmony_ci * @tc.name: IsDetachedArraybuffer
15044514f5e3Sopenharmony_ci * @tc.desc: IsDetachedArraybuffer
15054514f5e3Sopenharmony_ci * @tc.type: FUNC
15064514f5e3Sopenharmony_ci * @tc.require:  parameter
15074514f5e3Sopenharmony_ci */
15084514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, IsDetachedArraybuffer)
15094514f5e3Sopenharmony_ci{
15104514f5e3Sopenharmony_ci    LocalScope scope(vm_);
15114514f5e3Sopenharmony_ci    const int32_t length = 15;
15124514f5e3Sopenharmony_ci    Local<JSValueRef> sharedArrayBuffer = ArrayBufferRef::New(vm_, length);
15134514f5e3Sopenharmony_ci    bool isNativePointer = true;
15144514f5e3Sopenharmony_ci    EXPECT_FALSE(sharedArrayBuffer->IsDetachedArraybuffer(vm_, isNativePointer));
15154514f5e3Sopenharmony_ci    sharedArrayBuffer->DetachedArraybuffer(vm_, isNativePointer);
15164514f5e3Sopenharmony_ci    EXPECT_TRUE(isNativePointer);
15174514f5e3Sopenharmony_ci}
15184514f5e3Sopenharmony_ci
15194514f5e3Sopenharmony_ci
15204514f5e3Sopenharmony_ci/**
15214514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_122
15224514f5e3Sopenharmony_ci * @tc.name: MapRefGet
15234514f5e3Sopenharmony_ci * @tc.desc: MapRef Get
15244514f5e3Sopenharmony_ci * @tc.type: FUNC
15254514f5e3Sopenharmony_ci * @tc.require:  parameter
15264514f5e3Sopenharmony_ci */
15274514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, MapRefGet)
15284514f5e3Sopenharmony_ci{
15294514f5e3Sopenharmony_ci    LocalScope scope(vm_);
15304514f5e3Sopenharmony_ci    Local<MapRef> object = MapRef::New(vm_);
15314514f5e3Sopenharmony_ci    Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, TEST_KEY);
15324514f5e3Sopenharmony_ci    Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, TEST_VALUE);
15334514f5e3Sopenharmony_ci    EXPECT_FALSE(object->Has(vm_, key));
15344514f5e3Sopenharmony_ci    object->Set(vm_, key, value);
15354514f5e3Sopenharmony_ci    EXPECT_TRUE(object->Has(vm_, key));
15364514f5e3Sopenharmony_ci    Local<JSValueRef> mapRef = object->Get(vm_, TEST_KEY);
15374514f5e3Sopenharmony_ci    EXPECT_FALSE(object->Has(vm_, mapRef));
15384514f5e3Sopenharmony_ci    object->Delete(vm_, key);
15394514f5e3Sopenharmony_ci    object->GetEntries(vm_);
15404514f5e3Sopenharmony_ci    object->GetKeys(vm_);
15414514f5e3Sopenharmony_ci    object->GetValues(vm_);
15424514f5e3Sopenharmony_ci    EXPECT_FALSE(object->Has(vm_, TEST_KEY));
15434514f5e3Sopenharmony_ci    object->Clear(vm_);
15444514f5e3Sopenharmony_ci}
15454514f5e3Sopenharmony_ci
15464514f5e3Sopenharmony_ci
15474514f5e3Sopenharmony_ci/**
15484514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_123
15494514f5e3Sopenharmony_ci * @tc.name: SendableMapRef
15504514f5e3Sopenharmony_ci * @tc.desc: SendableMapRef test
15514514f5e3Sopenharmony_ci * @tc.type: FUNC
15524514f5e3Sopenharmony_ci * @tc.require:  parameter
15534514f5e3Sopenharmony_ci */
15544514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, SendableMapRef)
15554514f5e3Sopenharmony_ci{
15564514f5e3Sopenharmony_ci    LocalScope scope(vm_);
15574514f5e3Sopenharmony_ci    Local<SendableMapRef> object = SendableMapRef::New(vm_);
15584514f5e3Sopenharmony_ci    Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, TEST_KEY);
15594514f5e3Sopenharmony_ci    Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, TEST_VALUE);
15604514f5e3Sopenharmony_ci    EXPECT_FALSE(object->Has(vm_, key));
15614514f5e3Sopenharmony_ci    object->Set(vm_, key, value);
15624514f5e3Sopenharmony_ci    object->Set(vm_, TEST_KEY, value);
15634514f5e3Sopenharmony_ci    EXPECT_TRUE(object->Has(vm_, key));
15644514f5e3Sopenharmony_ci    Local<JSValueRef> sendableMapRef = object->Get(vm_, TEST_KEY);
15654514f5e3Sopenharmony_ci    sendableMapRef = object->Get(vm_, key);
15664514f5e3Sopenharmony_ci    EXPECT_FALSE(object->Has(vm_, sendableMapRef));
15674514f5e3Sopenharmony_ci    Local<SendableMapIteratorRef> sendableMapIteratorRef = object->GetEntries(vm_);
15684514f5e3Sopenharmony_ci    sendableMapIteratorRef->Next(vm_);
15694514f5e3Sopenharmony_ci    object->GetKey(vm_, 0);
15704514f5e3Sopenharmony_ci    object->GetKeys(vm_);
15714514f5e3Sopenharmony_ci    object->GetValue(vm_, 0);
15724514f5e3Sopenharmony_ci    object->GetValues(vm_);
15734514f5e3Sopenharmony_ci    object->GetSize(vm_);
15744514f5e3Sopenharmony_ci    object->GetTotalElements(vm_);
15754514f5e3Sopenharmony_ci    EXPECT_TRUE(object->Has(vm_, TEST_KEY));
15764514f5e3Sopenharmony_ci    object->Delete(vm_, key);
15774514f5e3Sopenharmony_ci    object->Clear(vm_);
15784514f5e3Sopenharmony_ci}
15794514f5e3Sopenharmony_ci
15804514f5e3Sopenharmony_ci
15814514f5e3Sopenharmony_ci/**
15824514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_124
15834514f5e3Sopenharmony_ci * @tc.name: MapIteratorRef
15844514f5e3Sopenharmony_ci * @tc.desc: MapIteratorRef test
15854514f5e3Sopenharmony_ci * @tc.type: FUNC
15864514f5e3Sopenharmony_ci * @tc.require:  parameter
15874514f5e3Sopenharmony_ci */
15884514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, MapIteratorRef)
15894514f5e3Sopenharmony_ci{
15904514f5e3Sopenharmony_ci    LocalScope scope(vm_);
15914514f5e3Sopenharmony_ci    Local<MapRef> mapRef = MapRef::New(vm_);
15924514f5e3Sopenharmony_ci    Local<MapIteratorRef> object = MapIteratorRef::New(vm_, mapRef);
15934514f5e3Sopenharmony_ci    Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, TEST_KEY);
15944514f5e3Sopenharmony_ci    Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, TEST_VALUE);
15954514f5e3Sopenharmony_ci    EXPECT_FALSE(object->Has(vm_, key));
15964514f5e3Sopenharmony_ci    ecmascript::EcmaRuntimeCallInfo *ecmaRuntimeCallInfo = object->GetEcmaRuntimeCallInfo(vm_);
15974514f5e3Sopenharmony_ci    object->Next(vm_, ecmaRuntimeCallInfo);
15984514f5e3Sopenharmony_ci    object->Next(vm_);
15994514f5e3Sopenharmony_ci    object->Set(vm_, key, value);
16004514f5e3Sopenharmony_ci    object->Set(vm_, TEST_KEY, value);
16014514f5e3Sopenharmony_ci    EXPECT_TRUE(object->Has(vm_, key));
16024514f5e3Sopenharmony_ci    Local<JSValueRef> mapIteratorRef = object->Get(vm_, TEST_KEY);
16034514f5e3Sopenharmony_ci    mapIteratorRef = object->Get(vm_, key);
16044514f5e3Sopenharmony_ci    object->Delete(vm_, key);
16054514f5e3Sopenharmony_ci    EXPECT_FALSE(object->Has(vm_, mapIteratorRef));
16064514f5e3Sopenharmony_ci}
16074514f5e3Sopenharmony_ci
16084514f5e3Sopenharmony_ci
16094514f5e3Sopenharmony_ci/**
16104514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_125
16114514f5e3Sopenharmony_ci * @tc.name: SetIteratorRef
16124514f5e3Sopenharmony_ci * @tc.desc: SetIteratorRef test
16134514f5e3Sopenharmony_ci * @tc.type: FUNC
16144514f5e3Sopenharmony_ci * @tc.require:  parameter
16154514f5e3Sopenharmony_ci */
16164514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, SetIteratorRef)
16174514f5e3Sopenharmony_ci{
16184514f5e3Sopenharmony_ci    LocalScope scope(vm_);
16194514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
16204514f5e3Sopenharmony_ci    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
16214514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
16224514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> constructor = env->GetBuiltinsSetFunction();
16234514f5e3Sopenharmony_ci    JSHandle<JSSet> set =
16244514f5e3Sopenharmony_ci        JSHandle<JSSet>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(constructor), constructor));
16254514f5e3Sopenharmony_ci    JSHandle<LinkedHashSet> hashSet = LinkedHashSet::Create(thread);
16264514f5e3Sopenharmony_ci    set->SetLinkedSet(thread, hashSet);
16274514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> setTag = JSHandle<JSTaggedValue>::Cast(set);
16284514f5e3Sopenharmony_ci    Local<SetRef> setRef = JSNApiHelper::ToLocal<SetRef>(setTag);
16294514f5e3Sopenharmony_ci    Local<MapIteratorRef> object = SetIteratorRef::New(vm_, setRef);
16304514f5e3Sopenharmony_ci    EXPECT_TRUE(object->IsHeapObject());
16314514f5e3Sopenharmony_ci}
16324514f5e3Sopenharmony_ci
16334514f5e3Sopenharmony_ci
16344514f5e3Sopenharmony_ci/**
16354514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_126
16364514f5e3Sopenharmony_ci * @tc.name: PromiseRejectInfo
16374514f5e3Sopenharmony_ci * @tc.desc: PromiseRejectInfo test
16384514f5e3Sopenharmony_ci * @tc.type: FUNC
16394514f5e3Sopenharmony_ci * @tc.require:  parameter
16404514f5e3Sopenharmony_ci */
16414514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, PromiseRejectInfo)
16424514f5e3Sopenharmony_ci{
16434514f5e3Sopenharmony_ci    LocalScope scope(vm_);
16444514f5e3Sopenharmony_ci    Local<StringRef> toStringPromise = StringRef::NewFromUtf8(vm_, TEST_NUM1);
16454514f5e3Sopenharmony_ci    Local<JSValueRef> promise(toStringPromise);
16464514f5e3Sopenharmony_ci    Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm_, TEST_NUM1);
16474514f5e3Sopenharmony_ci    Local<JSValueRef> reason(toStringReason);
16484514f5e3Sopenharmony_ci    std::string* str = new std::string(TEST_VALUE);
16494514f5e3Sopenharmony_ci    void *data = static_cast<void *>(str);
16504514f5e3Sopenharmony_ci    PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
16514514f5e3Sopenharmony_ci    EXPECT_EQ(promisereject.GetOperation(), PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT);
16524514f5e3Sopenharmony_ci
16534514f5e3Sopenharmony_ci    delete str;
16544514f5e3Sopenharmony_ci}
16554514f5e3Sopenharmony_ci
16564514f5e3Sopenharmony_ci/**
16574514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_127
16584514f5e3Sopenharmony_ci * @tc.name: ObjectRef
16594514f5e3Sopenharmony_ci * @tc.desc: ObjectRef test
16604514f5e3Sopenharmony_ci * @tc.type: FUNC
16614514f5e3Sopenharmony_ci * @tc.require:  parameter
16624514f5e3Sopenharmony_ci */
16634514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, ObjectRef)
16644514f5e3Sopenharmony_ci{
16654514f5e3Sopenharmony_ci    LocalScope scope(vm_);
16664514f5e3Sopenharmony_ci    Local<ObjectRef> object = ObjectRef::New(vm_);
16674514f5e3Sopenharmony_ci    object = ObjectRef::NewS(vm_);
16684514f5e3Sopenharmony_ci    std::string str = TEST_VALUE;
16694514f5e3Sopenharmony_ci    object->CreateNativeModuleFailureInfo(vm_, str);
16704514f5e3Sopenharmony_ci    bool input = true;
16714514f5e3Sopenharmony_ci    Local<FunctionRef> res = IntegerRef::New(vm_, input);
16724514f5e3Sopenharmony_ci    object->CreateAccessorData(vm_, res, res);
16734514f5e3Sopenharmony_ci    uintptr_t addr = ObjectRef::NewObject(vm_);
16744514f5e3Sopenharmony_ci    Local<StringRef> key = StringRef::NewFromUtf8(vm_, TEST_VALUE);
16754514f5e3Sopenharmony_ci    Local<JSValueRef> value = ObjectRef::New(vm_);
16764514f5e3Sopenharmony_ci    PropertyAttribute property(value, true, true, true);
16774514f5e3Sopenharmony_ci    object->SetConcurrentNativePointerField(vm_, 0);
16784514f5e3Sopenharmony_ci    EXPECT_FALSE(object->SetPrototype(vm_, object));
16794514f5e3Sopenharmony_ci    EXPECT_FALSE(object->HasOwnProperty(vm_, key));
16804514f5e3Sopenharmony_ci    EXPECT_FALSE(object->GetOwnProperty(vm_, key, property));
16814514f5e3Sopenharmony_ci    EXPECT_NE(addr, 1);
16824514f5e3Sopenharmony_ci}
16834514f5e3Sopenharmony_ci
16844514f5e3Sopenharmony_ci/**
16854514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_128
16864514f5e3Sopenharmony_ci * @tc.name: SendableArrayBufferRef
16874514f5e3Sopenharmony_ci * @tc.desc: SendableArrayBufferRef test
16884514f5e3Sopenharmony_ci * @tc.type: FUNC
16894514f5e3Sopenharmony_ci * @tc.require:  parameter
16904514f5e3Sopenharmony_ci */
16914514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, SendableArrayBufferRef)
16924514f5e3Sopenharmony_ci{
16934514f5e3Sopenharmony_ci    LocalScope scope(vm_);
16944514f5e3Sopenharmony_ci    Local<SendableArrayBufferRef> res = SendableArrayBufferRef::New(vm_, 0);
16954514f5e3Sopenharmony_ci    const int32_t length = 33;
16964514f5e3Sopenharmony_ci    res->GetBuffer(vm_);
16974514f5e3Sopenharmony_ci    EXPECT_NE(res->ByteLength(vm_), length);
16984514f5e3Sopenharmony_ci    res->Detach(vm_);
16994514f5e3Sopenharmony_ci    EXPECT_NE(res->IsDetach(vm_), length);
17004514f5e3Sopenharmony_ci}
17014514f5e3Sopenharmony_ci
17024514f5e3Sopenharmony_ci/**
17034514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_129
17044514f5e3Sopenharmony_ci * @tc.name: JSNApiSetPkgAliasList
17054514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the function of setting the map container module was successful.
17064514f5e3Sopenharmony_ci * @tc.type: FUNC
17074514f5e3Sopenharmony_ci * @tc.require:  parameter
17084514f5e3Sopenharmony_ci */
17094514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApiSetPkgAliasList)
17104514f5e3Sopenharmony_ci{
17114514f5e3Sopenharmony_ci    LocalScope scope(vm_);
17124514f5e3Sopenharmony_ci    std::map<std::string, std::string> str = { { TEST_NUM1, TEST_NUM2 } };
17134514f5e3Sopenharmony_ci    JSNApi::SetPkgAliasList(vm_, str);
17144514f5e3Sopenharmony_ci    std::string moduleName = TEST_NUM1;
17154514f5e3Sopenharmony_ci    EXPECT_EQ(std::string(vm_->GetPkgNameWithAlias(TEST_NUM1)), TEST_NUM2);
17164514f5e3Sopenharmony_ci}
17174514f5e3Sopenharmony_ci
17184514f5e3Sopenharmony_ci/**
17194514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_130
17204514f5e3Sopenharmony_ci * @tc.name: InitForConcurrentFunction
17214514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the function of setting the map container module was successful.
17224514f5e3Sopenharmony_ci * @tc.type: FUNC
17234514f5e3Sopenharmony_ci * @tc.require:  parameter
17244514f5e3Sopenharmony_ci */
17254514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApiInitForConcurrentFunction)
17264514f5e3Sopenharmony_ci{
17274514f5e3Sopenharmony_ci    LocalScope scope(vm_);
17284514f5e3Sopenharmony_ci    void *taskInfo = reinterpret_cast<void *>(BuiltinsFunction::FunctionPrototypeInvokeSelf);
17294514f5e3Sopenharmony_ci    Local<JSValueRef> function = FunctionRef::New(vm_, FunctionCallback);
17304514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::InitForConcurrentFunction(vm_, function, taskInfo));
17314514f5e3Sopenharmony_ci}
17324514f5e3Sopenharmony_ci
17334514f5e3Sopenharmony_ci/**
17344514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_131
17354514f5e3Sopenharmony_ci * @tc.name: GetStackBeforeCallNapiSuccess
17364514f5e3Sopenharmony_ci * @tc.desc: Used to verify whether the function of setting the map container module was successful.
17374514f5e3Sopenharmony_ci * @tc.type: FUNC
17384514f5e3Sopenharmony_ci * @tc.require:  parameter
17394514f5e3Sopenharmony_ci */
17404514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, GetStackBeforeCallNapiSuccess)
17414514f5e3Sopenharmony_ci{
17424514f5e3Sopenharmony_ci    LocalScope scope(vm_);
17434514f5e3Sopenharmony_ci    SourceMapCallback callback { nullptr };
17444514f5e3Sopenharmony_ci    JSNApi::SetSourceMapCallback(vm_, callback);
17454514f5e3Sopenharmony_ci    vm_->GetJSThread()->SetIsProfiling(false);
17464514f5e3Sopenharmony_ci    bool getStackBeforeCallNapiSuccess = false;
17474514f5e3Sopenharmony_ci    JSNApi::GetStackBeforeCallNapiSuccess(vm_, getStackBeforeCallNapiSuccess);
17484514f5e3Sopenharmony_ci    JSNApi::GetStackAfterCallNapi(vm_);
17494514f5e3Sopenharmony_ci    EXPECT_FALSE(getStackBeforeCallNapiSuccess);
17504514f5e3Sopenharmony_ci}
17514514f5e3Sopenharmony_ci
17524514f5e3Sopenharmony_ci/*
17534514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_132
17544514f5e3Sopenharmony_ci * @tc.name: PrintExceptionInfo
17554514f5e3Sopenharmony_ci * @tc.desc: Obtain and print abnormal information correctly.
17564514f5e3Sopenharmony_ci * @tc.type: FUNC
17574514f5e3Sopenharmony_ci * @tc.require:  parameter
17584514f5e3Sopenharmony_ci */
17594514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, PrintExceptionInfo)
17604514f5e3Sopenharmony_ci{
17614514f5e3Sopenharmony_ci    LocalScope scope(vm_);
17624514f5e3Sopenharmony_ci    std::thread t1([&]() {
17634514f5e3Sopenharmony_ci        RuntimeOption option;
17644514f5e3Sopenharmony_ci        option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR);
17654514f5e3Sopenharmony_ci        auto *vm2 = JSNApi::CreateJSVM(option);
17664514f5e3Sopenharmony_ci        auto *thread = vm2->GetJSThread();
17674514f5e3Sopenharmony_ci        thread->SetException(JSTaggedValue::Exception());
17684514f5e3Sopenharmony_ci        EXPECT_NE(vm2, nullptr) << "Cannot create Runtime";
17694514f5e3Sopenharmony_ci        JSNApi::PrintExceptionInfo(vm2);
17704514f5e3Sopenharmony_ci        JSNApi::DestroyJSVM(vm2);
17714514f5e3Sopenharmony_ci    });
17724514f5e3Sopenharmony_ci    {
17734514f5e3Sopenharmony_ci        ThreadSuspensionScope suspensionScope(thread_);
17744514f5e3Sopenharmony_ci        t1.join();
17754514f5e3Sopenharmony_ci    }
17764514f5e3Sopenharmony_ci}
17774514f5e3Sopenharmony_ci
17784514f5e3Sopenharmony_ci/**
17794514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_133
17804514f5e3Sopenharmony_ci * @tc.name: StartDebugger
17814514f5e3Sopenharmony_ci * @tc.desc: StartDebugger test
17824514f5e3Sopenharmony_ci * @tc.type: FUNC
17834514f5e3Sopenharmony_ci * @tc.require:  parameter
17844514f5e3Sopenharmony_ci */
17854514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_StartDebugger)
17864514f5e3Sopenharmony_ci{
17874514f5e3Sopenharmony_ci    EcmaVM *vm = nullptr;
17884514f5e3Sopenharmony_ci    JSNApi::DebugOption *option = new JSNApi::DebugOption();
17894514f5e3Sopenharmony_ci
17904514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebugger(vm, *option));
17914514f5e3Sopenharmony_ci
17924514f5e3Sopenharmony_ci    option->port = INT_MINUS_1;
17934514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebugger(vm_, *option));
17944514f5e3Sopenharmony_ci
17954514f5e3Sopenharmony_ci    option->port = INT_ONE;
17964514f5e3Sopenharmony_ci    option->libraryPath = nullptr;
17974514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebugger(vm_, *option));
17984514f5e3Sopenharmony_ci
17994514f5e3Sopenharmony_ci    option->libraryPath = ARK_DEBUGGER_LIB_PATH;
18004514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebugger(vm_, *option));
18014514f5e3Sopenharmony_ci
18024514f5e3Sopenharmony_ci    delete option;
18034514f5e3Sopenharmony_ci}
18044514f5e3Sopenharmony_ci
18054514f5e3Sopenharmony_ci/**
18064514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_134
18074514f5e3Sopenharmony_ci * @tc.name: StartDebuggerForOldProcess
18084514f5e3Sopenharmony_ci * @tc.desc: StartDebuggerForOldProcess test
18094514f5e3Sopenharmony_ci * @tc.type: FUNC
18104514f5e3Sopenharmony_ci * @tc.require:  parameter
18114514f5e3Sopenharmony_ci */
18124514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_StartDebuggerForOldProcess)
18134514f5e3Sopenharmony_ci{
18144514f5e3Sopenharmony_ci    EcmaVM *vm = nullptr;
18154514f5e3Sopenharmony_ci    JSNApi::DebugOption *option = new JSNApi::DebugOption();
18164514f5e3Sopenharmony_ci    DebuggerPostTask debuggerPostTask = {};
18174514f5e3Sopenharmony_ci
18184514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebuggerForOldProcess(vm, *option, 1, debuggerPostTask));
18194514f5e3Sopenharmony_ci
18204514f5e3Sopenharmony_ci    option->libraryPath = ARK_DEBUGGER_LIB_PATH;
18214514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebuggerForOldProcess(vm_, *option, 1, debuggerPostTask));
18224514f5e3Sopenharmony_ci
18234514f5e3Sopenharmony_ci    delete option;
18244514f5e3Sopenharmony_ci}
18254514f5e3Sopenharmony_ci
18264514f5e3Sopenharmony_ci/**
18274514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_135
18284514f5e3Sopenharmony_ci * @tc.name: StartDebuggerForSocketPair
18294514f5e3Sopenharmony_ci * @tc.desc: StartDebuggerForSocketPair test
18304514f5e3Sopenharmony_ci * @tc.type: FUNC
18314514f5e3Sopenharmony_ci * @tc.require:  parameter
18324514f5e3Sopenharmony_ci */
18334514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_StartDebuggerForSocketPair)
18344514f5e3Sopenharmony_ci{
18354514f5e3Sopenharmony_ci    int tid = INT_MINUS_1;
18364514f5e3Sopenharmony_ci    int socketfd = 0;
18374514f5e3Sopenharmony_ci
18384514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebuggerForSocketPair(tid, socketfd));
18394514f5e3Sopenharmony_ci
18404514f5e3Sopenharmony_ci    tid = 0;
18414514f5e3Sopenharmony_ci    ecmascript::tooling::JsDebuggerManager *jsDebuggerManager = new ecmascript::tooling::JsDebuggerManager(vm_);
18424514f5e3Sopenharmony_ci    ecmascript::tooling::JsDebuggerManager::AddJsDebuggerManager(tid, jsDebuggerManager);
18434514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StartDebuggerForSocketPair(tid, socketfd));
18444514f5e3Sopenharmony_ci
18454514f5e3Sopenharmony_ci    delete jsDebuggerManager;
18464514f5e3Sopenharmony_ci}
18474514f5e3Sopenharmony_ci
18484514f5e3Sopenharmony_ci/**
18494514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_136
18504514f5e3Sopenharmony_ci * @tc.name: NotifyDebugMode
18514514f5e3Sopenharmony_ci * @tc.desc: NotifyDebugMode test
18524514f5e3Sopenharmony_ci * @tc.type: FUNC
18534514f5e3Sopenharmony_ci * @tc.require:  parameter
18544514f5e3Sopenharmony_ci */
18554514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_NotifyDebugMode)
18564514f5e3Sopenharmony_ci{
18574514f5e3Sopenharmony_ci    int tid = INT_MINUS_1;
18584514f5e3Sopenharmony_ci    EcmaVM *vm = nullptr;
18594514f5e3Sopenharmony_ci    JSNApi::DebugOption *option = new JSNApi::DebugOption();
18604514f5e3Sopenharmony_ci    int32_t instanceId = 0;
18614514f5e3Sopenharmony_ci    DebuggerPostTask debuggerPostTask = {};
18624514f5e3Sopenharmony_ci    bool debugApp = false;
18634514f5e3Sopenharmony_ci
18644514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::NotifyDebugMode(tid, vm, *option));
18654514f5e3Sopenharmony_ci    EXPECT_TRUE(JSNApi::NotifyDebugMode(tid, vm_, *option));
18664514f5e3Sopenharmony_ci
18674514f5e3Sopenharmony_ci    debugApp = true;
18684514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::NotifyDebugMode(tid, vm_, *option, instanceId, debuggerPostTask, debugApp));
18694514f5e3Sopenharmony_ci
18704514f5e3Sopenharmony_ci    option->libraryPath = ARK_DEBUGGER_LIB_PATH;
18714514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::NotifyDebugMode(tid, vm_, *option, instanceId, debuggerPostTask, debugApp));
18724514f5e3Sopenharmony_ci
18734514f5e3Sopenharmony_ci    delete option;
18744514f5e3Sopenharmony_ci}
18754514f5e3Sopenharmony_ci
18764514f5e3Sopenharmony_ci/**
18774514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_137
18784514f5e3Sopenharmony_ci * @tc.name: StoreDebugInfo
18794514f5e3Sopenharmony_ci * @tc.desc: StoreDebugInfo test
18804514f5e3Sopenharmony_ci * @tc.type: FUNC
18814514f5e3Sopenharmony_ci * @tc.require:  parameter
18824514f5e3Sopenharmony_ci */
18834514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_StoreDebugInfo)
18844514f5e3Sopenharmony_ci{
18854514f5e3Sopenharmony_ci    int tid = INT_MINUS_1;
18864514f5e3Sopenharmony_ci    EcmaVM *vm = nullptr;
18874514f5e3Sopenharmony_ci    JSNApi::DebugOption *option = new JSNApi::DebugOption();
18884514f5e3Sopenharmony_ci    DebuggerPostTask debuggerPostTask = {};
18894514f5e3Sopenharmony_ci    bool debugApp = false;
18904514f5e3Sopenharmony_ci
18914514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StoreDebugInfo(tid, vm, *option, debuggerPostTask, debugApp));
18924514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StoreDebugInfo(tid, vm_, *option, debuggerPostTask, debugApp));
18934514f5e3Sopenharmony_ci
18944514f5e3Sopenharmony_ci    option->libraryPath = ARK_DEBUGGER_LIB_PATH;
18954514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StoreDebugInfo(tid, vm_, *option, debuggerPostTask, debugApp));
18964514f5e3Sopenharmony_ci
18974514f5e3Sopenharmony_ci    delete option;
18984514f5e3Sopenharmony_ci}
18994514f5e3Sopenharmony_ci
19004514f5e3Sopenharmony_ci/**
19014514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_138
19024514f5e3Sopenharmony_ci * @tc.name: StopDebugger
19034514f5e3Sopenharmony_ci * @tc.desc: StopDebugger test
19044514f5e3Sopenharmony_ci * @tc.type: FUNC
19054514f5e3Sopenharmony_ci * @tc.require:  parameter
19064514f5e3Sopenharmony_ci */
19074514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_StopDebugger)
19084514f5e3Sopenharmony_ci{
19094514f5e3Sopenharmony_ci    int tid = INT_MINUS_1;
19104514f5e3Sopenharmony_ci    EcmaVM *vm = nullptr;
19114514f5e3Sopenharmony_ci
19124514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StopDebugger(vm));
19134514f5e3Sopenharmony_ci
19144514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::StopDebugger(tid));
19154514f5e3Sopenharmony_ci}
19164514f5e3Sopenharmony_ci
19174514f5e3Sopenharmony_ci/**
19184514f5e3Sopenharmony_ci * @tc.number: ffi_interface_api_138
19194514f5e3Sopenharmony_ci * @tc.name: KeyIsNumber
19204514f5e3Sopenharmony_ci * @tc.desc: KeyIsNumber test
19214514f5e3Sopenharmony_ci * @tc.type: FUNC
19224514f5e3Sopenharmony_ci * @tc.require:  parameter
19234514f5e3Sopenharmony_ci */
19244514f5e3Sopenharmony_ciHWTEST_F_L0(JSNApiTests, JSNApi_KeyIsNumber)
19254514f5e3Sopenharmony_ci{
19264514f5e3Sopenharmony_ci    EXPECT_TRUE(JSNApi::KeyIsNumber(STR_NUM));
19274514f5e3Sopenharmony_ci    EXPECT_FALSE(JSNApi::KeyIsNumber(STR_TEST));
19284514f5e3Sopenharmony_ci}
19294514f5e3Sopenharmony_ci} // namespace panda::test