1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "ecmascript/builtins/builtins_global.h" 17 18#include "ecmascript/js_hclass.h" 19#include "ecmascript/ecma_runtime_call_info.h" 20#include "ecmascript/ecma_vm.h" 21#include "ecmascript/global_env.h" 22#include "ecmascript/js_tagged_value-inl.h" 23#include "ecmascript/js_thread.h" 24#include "ecmascript/object_factory.h" 25#include "ecmascript/js_array.h" 26#include "ecmascript/shared_objects/js_shared_array.h" 27#include "ecmascript/tests/test_helper.h" 28 29using namespace panda::ecmascript; 30using namespace panda::ecmascript::builtins; 31using BuiltinsBase = panda::ecmascript::base::BuiltinsBase; 32 33namespace panda::test { 34class BuiltinsGlobalTest : public BaseTestWithScope<false> { 35public: 36 static JSHandle<JSObject> NewJSObject(JSThread *thread, ObjectFactory *factory, JSHandle<GlobalEnv> globalEnv) 37 { 38 JSFunction *jsFunc = globalEnv->GetObjectFunction().GetObject<JSFunction>(); 39 JSHandle<JSTaggedValue> jsFunc1(thread, jsFunc); 40 JSHandle<JSObject> jsObj = factory->NewJSObjectByConstructor(JSHandle<JSFunction>(jsFunc1), jsFunc1); 41 return jsObj; 42 } 43}; 44 45HWTEST_F_L0(BuiltinsGlobalTest, DecodeURIComponent) 46{ 47 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 48 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 49 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 50 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(123)); 51 52 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 53 JSTaggedValue result = BuiltinsGlobal::DecodeURIComponent(ecmaRuntimeCallInfo); 54 TestHelper::TearDownFrame(thread, prev); 55 EXPECT_TRUE(result.IsString()); 56 JSHandle<EcmaString> ecmaStrHandle(thread, result); 57 EXPECT_STREQ("123", EcmaStringAccessor(ecmaStrHandle).ToCString().c_str()); 58} 59 60HWTEST_F_L0(BuiltinsGlobalTest, EncodeURIComponent) 61{ 62 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 63 ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 64 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 65 ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(123)); 66 67 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 68 JSTaggedValue result = BuiltinsGlobal::EncodeURIComponent(ecmaRuntimeCallInfo); 69 TestHelper::TearDownFrame(thread, prev); 70 EXPECT_TRUE(result.IsString()); 71 JSHandle<EcmaString> ecmaStrHandle(thread, result); 72 EXPECT_STREQ("123", EcmaStringAccessor(ecmaStrHandle).ToCString().c_str()); 73} 74 75HWTEST_F_L0(BuiltinsGlobalTest, PrintEntrypointAndPrintString) 76{ 77 // msg == nullptr 78 JSTaggedValue result = BuiltinsGlobal::PrintEntrypoint(nullptr); 79 EXPECT_EQ(result, JSTaggedValue::Undefined()); 80} 81 82HWTEST_F_L0(BuiltinsGlobalTest, CallJsProxy) 83{ 84 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 85 auto ecmaVM = thread->GetEcmaVM(); 86 JSHandle<GlobalEnv> env = ecmaVM->GetGlobalEnv(); 87 JSHandle<JSTaggedValue> emptyObj(thread, NewJSObject(thread, factory, env).GetTaggedValue()); 88 JSHandle<JSProxy> proxy = factory->NewJSProxy(emptyObj, emptyObj); 89 proxy->SetCallable(false); 90 auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 91 ecmaRuntimeCallInfo->SetFunction(proxy.GetTaggedValue()); 92 ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 93 94 [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 95 JSTaggedValue result = BuiltinsGlobal::CallJsProxy(ecmaRuntimeCallInfo); 96 TestHelper::TearDownFrame(thread, prev); 97 EXPECT_TRUE(thread->HasPendingException()); 98 EXPECT_EQ(result, JSTaggedValue::Undefined()); 99 thread->ClearException(); 100} 101 102HWTEST_F_L0(BuiltinsGlobalTest, Escape) 103{ 104 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 105 JSHandle<EcmaString> str1 = factory->NewFromASCII("?!=()#%&"); 106 auto ecmaRuntimeCallInfo1 = 107 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); // NOLINT, 6 means 3 paras 108 ecmaRuntimeCallInfo1->SetFunction(JSTaggedValue::Undefined()); 109 ecmaRuntimeCallInfo1->SetThis(JSTaggedValue::Undefined()); 110 ecmaRuntimeCallInfo1->SetCallArg(0, str1.GetTaggedValue()); 111 112 [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 113 JSTaggedValue result1 = BuiltinsGlobal::Escape(ecmaRuntimeCallInfo1); 114 TestHelper::TearDownFrame(thread, prev1); 115 EXPECT_TRUE(result1.IsString()); 116 JSHandle<EcmaString> ecmaStrHandle1(thread, result1); 117 EXPECT_STREQ("%3F%21%3D%28%29%23%25%26", EcmaStringAccessor(ecmaStrHandle1).ToCString().c_str()); // NOLINT 118 119 JSHandle<EcmaString> str2 = factory->NewFromASCII("%u%u0%u9%ua%uF%u00%u09%u0f%u0F%u000%u00a%u00F"); 120 auto ecmaRuntimeCallInfo2 = 121 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); // NOLINT 122 ecmaRuntimeCallInfo2->SetFunction(JSTaggedValue::Undefined()); 123 ecmaRuntimeCallInfo2->SetThis(JSTaggedValue::Undefined()); 124 ecmaRuntimeCallInfo2->SetCallArg(0, str2.GetTaggedValue()); // NOLINT 125 126 [[maybe_unused]] auto prev2 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo2); 127 JSTaggedValue result2 = BuiltinsGlobal::Escape(ecmaRuntimeCallInfo2); 128 TestHelper::TearDownFrame(thread, prev2); 129 EXPECT_TRUE(result2.IsString()); 130 JSHandle<EcmaString> ecmaStrHandle2(thread, result2); 131 EXPECT_STREQ("%25u%25u0%25u9%25ua%25uF%25u00%25u09%25u0f%25u0F%25u000%25u00a%25u00F", // NOLINT special value 132 EcmaStringAccessor(ecmaStrHandle2).ToCString().c_str()); 133 134 JSHandle<EcmaString> str3 = factory->NewFromASCII("Hello World!"); 135 std::vector<JSTaggedValue> args{str3.GetTaggedValue()}; 136 auto ecmaRuntimeCallInfo3 = TestHelper::CreateEcmaRuntimeCallInfo(thread, args, 6); 137 138 [[maybe_unused]] auto prev3 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo3); 139 JSTaggedValue result3 = BuiltinsGlobal::Escape(ecmaRuntimeCallInfo3); 140 TestHelper::TearDownFrame(thread, prev3); 141 EXPECT_TRUE(result3.IsString()); 142 JSHandle<EcmaString> ecmaStrHandle3(thread, result3); 143 EXPECT_STREQ("Hello%20World%21", EcmaStringAccessor(ecmaStrHandle3).ToCString().c_str()); 144} 145 146HWTEST_F_L0(BuiltinsGlobalTest, Unescape) 147{ 148 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 149 JSHandle<EcmaString> str1 = factory->NewFromASCII(""); 150 auto ecmaRuntimeCallInfo1 = 151 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); // NOLINT 152 ecmaRuntimeCallInfo1->SetFunction(JSTaggedValue::Undefined()); 153 ecmaRuntimeCallInfo1->SetThis(JSTaggedValue::Undefined()); 154 ecmaRuntimeCallInfo1->SetCallArg(0, str1.GetTaggedValue()); 155 156 [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 157 JSTaggedValue result1 = BuiltinsGlobal::Unescape(ecmaRuntimeCallInfo1); 158 TestHelper::TearDownFrame(thread, prev1); 159 EXPECT_TRUE(result1.IsString()); 160 JSHandle<EcmaString> ecmaStrHandle1(thread, result1); 161 EXPECT_STREQ("", EcmaStringAccessor(ecmaStrHandle1).ToCString().c_str()); 162 163 JSHandle<EcmaString> str2 = factory->NewFromASCII("%u%u0%u9%ua%uF%u00%u09%u0f%u0F%u000%u00a%u00F"); 164 auto ecmaRuntimeCallInfo2 = 165 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); // NOLINT 166 ecmaRuntimeCallInfo2->SetFunction(JSTaggedValue::Undefined()); 167 ecmaRuntimeCallInfo2->SetThis(JSTaggedValue::Undefined()); 168 ecmaRuntimeCallInfo2->SetCallArg(0, str2.GetTaggedValue()); // NOLINT 169 170 [[maybe_unused]] auto prev2 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo2); 171 JSTaggedValue result2 = BuiltinsGlobal::Unescape(ecmaRuntimeCallInfo2); 172 TestHelper::TearDownFrame(thread, prev2); 173 EXPECT_TRUE(result2.IsString()); 174 JSHandle<EcmaString> ecmaStrHandle2(thread, result2); 175 EXPECT_STREQ("%u%u0%u9%ua%uF%u00%u09%u0f%u0F%u000%u00a%u00F", 176 EcmaStringAccessor(ecmaStrHandle2).ToCString().c_str()); 177 178 JSHandle<EcmaString> str3 = factory->NewFromASCII("Hello%20World%21"); 179 std::vector<JSTaggedValue> args{str3.GetTaggedValue()}; 180 auto ecmaRuntimeCallInfo3 = TestHelper::CreateEcmaRuntimeCallInfo(thread, args, 6); 181 182 [[maybe_unused]] auto prev3 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo3); 183 JSTaggedValue result3 = BuiltinsGlobal::Escape(ecmaRuntimeCallInfo3); 184 TestHelper::TearDownFrame(thread, prev3); 185 EXPECT_TRUE(result3.IsString()); 186 JSHandle<EcmaString> ecmaStrHandle3(thread, result3); 187 EXPECT_STREQ("Hello%2520World%2521", EcmaStringAccessor(ecmaStrHandle3).ToCString().c_str()); 188} 189 190HWTEST_F_L0(BuiltinsGlobalTest, isSendable_0) 191{ 192 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 193 JSHandle<EcmaString> str1 = factory->NewFromASCII("?!=()#%&"); 194 auto ecmaRuntimeCallInfo1 = 195 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 196 ecmaRuntimeCallInfo1->SetFunction(JSTaggedValue::Undefined()); 197 ecmaRuntimeCallInfo1->SetThis(JSTaggedValue::Undefined()); 198 ecmaRuntimeCallInfo1->SetCallArg(0, str1.GetTaggedValue()); 199 200 [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 201 JSTaggedValue result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo1); 202 TestHelper::TearDownFrame(thread, prev1); 203 EXPECT_EQ(JSTaggedValue::True(), result); 204 205 auto ecmaRuntimeCallInfo2 = 206 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 207 ecmaRuntimeCallInfo2->SetFunction(JSTaggedValue::Undefined()); 208 ecmaRuntimeCallInfo2->SetThis(JSTaggedValue::Undefined()); 209 ecmaRuntimeCallInfo2->SetCallArg(0, JSTaggedValue(1)); 210 211 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo2); 212 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo2); 213 TestHelper::TearDownFrame(thread, prev1); 214 EXPECT_EQ(JSTaggedValue::True(), result); 215 216 auto ecmaRuntimeCallInfo3 = 217 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 218 ecmaRuntimeCallInfo3->SetFunction(JSTaggedValue::Undefined()); 219 ecmaRuntimeCallInfo3->SetThis(JSTaggedValue::Undefined()); 220 ecmaRuntimeCallInfo3->SetCallArg(0, JSTaggedValue(1.5)); 221 222 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo3); 223 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo3); 224 TestHelper::TearDownFrame(thread, prev1); 225 EXPECT_EQ(JSTaggedValue::True(), result); 226} 227 228HWTEST_F_L0(BuiltinsGlobalTest, isSendable_1) 229{ 230 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 231 232 auto ecmaRuntimeCallInfo5 = 233 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 234 ecmaRuntimeCallInfo5->SetFunction(JSTaggedValue::Undefined()); 235 ecmaRuntimeCallInfo5->SetThis(JSTaggedValue::Undefined()); 236 JSFunction *jsFunc = thread->GetEcmaVM()->GetGlobalEnv()->GetObjectFunction().GetObject<JSFunction>(); 237 JSHandle<JSTaggedValue> jsFunc1(thread, jsFunc); 238 JSHandle<JSObject> jsObj = factory->NewJSObjectByConstructor(JSHandle<JSFunction>(jsFunc1), jsFunc1); 239 ecmaRuntimeCallInfo5->SetCallArg(0, jsObj.GetTaggedValue()); 240 241 [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo5); 242 auto result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo5); 243 TestHelper::TearDownFrame(thread, prev1); 244 EXPECT_EQ(JSTaggedValue::False(), result); 245 246 auto ecmaRuntimeCallInfo6 = 247 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 248 ecmaRuntimeCallInfo6->SetFunction(JSTaggedValue::Undefined()); 249 ecmaRuntimeCallInfo6->SetThis(JSTaggedValue::Undefined()); 250 JSHandle<JSObject> sharedArrayFunc(thread->GetEcmaVM()->GetGlobalEnv()->GetSharedArrayFunction()); 251 ecmaRuntimeCallInfo6->SetCallArg(0, sharedArrayFunc.GetTaggedValue()); 252 253 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo6); 254 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo6); 255 TestHelper::TearDownFrame(thread, prev1); 256 EXPECT_EQ(JSTaggedValue::True(), result); 257 258 auto ecmaRuntimeCallInfo8 = 259 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 260 ecmaRuntimeCallInfo8->SetFunction(JSTaggedValue::Undefined()); 261 ecmaRuntimeCallInfo8->SetThis(JSTaggedValue::Undefined()); 262 JSArray *arr = JSArray::Cast(JSArray::ArrayCreate(thread, JSTaggedNumber(0)).GetTaggedValue().GetTaggedObject()); 263 EXPECT_TRUE(arr != nullptr); 264 JSHandle<JSObject> arrObj(thread, arr); 265 ecmaRuntimeCallInfo8->SetCallArg(0, arrObj.GetTaggedValue()); 266 267 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo8); 268 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo8); 269 TestHelper::TearDownFrame(thread, prev1); 270 EXPECT_EQ(JSTaggedValue::False(), result); 271} 272 273HWTEST_F_L0(BuiltinsGlobalTest, isSendable_2) 274{ 275 auto ecmaRuntimeCallInfo4 = 276 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 277 ecmaRuntimeCallInfo4->SetFunction(JSTaggedValue::Undefined()); 278 ecmaRuntimeCallInfo4->SetThis(JSTaggedValue::Undefined()); 279 JSFunction *jsFunc = thread->GetEcmaVM()->GetGlobalEnv()->GetObjectFunction().GetObject<JSFunction>(); 280 JSHandle<JSTaggedValue> jsFunc1(thread, jsFunc); 281 ecmaRuntimeCallInfo4->SetCallArg(0, jsFunc1.GetTaggedValue()); 282 283 [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo4); 284 auto result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo4); 285 TestHelper::TearDownFrame(thread, prev1); 286 EXPECT_EQ(JSTaggedValue::False(), result); 287 288 auto ecmaRuntimeCallInfo7 = 289 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 290 ecmaRuntimeCallInfo7->SetFunction(JSTaggedValue::Undefined()); 291 ecmaRuntimeCallInfo7->SetThis(JSTaggedValue::Undefined()); 292 JSHandle<JSObject> sharedArrayFunc(thread->GetEcmaVM()->GetGlobalEnv()->GetSharedArrayFunction()); 293 JSSharedArray *arr = JSSharedArray::Cast(JSSharedArray::ArrayCreate(thread, JSTaggedNumber(0))->GetTaggedObject()); 294 EXPECT_TRUE(arr != nullptr); 295 JSHandle<JSObject> sharedObj(thread, arr); 296 ecmaRuntimeCallInfo7->SetCallArg(0, sharedObj.GetTaggedValue()); 297 298 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo7); 299 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo7); 300 TestHelper::TearDownFrame(thread, prev1); 301 EXPECT_EQ(JSTaggedValue::True(), result); 302 303 auto ecmaRuntimeCallInfo9 = 304 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 8); 305 ecmaRuntimeCallInfo9->SetFunction(JSTaggedValue::Undefined()); 306 ecmaRuntimeCallInfo9->SetThis(JSTaggedValue::Undefined()); 307 ecmaRuntimeCallInfo9->SetCallArg(0, sharedObj.GetTaggedValue()); 308 ecmaRuntimeCallInfo9->SetCallArg(1, sharedObj.GetTaggedValue()); 309 310 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo9); 311 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo9); 312 TestHelper::TearDownFrame(thread, prev1); 313 EXPECT_EQ(JSTaggedValue::False(), result); 314} 315 316HWTEST_F_L0(BuiltinsGlobalTest, isSendable_3) 317{ 318 auto ecmaRuntimeCallInfo4 = 319 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 320 ecmaRuntimeCallInfo4->SetFunction(JSTaggedValue::Undefined()); 321 ecmaRuntimeCallInfo4->SetThis(JSTaggedValue::Undefined()); 322 ecmaRuntimeCallInfo4->SetCallArg(0, JSTaggedValue::Undefined()); 323 324 [[maybe_unused]] auto prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo4); 325 auto result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo4); 326 TestHelper::TearDownFrame(thread, prev1); 327 EXPECT_EQ(JSTaggedValue::True(), result); 328 329 auto ecmaRuntimeCallInfo5 = 330 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 331 ecmaRuntimeCallInfo5->SetFunction(JSTaggedValue::Undefined()); 332 ecmaRuntimeCallInfo5->SetThis(JSTaggedValue::Undefined()); 333 ecmaRuntimeCallInfo5->SetCallArg(0, JSTaggedValue::True()); 334 335 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo5); 336 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo5); 337 TestHelper::TearDownFrame(thread, prev1); 338 EXPECT_EQ(JSTaggedValue::True(), result); 339 340 auto ecmaRuntimeCallInfo6 = 341 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 8); 342 ecmaRuntimeCallInfo6->SetFunction(JSTaggedValue::Undefined()); 343 ecmaRuntimeCallInfo6->SetThis(JSTaggedValue::Undefined()); 344 ecmaRuntimeCallInfo6->SetCallArg(0, JSTaggedValue::Exception()); 345 346 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo6); 347 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo6); 348 TestHelper::TearDownFrame(thread, prev1); 349 EXPECT_EQ(JSTaggedValue::False(), result); 350 351 auto ecmaRuntimeCallInfo9 = 352 TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 353 ecmaRuntimeCallInfo9->SetFunction(JSTaggedValue::Undefined()); 354 ecmaRuntimeCallInfo9->SetThis(JSTaggedValue::Undefined()); 355 ecmaRuntimeCallInfo9->SetCallArg(0, JSTaggedValue::Null()); 356 357 prev1 = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo9); 358 result = BuiltinsGlobal::IsSendable(ecmaRuntimeCallInfo9); 359 TestHelper::TearDownFrame(thread, prev1); 360 EXPECT_EQ(JSTaggedValue::True(), result); 361} 362 363} // namespace panda::test 364