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