14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2021 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 "ecmascript/builtins/builtins_date.h" 174514f5e3Sopenharmony_ci 184514f5e3Sopenharmony_ci#include "ecmascript/base/string_helper.h" 194514f5e3Sopenharmony_ci#include "ecmascript/ecma_vm.h" 204514f5e3Sopenharmony_ci#include "ecmascript/global_env.h" 214514f5e3Sopenharmony_ci#include "ecmascript/js_function.h" 224514f5e3Sopenharmony_ci#include "ecmascript/js_thread.h" 234514f5e3Sopenharmony_ci#include "ecmascript/platform/time.h" 244514f5e3Sopenharmony_ci#include "ecmascript/tests/test_helper.h" 254514f5e3Sopenharmony_ci 264514f5e3Sopenharmony_ciusing namespace panda::ecmascript; 274514f5e3Sopenharmony_ciusing namespace panda::ecmascript::builtins; 284514f5e3Sopenharmony_cinamespace panda::test { 294514f5e3Sopenharmony_ciconst char NEG = '-'; 304514f5e3Sopenharmony_ciconst char PLUS = '+'; 314514f5e3Sopenharmony_ciconst int STR_LENGTH_OTHERS = 2; 324514f5e3Sopenharmony_ciconst int MINUTE_PER_HOUR = 60; 334514f5e3Sopenharmony_ciclass BuiltinsDateTest : public BaseTestWithScope<false> { 344514f5e3Sopenharmony_ci}; 354514f5e3Sopenharmony_ci 364514f5e3Sopenharmony_ciJSHandle<JSDate> JSDateCreateTest(JSThread *thread) 374514f5e3Sopenharmony_ci{ 384514f5e3Sopenharmony_ci EcmaVM *ecmaVM = thread->GetEcmaVM(); 394514f5e3Sopenharmony_ci ObjectFactory *factory = ecmaVM->GetFactory(); 404514f5e3Sopenharmony_ci JSHandle<GlobalEnv> globalEnv = ecmaVM->GetGlobalEnv(); 414514f5e3Sopenharmony_ci JSHandle<JSTaggedValue> dateFunction = globalEnv->GetDateFunction(); 424514f5e3Sopenharmony_ci JSHandle<JSDate> dateObject = 434514f5e3Sopenharmony_ci JSHandle<JSDate>::Cast(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(dateFunction), dateFunction)); 444514f5e3Sopenharmony_ci return dateObject; 454514f5e3Sopenharmony_ci} 464514f5e3Sopenharmony_ci 474514f5e3Sopenharmony_cienum class AlgorithmType { 484514f5e3Sopenharmony_ci ALGORITHM_TO_STRING, 494514f5e3Sopenharmony_ci ALGORITHM_TO_TIME_STRING, 504514f5e3Sopenharmony_ci ALGORITHM_TO_ISO_STRING, 514514f5e3Sopenharmony_ci}; 524514f5e3Sopenharmony_ci 534514f5e3Sopenharmony_cistatic JSTaggedValue DateAlgorithm(JSThread *thread, const JSTaggedValue& thisTag, std::vector<JSTaggedValue>& vals, 544514f5e3Sopenharmony_ci uint32_t argLen = 8, AlgorithmType type = AlgorithmType::ALGORITHM_TO_STRING) 554514f5e3Sopenharmony_ci{ 564514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfos = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), argLen); 574514f5e3Sopenharmony_ci ecmaRuntimeCallInfos->SetFunction(JSTaggedValue::Undefined()); 584514f5e3Sopenharmony_ci ecmaRuntimeCallInfos->SetThis(thisTag); 594514f5e3Sopenharmony_ci for (size_t i = 0; i < vals.size(); i++) { 604514f5e3Sopenharmony_ci ecmaRuntimeCallInfos->SetCallArg(i, JSTaggedValue(vals[i])); 614514f5e3Sopenharmony_ci } 624514f5e3Sopenharmony_ci auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfos); 634514f5e3Sopenharmony_ci JSTaggedValue result; 644514f5e3Sopenharmony_ci switch (type) { 654514f5e3Sopenharmony_ci case AlgorithmType::ALGORITHM_TO_STRING: 664514f5e3Sopenharmony_ci result = BuiltinsDate::ToString(ecmaRuntimeCallInfos); 674514f5e3Sopenharmony_ci break; 684514f5e3Sopenharmony_ci case AlgorithmType::ALGORITHM_TO_TIME_STRING: 694514f5e3Sopenharmony_ci result = BuiltinsDate::ToTimeString(ecmaRuntimeCallInfos); 704514f5e3Sopenharmony_ci break; 714514f5e3Sopenharmony_ci case AlgorithmType::ALGORITHM_TO_ISO_STRING: 724514f5e3Sopenharmony_ci result = BuiltinsDate::ToISOString(ecmaRuntimeCallInfos); 734514f5e3Sopenharmony_ci break; 744514f5e3Sopenharmony_ci default: 754514f5e3Sopenharmony_ci break; 764514f5e3Sopenharmony_ci } 774514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 784514f5e3Sopenharmony_ci return result; 794514f5e3Sopenharmony_ci} 804514f5e3Sopenharmony_ci 814514f5e3Sopenharmony_ci 824514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetDate) 834514f5e3Sopenharmony_ci{ 844514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 854514f5e3Sopenharmony_ci 864514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(2))}; 874514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6, jsDate.GetTaggedValue()); 884514f5e3Sopenharmony_ci 894514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 904514f5e3Sopenharmony_ci [[maybe_unused]] JSTaggedValue result1 = BuiltinsDate::SetDate(ecmaRuntimeCallInfo); 914514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetDate(ecmaRuntimeCallInfo); 924514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 934514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(2)).GetRawData()); 944514f5e3Sopenharmony_ci} 954514f5e3Sopenharmony_ci 964514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetUTCDate) 974514f5e3Sopenharmony_ci{ 984514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 994514f5e3Sopenharmony_ci 1004514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(2))}; 1014514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6, jsDate.GetTaggedValue()); 1024514f5e3Sopenharmony_ci 1034514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1044514f5e3Sopenharmony_ci [[maybe_unused]] JSTaggedValue result3 = BuiltinsDate::SetUTCDate(ecmaRuntimeCallInfo); 1054514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCDate(ecmaRuntimeCallInfo); 1064514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1074514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(2)).GetRawData()); 1084514f5e3Sopenharmony_ci} 1094514f5e3Sopenharmony_ci 1104514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMinusUTCDate) 1114514f5e3Sopenharmony_ci{ 1124514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 1134514f5e3Sopenharmony_ci 1144514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(-2))}; 1154514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6, jsDate.GetTaggedValue()); 1164514f5e3Sopenharmony_ci 1174514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1184514f5e3Sopenharmony_ci [[maybe_unused]] JSTaggedValue result3 = BuiltinsDate::SetUTCDate(ecmaRuntimeCallInfo); 1194514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCDate(ecmaRuntimeCallInfo); 1204514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1214514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(29)).GetRawData()); 1224514f5e3Sopenharmony_ci} 1234514f5e3Sopenharmony_ci 1244514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetFullYear) 1254514f5e3Sopenharmony_ci{ 1264514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 1274514f5e3Sopenharmony_ci 1284514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(2018)), JSTaggedValue(static_cast<double>(10)), 1294514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(6))}; 1304514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 1314514f5e3Sopenharmony_ci 1324514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1334514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo); 1344514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::GetFullYear(ecmaRuntimeCallInfo); 1354514f5e3Sopenharmony_ci // 2018 : test case 1364514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(2018)).GetRawData()); 1374514f5e3Sopenharmony_ci 1384514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetMonth(ecmaRuntimeCallInfo); 1394514f5e3Sopenharmony_ci // 10 : test case 1404514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 1414514f5e3Sopenharmony_ci 1424514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::GetDate(ecmaRuntimeCallInfo); 1434514f5e3Sopenharmony_ci // 6 : test case 1444514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(6)).GetRawData()); 1454514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1464514f5e3Sopenharmony_ci} 1474514f5e3Sopenharmony_ci 1484514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetUTCFullYear) 1494514f5e3Sopenharmony_ci{ 1504514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 1514514f5e3Sopenharmony_ci 1524514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(2018)), JSTaggedValue(static_cast<double>(10)), 1534514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(6))}; 1544514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 1554514f5e3Sopenharmony_ci 1564514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1574514f5e3Sopenharmony_ci BuiltinsDate::SetUTCFullYear(ecmaRuntimeCallInfo); 1584514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCFullYear(ecmaRuntimeCallInfo); 1594514f5e3Sopenharmony_ci // 2018 : test case 1604514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(2018)).GetRawData()); 1614514f5e3Sopenharmony_ci 1624514f5e3Sopenharmony_ci JSTaggedValue result5 = BuiltinsDate::GetUTCMonth(ecmaRuntimeCallInfo); 1634514f5e3Sopenharmony_ci // 10 : test case 1644514f5e3Sopenharmony_ci ASSERT_EQ(result5.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 1654514f5e3Sopenharmony_ci 1664514f5e3Sopenharmony_ci JSTaggedValue result6 = BuiltinsDate::GetUTCDate(ecmaRuntimeCallInfo); 1674514f5e3Sopenharmony_ci // 6 : test case 1684514f5e3Sopenharmony_ci ASSERT_EQ(result6.GetRawData(), JSTaggedValue(static_cast<double>(6)).GetRawData()); 1694514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1704514f5e3Sopenharmony_ci} 1714514f5e3Sopenharmony_ci 1724514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMinusFullYear) 1734514f5e3Sopenharmony_ci{ 1744514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 1754514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(-2018)), JSTaggedValue(static_cast<double>(-10)), 1764514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(-6))}; 1774514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 1784514f5e3Sopenharmony_ci 1794514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 1804514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo); 1814514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::GetFullYear(ecmaRuntimeCallInfo); 1824514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(-2019)).GetRawData()); 1834514f5e3Sopenharmony_ci 1844514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetMonth(ecmaRuntimeCallInfo); 1854514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(1)).GetRawData()); 1864514f5e3Sopenharmony_ci 1874514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::GetDate(ecmaRuntimeCallInfo); 1884514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(22)).GetRawData()); 1894514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 1904514f5e3Sopenharmony_ci} 1914514f5e3Sopenharmony_ci 1924514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMinusUTCFullYear) 1934514f5e3Sopenharmony_ci{ 1944514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 1954514f5e3Sopenharmony_ci 1964514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(-2018)), JSTaggedValue(static_cast<double>(-10)), 1974514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(-6))}; 1984514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 1994514f5e3Sopenharmony_ci 2004514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 2014514f5e3Sopenharmony_ci BuiltinsDate::SetUTCFullYear(ecmaRuntimeCallInfo); 2024514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCFullYear(ecmaRuntimeCallInfo); 2034514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(-2019)).GetRawData()); 2044514f5e3Sopenharmony_ci 2054514f5e3Sopenharmony_ci JSTaggedValue result5 = BuiltinsDate::GetUTCMonth(ecmaRuntimeCallInfo); 2064514f5e3Sopenharmony_ci ASSERT_EQ(result5.GetRawData(), JSTaggedValue(static_cast<double>(1)).GetRawData()); 2074514f5e3Sopenharmony_ci 2084514f5e3Sopenharmony_ci JSTaggedValue result6 = BuiltinsDate::GetUTCDate(ecmaRuntimeCallInfo); 2094514f5e3Sopenharmony_ci ASSERT_EQ(result6.GetRawData(), JSTaggedValue(static_cast<double>(22)).GetRawData()); 2104514f5e3Sopenharmony_ci} 2114514f5e3Sopenharmony_ci 2124514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetHours) 2134514f5e3Sopenharmony_ci{ 2144514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 2154514f5e3Sopenharmony_ci 2164514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(18)), JSTaggedValue(static_cast<double>(10)), 2174514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(6)), JSTaggedValue(static_cast<double>(111))}; 2184514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 12, jsDate.GetTaggedValue()); 2194514f5e3Sopenharmony_ci 2204514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 2214514f5e3Sopenharmony_ci BuiltinsDate::SetHours(ecmaRuntimeCallInfo); 2224514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::GetHours(ecmaRuntimeCallInfo); 2234514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(18)).GetRawData()); 2244514f5e3Sopenharmony_ci 2254514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetMinutes(ecmaRuntimeCallInfo); 2264514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 2274514f5e3Sopenharmony_ci 2284514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::GetSeconds(ecmaRuntimeCallInfo); 2294514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(6)).GetRawData()); 2304514f5e3Sopenharmony_ci 2314514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetMilliseconds(ecmaRuntimeCallInfo); 2324514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(111)).GetRawData()); 2334514f5e3Sopenharmony_ci} 2344514f5e3Sopenharmony_ci 2354514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetUTCHours) 2364514f5e3Sopenharmony_ci{ 2374514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 2384514f5e3Sopenharmony_ci 2394514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(18)), JSTaggedValue(static_cast<double>(10)), 2404514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(6)), JSTaggedValue(static_cast<double>(111))}; 2414514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 12, jsDate.GetTaggedValue()); 2424514f5e3Sopenharmony_ci 2434514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 2444514f5e3Sopenharmony_ci BuiltinsDate::SetUTCHours(ecmaRuntimeCallInfo); 2454514f5e3Sopenharmony_ci JSTaggedValue result5 = BuiltinsDate::GetUTCHours(ecmaRuntimeCallInfo); 2464514f5e3Sopenharmony_ci ASSERT_EQ(result5.GetRawData(), JSTaggedValue(static_cast<double>(18)).GetRawData()); 2474514f5e3Sopenharmony_ci 2484514f5e3Sopenharmony_ci JSTaggedValue result6 = BuiltinsDate::GetUTCMinutes(ecmaRuntimeCallInfo); 2494514f5e3Sopenharmony_ci ASSERT_EQ(result6.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 2504514f5e3Sopenharmony_ci 2514514f5e3Sopenharmony_ci JSTaggedValue result7 = BuiltinsDate::GetUTCSeconds(ecmaRuntimeCallInfo); 2524514f5e3Sopenharmony_ci ASSERT_EQ(result7.GetRawData(), JSTaggedValue(static_cast<double>(6)).GetRawData()); 2534514f5e3Sopenharmony_ci 2544514f5e3Sopenharmony_ci JSTaggedValue result8 = BuiltinsDate::GetUTCMilliseconds(ecmaRuntimeCallInfo); 2554514f5e3Sopenharmony_ci ASSERT_EQ(result8.GetRawData(), JSTaggedValue(static_cast<double>(111)).GetRawData()); 2564514f5e3Sopenharmony_ci} 2574514f5e3Sopenharmony_ci 2584514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMinusHours) 2594514f5e3Sopenharmony_ci{ 2604514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 2614514f5e3Sopenharmony_ci 2624514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(-18)), JSTaggedValue(static_cast<double>(-10)), 2634514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(-6)), JSTaggedValue(static_cast<double>(-111))}; 2644514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 12, jsDate.GetTaggedValue()); 2654514f5e3Sopenharmony_ci 2664514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 2674514f5e3Sopenharmony_ci BuiltinsDate::SetHours(ecmaRuntimeCallInfo); 2684514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::GetHours(ecmaRuntimeCallInfo); 2694514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(5)).GetRawData()); 2704514f5e3Sopenharmony_ci 2714514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetMinutes(ecmaRuntimeCallInfo); 2724514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(49)).GetRawData()); 2734514f5e3Sopenharmony_ci 2744514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::GetSeconds(ecmaRuntimeCallInfo); 2754514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(53)).GetRawData()); 2764514f5e3Sopenharmony_ci 2774514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetMilliseconds(ecmaRuntimeCallInfo); 2784514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(889)).GetRawData()); 2794514f5e3Sopenharmony_ci} 2804514f5e3Sopenharmony_ci 2814514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMinusUTCHours) 2824514f5e3Sopenharmony_ci{ 2834514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 2844514f5e3Sopenharmony_ci 2854514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(-18)), JSTaggedValue(static_cast<double>(-10)), 2864514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(-6)), JSTaggedValue(static_cast<double>(-111))}; 2874514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 12, jsDate.GetTaggedValue()); 2884514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 2894514f5e3Sopenharmony_ci BuiltinsDate::SetUTCHours(ecmaRuntimeCallInfo); 2904514f5e3Sopenharmony_ci JSTaggedValue result5 = BuiltinsDate::GetUTCHours(ecmaRuntimeCallInfo); 2914514f5e3Sopenharmony_ci ASSERT_EQ(result5.GetRawData(), JSTaggedValue(static_cast<double>(5)).GetRawData()); 2924514f5e3Sopenharmony_ci 2934514f5e3Sopenharmony_ci JSTaggedValue result6 = BuiltinsDate::GetUTCMinutes(ecmaRuntimeCallInfo); 2944514f5e3Sopenharmony_ci ASSERT_EQ(result6.GetRawData(), JSTaggedValue(static_cast<double>(49)).GetRawData()); 2954514f5e3Sopenharmony_ci 2964514f5e3Sopenharmony_ci JSTaggedValue result7 = BuiltinsDate::GetUTCSeconds(ecmaRuntimeCallInfo); 2974514f5e3Sopenharmony_ci ASSERT_EQ(result7.GetRawData(), JSTaggedValue(static_cast<double>(53)).GetRawData()); 2984514f5e3Sopenharmony_ci 2994514f5e3Sopenharmony_ci JSTaggedValue result8 = BuiltinsDate::GetUTCMilliseconds(ecmaRuntimeCallInfo); 3004514f5e3Sopenharmony_ci ASSERT_EQ(result8.GetRawData(), JSTaggedValue(static_cast<double>(889)).GetRawData()); 3014514f5e3Sopenharmony_ci} 3024514f5e3Sopenharmony_ci 3034514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMilliseconds) 3044514f5e3Sopenharmony_ci{ 3054514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 3064514f5e3Sopenharmony_ci 3074514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(100))}; 3084514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6, jsDate.GetTaggedValue()); 3094514f5e3Sopenharmony_ci 3104514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 3114514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::SetMilliseconds(ecmaRuntimeCallInfo); 3124514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(100)).GetRawData()); 3134514f5e3Sopenharmony_ci 3144514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetMilliseconds(ecmaRuntimeCallInfo); 3154514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(100)).GetRawData()); 3164514f5e3Sopenharmony_ci} 3174514f5e3Sopenharmony_ci 3184514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetUTCMilliseconds) 3194514f5e3Sopenharmony_ci{ 3204514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 3214514f5e3Sopenharmony_ci 3224514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(100))}; 3234514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6, jsDate.GetTaggedValue()); 3244514f5e3Sopenharmony_ci 3254514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 3264514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::SetUTCMilliseconds(ecmaRuntimeCallInfo); 3274514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(100)).GetRawData()); 3284514f5e3Sopenharmony_ci 3294514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCMilliseconds(ecmaRuntimeCallInfo); 3304514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(100)).GetRawData()); 3314514f5e3Sopenharmony_ci} 3324514f5e3Sopenharmony_ci 3334514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMinutes) 3344514f5e3Sopenharmony_ci{ 3354514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 3364514f5e3Sopenharmony_ci 3374514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(10)), JSTaggedValue(static_cast<double>(6)), 3384514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(111))}; 3394514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 3404514f5e3Sopenharmony_ci 3414514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 3424514f5e3Sopenharmony_ci BuiltinsDate::SetMinutes(ecmaRuntimeCallInfo); 3434514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::GetMinutes(ecmaRuntimeCallInfo); 3444514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 3454514f5e3Sopenharmony_ci 3464514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetSeconds(ecmaRuntimeCallInfo); 3474514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(6)).GetRawData()); 3484514f5e3Sopenharmony_ci 3494514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::GetMilliseconds(ecmaRuntimeCallInfo); 3504514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(111)).GetRawData()); 3514514f5e3Sopenharmony_ci} 3524514f5e3Sopenharmony_ci 3534514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetUTCMinutes) 3544514f5e3Sopenharmony_ci{ 3554514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 3564514f5e3Sopenharmony_ci 3574514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(10)), JSTaggedValue(static_cast<double>(6)), 3584514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(111))}; 3594514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 3604514f5e3Sopenharmony_ci 3614514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 3624514f5e3Sopenharmony_ci BuiltinsDate::SetUTCMinutes(ecmaRuntimeCallInfo); 3634514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCMinutes(ecmaRuntimeCallInfo); 3644514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 3654514f5e3Sopenharmony_ci 3664514f5e3Sopenharmony_ci JSTaggedValue result5 = BuiltinsDate::GetUTCSeconds(ecmaRuntimeCallInfo); 3674514f5e3Sopenharmony_ci ASSERT_EQ(result5.GetRawData(), JSTaggedValue(static_cast<double>(6)).GetRawData()); 3684514f5e3Sopenharmony_ci 3694514f5e3Sopenharmony_ci JSTaggedValue result6 = BuiltinsDate::GetUTCMilliseconds(ecmaRuntimeCallInfo); 3704514f5e3Sopenharmony_ci ASSERT_EQ(result6.GetRawData(), JSTaggedValue(static_cast<double>(111)).GetRawData()); 3714514f5e3Sopenharmony_ci} 3724514f5e3Sopenharmony_ci 3734514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetMonth) 3744514f5e3Sopenharmony_ci{ 3754514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 3764514f5e3Sopenharmony_ci 3774514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(8)), JSTaggedValue(static_cast<double>(3))}; 3784514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 8, jsDate.GetTaggedValue()); 3794514f5e3Sopenharmony_ci 3804514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 3814514f5e3Sopenharmony_ci BuiltinsDate::SetMonth(ecmaRuntimeCallInfo); 3824514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::GetMonth(ecmaRuntimeCallInfo); 3834514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(8)).GetRawData()); 3844514f5e3Sopenharmony_ci 3854514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetDate(ecmaRuntimeCallInfo); 3864514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(3)).GetRawData()); 3874514f5e3Sopenharmony_ci} 3884514f5e3Sopenharmony_ci 3894514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetUTCMonth) 3904514f5e3Sopenharmony_ci{ 3914514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 3924514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(8)), JSTaggedValue(static_cast<double>(3))}; 3934514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 8, jsDate.GetTaggedValue()); 3944514f5e3Sopenharmony_ci 3954514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 3964514f5e3Sopenharmony_ci BuiltinsDate::SetUTCMonth(ecmaRuntimeCallInfo); 3974514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::GetUTCMonth(ecmaRuntimeCallInfo); 3984514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(8)).GetRawData()); 3994514f5e3Sopenharmony_ci 4004514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCDate(ecmaRuntimeCallInfo); 4014514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(3)).GetRawData()); 4024514f5e3Sopenharmony_ci} 4034514f5e3Sopenharmony_ci 4044514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetSeconds) 4054514f5e3Sopenharmony_ci{ 4064514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 4074514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(59)), JSTaggedValue(static_cast<double>(123))}; 4084514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 8, jsDate.GetTaggedValue()); 4094514f5e3Sopenharmony_ci 4104514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 4114514f5e3Sopenharmony_ci BuiltinsDate::SetSeconds(ecmaRuntimeCallInfo); 4124514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::GetSeconds(ecmaRuntimeCallInfo); 4134514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(59)).GetRawData()); 4144514f5e3Sopenharmony_ci 4154514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::GetMilliseconds(ecmaRuntimeCallInfo); 4164514f5e3Sopenharmony_ci ASSERT_EQ(result2.GetRawData(), JSTaggedValue(static_cast<double>(123)).GetRawData()); 4174514f5e3Sopenharmony_ci} 4184514f5e3Sopenharmony_ci 4194514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetUTCSeconds) 4204514f5e3Sopenharmony_ci{ 4214514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 4224514f5e3Sopenharmony_ci 4234514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(59)), JSTaggedValue(static_cast<double>(123))}; 4244514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 8, jsDate.GetTaggedValue()); 4254514f5e3Sopenharmony_ci 4264514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 4274514f5e3Sopenharmony_ci BuiltinsDate::SetUTCSeconds(ecmaRuntimeCallInfo); 4284514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::GetUTCSeconds(ecmaRuntimeCallInfo); 4294514f5e3Sopenharmony_ci ASSERT_EQ(result3.GetRawData(), JSTaggedValue(static_cast<double>(59)).GetRawData()); 4304514f5e3Sopenharmony_ci 4314514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetUTCMilliseconds(ecmaRuntimeCallInfo); 4324514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(123)).GetRawData()); 4334514f5e3Sopenharmony_ci} 4344514f5e3Sopenharmony_ci 4354514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, SetGetTime) 4364514f5e3Sopenharmony_ci{ 4374514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 4384514f5e3Sopenharmony_ci 4394514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(2))}; 4404514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6, jsDate.GetTaggedValue()); 4414514f5e3Sopenharmony_ci 4424514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 4434514f5e3Sopenharmony_ci JSTaggedValue result = BuiltinsDate::SetTime(ecmaRuntimeCallInfo); 4444514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 4454514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(static_cast<double>(2)).GetRawData()); 4464514f5e3Sopenharmony_ci 4474514f5e3Sopenharmony_ci result = BuiltinsDate::GetTime(ecmaRuntimeCallInfo); 4484514f5e3Sopenharmony_ci ASSERT_EQ(result.GetRawData(), JSTaggedValue(static_cast<double>(2)).GetRawData()); 4494514f5e3Sopenharmony_ci 4504514f5e3Sopenharmony_ci // msg != IsDate 4514514f5e3Sopenharmony_ci auto info1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6); 4524514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, info1); 4534514f5e3Sopenharmony_ci result = BuiltinsDate::SetTime(info1); 4544514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 4554514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 4564514f5e3Sopenharmony_ci EXPECT_EQ(result, JSTaggedValue::Exception()); 4574514f5e3Sopenharmony_ci thread->ClearException(); 4584514f5e3Sopenharmony_ci 4594514f5e3Sopenharmony_ci auto info2 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 6); 4604514f5e3Sopenharmony_ci result = BuiltinsDate::GetTime(info2); 4614514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 4624514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 4634514f5e3Sopenharmony_ci EXPECT_EQ(result, JSTaggedValue::Exception()); 4644514f5e3Sopenharmony_ci thread->ClearException(); 4654514f5e3Sopenharmony_ci} 4664514f5e3Sopenharmony_ci 4674514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, UTC) 4684514f5e3Sopenharmony_ci{ 4694514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 4704514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(2020.982), JSTaggedValue(10.23), JSTaggedValue(4.32), 4714514f5e3Sopenharmony_ci JSTaggedValue(11.32)}; 4724514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 12, jsDate.GetTaggedValue()); 4734514f5e3Sopenharmony_ci 4744514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 4754514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::UTC(ecmaRuntimeCallInfo); 4764514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 4774514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1604487600000)).GetRawData()); 4784514f5e3Sopenharmony_ci 4794514f5e3Sopenharmony_ci vals.push_back(JSTaggedValue(45.1)); 4804514f5e3Sopenharmony_ci vals.push_back(JSTaggedValue(34.321)); 4814514f5e3Sopenharmony_ci vals.push_back(JSTaggedValue(static_cast<int32_t>(231))); 4824514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 18, jsDate.GetTaggedValue()); 4834514f5e3Sopenharmony_ci 4844514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 4854514f5e3Sopenharmony_ci result1 = BuiltinsDate::UTC(ecmaRuntimeCallInfo1); 4864514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 4874514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1604490334231)).GetRawData()); 4884514f5e3Sopenharmony_ci 4894514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals2{JSTaggedValue(10.23), JSTaggedValue(4.32), JSTaggedValue(11.32)}; 4904514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo2 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals2, 10, jsDate.GetTaggedValue()); 4914514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo2); 4924514f5e3Sopenharmony_ci result1 = BuiltinsDate::UTC(ecmaRuntimeCallInfo2); 4934514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 4944514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(-1882224000000)).GetRawData()); 4954514f5e3Sopenharmony_ci 4964514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals3{JSTaggedValue(1994.982)}; 4974514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo3 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals3, 6, jsDate.GetTaggedValue()); 4984514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo3); 4994514f5e3Sopenharmony_ci result1 = BuiltinsDate::UTC(ecmaRuntimeCallInfo3); 5004514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5014514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(757382400000)).GetRawData()); 5024514f5e3Sopenharmony_ci 5034514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals4{JSTaggedValue(19999944.982)}; 5044514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo4 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals4, 6, jsDate.GetTaggedValue()); 5054514f5e3Sopenharmony_ci 5064514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo4); 5074514f5e3Sopenharmony_ci result1 = BuiltinsDate::UTC(ecmaRuntimeCallInfo4); 5084514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5094514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(base::NAN_VALUE)).GetRawData()); 5104514f5e3Sopenharmony_ci} 5114514f5e3Sopenharmony_ci 5124514f5e3Sopenharmony_civoid SetAllYearAndHours(JSThread *thread, const JSHandle<JSDate> &jsDate) 5134514f5e3Sopenharmony_ci{ 5144514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(2018)), JSTaggedValue(static_cast<double>(10)), 5154514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(6))}; 5164514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 5174514f5e3Sopenharmony_ci 5184514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 5194514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo); 5204514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5214514f5e3Sopenharmony_ci 5224514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals1{JSTaggedValue(static_cast<double>(18)), JSTaggedValue(static_cast<double>(10)), 5234514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(6)), JSTaggedValue(static_cast<double>(111))}; 5244514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals1, 12, jsDate.GetTaggedValue()); 5254514f5e3Sopenharmony_ci 5264514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 5274514f5e3Sopenharmony_ci BuiltinsDate::SetHours(ecmaRuntimeCallInfo1); 5284514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5294514f5e3Sopenharmony_ci} 5304514f5e3Sopenharmony_ci 5314514f5e3Sopenharmony_civoid SetAll1(JSThread *thread, const JSHandle<JSDate> &jsDate) 5324514f5e3Sopenharmony_ci{ 5334514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(1900)), JSTaggedValue(static_cast<double>(11)), 5344514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(31))}; 5354514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 5364514f5e3Sopenharmony_ci 5374514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 5384514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo); 5394514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5404514f5e3Sopenharmony_ci 5414514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals1{JSTaggedValue(static_cast<double>(23)), JSTaggedValue(static_cast<double>(54)), 5424514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(16)), JSTaggedValue(static_cast<double>(888))}; 5434514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals1, 12, jsDate.GetTaggedValue()); 5444514f5e3Sopenharmony_ci 5454514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 5464514f5e3Sopenharmony_ci BuiltinsDate::SetHours(ecmaRuntimeCallInfo1); 5474514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5484514f5e3Sopenharmony_ci} 5494514f5e3Sopenharmony_ci 5504514f5e3Sopenharmony_civoid SetAll2(JSThread *thread, const JSHandle<JSDate> &jsDate) 5514514f5e3Sopenharmony_ci{ 5524514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals{JSTaggedValue(static_cast<double>(1901)), JSTaggedValue(static_cast<double>(0)), 5534514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(1))}; 5544514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals, 10, jsDate.GetTaggedValue()); 5554514f5e3Sopenharmony_ci 5564514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 5574514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo); 5584514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5594514f5e3Sopenharmony_ci 5604514f5e3Sopenharmony_ci std::vector<JSTaggedValue> vals1{JSTaggedValue(static_cast<double>(0)), JSTaggedValue(static_cast<double>(3)), 5614514f5e3Sopenharmony_ci JSTaggedValue(static_cast<double>(21)), JSTaggedValue(static_cast<double>(129))}; 5624514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, vals1, 12, jsDate.GetTaggedValue()); 5634514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 5644514f5e3Sopenharmony_ci BuiltinsDate::SetHours(ecmaRuntimeCallInfo1); 5654514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5664514f5e3Sopenharmony_ci} 5674514f5e3Sopenharmony_ci 5684514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, parse) 5694514f5e3Sopenharmony_ci{ 5704514f5e3Sopenharmony_ci JSHandle<EcmaString> str = 5714514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("2020-11-19T12:18:18.132Z"); 5724514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 5734514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 5744514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(JSTaggedValue::Undefined()); 5754514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetCallArg(0, str.GetTaggedValue()); 5764514f5e3Sopenharmony_ci 5774514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 5784514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::Parse(ecmaRuntimeCallInfo); 5794514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1605788298132)).GetRawData()); 5804514f5e3Sopenharmony_ci 5814514f5e3Sopenharmony_ci JSHandle<EcmaString> str1 = thread->GetEcmaVM()->GetFactory()->NewFromASCII("2020-11-19Z"); 5824514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 5834514f5e3Sopenharmony_ci ecmaRuntimeCallInfo1->SetFunction(JSTaggedValue::Undefined()); 5844514f5e3Sopenharmony_ci ecmaRuntimeCallInfo1->SetThis(JSTaggedValue::Undefined()); 5854514f5e3Sopenharmony_ci ecmaRuntimeCallInfo1->SetCallArg(0, str1.GetTaggedValue()); 5864514f5e3Sopenharmony_ci 5874514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 5884514f5e3Sopenharmony_ci result1 = BuiltinsDate::Parse(ecmaRuntimeCallInfo1); 5894514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 5904514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1605744000000)).GetRawData()); 5914514f5e3Sopenharmony_ci 5924514f5e3Sopenharmony_ci JSHandle<EcmaString> str2 = 5934514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("2020-11T12:18:17.231+08:00"); 5944514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo2 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 5954514f5e3Sopenharmony_ci ecmaRuntimeCallInfo2->SetFunction(JSTaggedValue::Undefined()); 5964514f5e3Sopenharmony_ci ecmaRuntimeCallInfo2->SetThis(JSTaggedValue::Undefined()); 5974514f5e3Sopenharmony_ci ecmaRuntimeCallInfo2->SetCallArg(0, str2.GetTaggedValue()); 5984514f5e3Sopenharmony_ci 5994514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo2); 6004514f5e3Sopenharmony_ci result1 = BuiltinsDate::Parse(ecmaRuntimeCallInfo2); 6014514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 6024514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1604204297231)).GetRawData()); 6034514f5e3Sopenharmony_ci 6044514f5e3Sopenharmony_ci JSHandle<EcmaString> str3 = 6054514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("Thu Nov 19 2020 20:18:18 GMT+0800"); 6064514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo3 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 6074514f5e3Sopenharmony_ci ecmaRuntimeCallInfo3->SetFunction(JSTaggedValue::Undefined()); 6084514f5e3Sopenharmony_ci ecmaRuntimeCallInfo3->SetThis(JSTaggedValue::Undefined()); 6094514f5e3Sopenharmony_ci ecmaRuntimeCallInfo3->SetCallArg(0, str3.GetTaggedValue()); 6104514f5e3Sopenharmony_ci 6114514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo3); 6124514f5e3Sopenharmony_ci result1 = BuiltinsDate::Parse(ecmaRuntimeCallInfo3); 6134514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 6144514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1605788298000)).GetRawData()); 6154514f5e3Sopenharmony_ci 6164514f5e3Sopenharmony_ci JSHandle<EcmaString> str4 = 6174514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("Thu 03 Jun 2093 04:18 GMT"); 6184514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo4 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 6194514f5e3Sopenharmony_ci ecmaRuntimeCallInfo4->SetFunction(JSTaggedValue::Undefined()); 6204514f5e3Sopenharmony_ci ecmaRuntimeCallInfo4->SetThis(JSTaggedValue::Undefined()); 6214514f5e3Sopenharmony_ci ecmaRuntimeCallInfo4->SetCallArg(0, str4.GetTaggedValue()); 6224514f5e3Sopenharmony_ci 6234514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo4); 6244514f5e3Sopenharmony_ci result1 = BuiltinsDate::Parse(ecmaRuntimeCallInfo4); 6254514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 6264514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(3894841080000)).GetRawData()); 6274514f5e3Sopenharmony_ci 6284514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo5 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 6); 6294514f5e3Sopenharmony_ci ecmaRuntimeCallInfo5->SetFunction(JSTaggedValue::Undefined()); 6304514f5e3Sopenharmony_ci ecmaRuntimeCallInfo5->SetThis(JSTaggedValue::Undefined()); 6314514f5e3Sopenharmony_ci ecmaRuntimeCallInfo5->SetCallArg(0, JSTaggedValue::Null()); 6324514f5e3Sopenharmony_ci 6334514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo5); 6344514f5e3Sopenharmony_ci result1 = BuiltinsDate::Parse(ecmaRuntimeCallInfo5); 6354514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 6364514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(base::NAN_VALUE)).GetRawData()); 6374514f5e3Sopenharmony_ci} 6384514f5e3Sopenharmony_ci 6394514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToDateString) 6404514f5e3Sopenharmony_ci{ 6414514f5e3Sopenharmony_ci JSHandle<EcmaString> expect_value = 6424514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("Tue Nov 06 2018"); 6434514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 6444514f5e3Sopenharmony_ci SetAllYearAndHours(thread, jsDate); 6454514f5e3Sopenharmony_ci 6464514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 6474514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 6484514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 6494514f5e3Sopenharmony_ci 6504514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 6514514f5e3Sopenharmony_ci JSTaggedValue result = BuiltinsDate::ToDateString(ecmaRuntimeCallInfo); 6524514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 6534514f5e3Sopenharmony_ci 6544514f5e3Sopenharmony_ci ASSERT_TRUE(result.IsString()); 6554514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual( 6564514f5e3Sopenharmony_ci reinterpret_cast<EcmaString *>(result.GetRawData()), *expect_value)); 6574514f5e3Sopenharmony_ci} 6584514f5e3Sopenharmony_ci 6594514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToISOString) 6604514f5e3Sopenharmony_ci{ 6614514f5e3Sopenharmony_ci JSHandle<EcmaString> expect_value = 6624514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("2020-11-19T12:18:18.132Z"); 6634514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 6644514f5e3Sopenharmony_ci JSDate::Cast(jsDate.GetTaggedValue().GetTaggedObject())->SetTimeValue(thread, JSTaggedValue(1605788298132.0)); 6654514f5e3Sopenharmony_ci std::vector<JSTaggedValue> args{}; 6664514f5e3Sopenharmony_ci auto result1 = DateAlgorithm(thread, jsDate.GetTaggedValue(), args, 4, AlgorithmType::ALGORITHM_TO_ISO_STRING); 6674514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 6684514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual( 6694514f5e3Sopenharmony_ci reinterpret_cast<EcmaString *>(result1.GetRawData()), *expect_value)); 6704514f5e3Sopenharmony_ci} 6714514f5e3Sopenharmony_ci 6724514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToISOStringMinus) 6734514f5e3Sopenharmony_ci{ 6744514f5e3Sopenharmony_ci JSHandle<EcmaString> expect_value = 6754514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("1831-12-02T21:47:18.382Z"); 6764514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 6774514f5e3Sopenharmony_ci JSDate::Cast(jsDate.GetTaggedValue().GetTaggedObject())->SetTimeValue(thread, JSTaggedValue(-4357419161618.0)); 6784514f5e3Sopenharmony_ci 6794514f5e3Sopenharmony_ci std::vector<JSTaggedValue> args{}; 6804514f5e3Sopenharmony_ci auto result1 = DateAlgorithm(thread, jsDate.GetTaggedValue(), args, 4, AlgorithmType::ALGORITHM_TO_ISO_STRING); 6814514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 6824514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual( 6834514f5e3Sopenharmony_ci reinterpret_cast<EcmaString *>(result1.GetRawData()), *expect_value)); 6844514f5e3Sopenharmony_ci} 6854514f5e3Sopenharmony_ci 6864514f5e3Sopenharmony_ci// test toJSON and toPrimitive 6874514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToJSON) 6884514f5e3Sopenharmony_ci{ 6894514f5e3Sopenharmony_ci JSHandle<EcmaString> expect_value = 6904514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("2020-11-19T12:18:18.132Z"); 6914514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 6924514f5e3Sopenharmony_ci // number double finite 6934514f5e3Sopenharmony_ci jsDate->SetTimeValue(thread, JSTaggedValue(1605788298132.0)); 6944514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 6954514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 6964514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 6974514f5e3Sopenharmony_ci 6984514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 6994514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::ToJSON(ecmaRuntimeCallInfo); 7004514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 7014514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 7024514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual( 7034514f5e3Sopenharmony_ci reinterpret_cast<EcmaString *>(result1.GetRawData()), *expect_value)); 7044514f5e3Sopenharmony_ci 7054514f5e3Sopenharmony_ci // number double infinite 7064514f5e3Sopenharmony_ci jsDate->SetTimeValue(thread, JSTaggedValue(base::POSITIVE_INFINITY)); 7074514f5e3Sopenharmony_ci ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 7084514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 7094514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 7104514f5e3Sopenharmony_ci 7114514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 7124514f5e3Sopenharmony_ci result1 = BuiltinsDate::ToJSON(ecmaRuntimeCallInfo); 7134514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 7144514f5e3Sopenharmony_ci ASSERT_EQ(result1, JSTaggedValue::Null()); 7154514f5e3Sopenharmony_ci} 7164514f5e3Sopenharmony_ci 7174514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToJSONMinus) 7184514f5e3Sopenharmony_ci{ 7194514f5e3Sopenharmony_ci JSHandle<EcmaString> expect_value = 7204514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("1831-12-02T21:47:18.382Z"); 7214514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 7224514f5e3Sopenharmony_ci jsDate->SetTimeValue(thread, JSTaggedValue(-4357419161618.0)); 7234514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 7244514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 7254514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 7264514f5e3Sopenharmony_ci 7274514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 7284514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::ToJSON(ecmaRuntimeCallInfo); 7294514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 7304514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual( 7314514f5e3Sopenharmony_ci reinterpret_cast<EcmaString *>(result1.GetRawData()), *expect_value)); 7324514f5e3Sopenharmony_ci} 7334514f5e3Sopenharmony_ci 7344514f5e3Sopenharmony_ciCString GetLocalTime(JSHandle<JSDate>& jsDate) 7354514f5e3Sopenharmony_ci{ 7364514f5e3Sopenharmony_ci CString localTime; 7374514f5e3Sopenharmony_ci int localMin = 0; 7384514f5e3Sopenharmony_ci localMin = GetLocalOffsetFromOS(static_cast<int64_t>((*jsDate)->GetTimeValue().GetDouble()), true); 7394514f5e3Sopenharmony_ci if (localMin >= 0) { 7404514f5e3Sopenharmony_ci localTime += PLUS; 7414514f5e3Sopenharmony_ci } else if (localMin < 0) { 7424514f5e3Sopenharmony_ci localTime += NEG; 7434514f5e3Sopenharmony_ci localMin = -localMin; 7444514f5e3Sopenharmony_ci } 7454514f5e3Sopenharmony_ci localTime = localTime + JSDate::StrToTargetLength(ToCString(localMin / MINUTE_PER_HOUR), STR_LENGTH_OTHERS); 7464514f5e3Sopenharmony_ci localTime = localTime + JSDate::StrToTargetLength(ToCString(localMin % MINUTE_PER_HOUR), STR_LENGTH_OTHERS); 7474514f5e3Sopenharmony_ci return localTime; 7484514f5e3Sopenharmony_ci} 7494514f5e3Sopenharmony_ci 7504514f5e3Sopenharmony_civoid ToStringCommon(JSThread* thread, CString& str1, CString& str2, CString& str3, AlgorithmType type) 7514514f5e3Sopenharmony_ci{ 7524514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 7534514f5e3Sopenharmony_ci std::vector<JSTaggedValue> argTags{}; 7544514f5e3Sopenharmony_ci SetAllYearAndHours(thread, jsDate); 7554514f5e3Sopenharmony_ci JSTaggedValue result1 = DateAlgorithm(thread, jsDate.GetTaggedValue(), argTags, 4, type); 7564514f5e3Sopenharmony_ci 7574514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 7584514f5e3Sopenharmony_ci JSHandle<EcmaString> result1_val(thread, reinterpret_cast<EcmaString *>(result1.GetRawData())); 7594514f5e3Sopenharmony_ci CString str = str1 + GetLocalTime(jsDate); 7604514f5e3Sopenharmony_ci JSHandle<EcmaString> str_handle = thread->GetEcmaVM()->GetFactory()->NewFromASCII(str); 7614514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual(*result1_val, *str_handle)); 7624514f5e3Sopenharmony_ci 7634514f5e3Sopenharmony_ci JSHandle<JSDate> js_date1 = JSDateCreateTest(thread); 7644514f5e3Sopenharmony_ci SetAll1(thread, js_date1); 7654514f5e3Sopenharmony_ci 7664514f5e3Sopenharmony_ci JSTaggedValue result2 = DateAlgorithm(thread, js_date1.GetTaggedValue(), argTags, 4, type); 7674514f5e3Sopenharmony_ci ASSERT_TRUE(result2.IsString()); 7684514f5e3Sopenharmony_ci JSHandle<EcmaString> result2_val(thread, reinterpret_cast<EcmaString *>(result2.GetRawData())); 7694514f5e3Sopenharmony_ci str = str2 + GetLocalTime(js_date1); 7704514f5e3Sopenharmony_ci str_handle = thread->GetEcmaVM()->GetFactory()->NewFromASCII(str); 7714514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual(*result2_val, *str_handle)); 7724514f5e3Sopenharmony_ci 7734514f5e3Sopenharmony_ci JSHandle<JSDate> js_date2 = JSDateCreateTest(thread); 7744514f5e3Sopenharmony_ci SetAll2(thread, js_date2); 7754514f5e3Sopenharmony_ci JSTaggedValue result3 = DateAlgorithm(thread, js_date2.GetTaggedValue(), argTags, 4, type); 7764514f5e3Sopenharmony_ci ASSERT_TRUE(result3.IsString()); 7774514f5e3Sopenharmony_ci JSHandle<EcmaString> result3_val(thread, reinterpret_cast<EcmaString *>(result3.GetRawData())); 7784514f5e3Sopenharmony_ci str = str3 + GetLocalTime(js_date2); 7794514f5e3Sopenharmony_ci str_handle = thread->GetEcmaVM()->GetFactory()->NewFromASCII(str); 7804514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual(*result3_val, *str_handle)); 7814514f5e3Sopenharmony_ci} 7824514f5e3Sopenharmony_ci 7834514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToString) 7844514f5e3Sopenharmony_ci{ 7854514f5e3Sopenharmony_ci CString str1 = "Tue Nov 06 2018 18:10:06 GMT"; 7864514f5e3Sopenharmony_ci CString str2 = "Mon Dec 31 1900 23:54:16 GMT"; 7874514f5e3Sopenharmony_ci CString str3 = "Tue Jan 01 1901 00:03:21 GMT"; 7884514f5e3Sopenharmony_ci ToStringCommon(thread, str1, str2, str3, AlgorithmType::ALGORITHM_TO_STRING); 7894514f5e3Sopenharmony_ci} 7904514f5e3Sopenharmony_ci 7914514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToTimeString) 7924514f5e3Sopenharmony_ci{ 7934514f5e3Sopenharmony_ci CString str1 = "18:10:06 GMT"; 7944514f5e3Sopenharmony_ci CString str2 = "23:54:16 GMT"; 7954514f5e3Sopenharmony_ci CString str3 = "00:03:21 GMT"; 7964514f5e3Sopenharmony_ci ToStringCommon(thread, str1, str2, str3, AlgorithmType::ALGORITHM_TO_TIME_STRING); 7974514f5e3Sopenharmony_ci} 7984514f5e3Sopenharmony_ci 7994514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToUTCString) 8004514f5e3Sopenharmony_ci{ 8014514f5e3Sopenharmony_ci JSHandle<EcmaString> expect_value = 8024514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("Thu, 19 Nov 2020 12:18:18 GMT"); 8034514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 8044514f5e3Sopenharmony_ci JSDate::Cast(jsDate.GetTaggedValue().GetTaggedObject())->SetTimeValue(thread, JSTaggedValue(1605788298132.0)); 8054514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 8064514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 8074514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 8084514f5e3Sopenharmony_ci 8094514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 8104514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::ToUTCString(ecmaRuntimeCallInfo); 8114514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 8124514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual( 8134514f5e3Sopenharmony_ci reinterpret_cast<EcmaString *>(result1.GetRawData()), *expect_value)); 8144514f5e3Sopenharmony_ci} 8154514f5e3Sopenharmony_ci 8164514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ToUTCStringMinus) 8174514f5e3Sopenharmony_ci{ 8184514f5e3Sopenharmony_ci JSHandle<EcmaString> expect_value = 8194514f5e3Sopenharmony_ci thread->GetEcmaVM()->GetFactory()->NewFromASCII("Fri, 02 Dec 1831 21:47:18 GMT"); 8204514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 8214514f5e3Sopenharmony_ci JSDate::Cast(jsDate.GetTaggedValue().GetTaggedObject())->SetTimeValue(thread, JSTaggedValue(-4357419161618.0)); 8224514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 8234514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 8244514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 8254514f5e3Sopenharmony_ci 8264514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 8274514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::ToUTCString(ecmaRuntimeCallInfo); 8284514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 8294514f5e3Sopenharmony_ci ASSERT_TRUE(EcmaStringAccessor::StringsAreEqual( 8304514f5e3Sopenharmony_ci reinterpret_cast<EcmaString *>(result1.GetRawData()), *expect_value)); 8314514f5e3Sopenharmony_ci} 8324514f5e3Sopenharmony_ci 8334514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ValueOf) 8344514f5e3Sopenharmony_ci{ 8354514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 8364514f5e3Sopenharmony_ci JSDate::Cast(jsDate.GetTaggedValue().GetTaggedObject())->SetTimeValue(thread, JSTaggedValue(1605788298132.0)); 8374514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 8384514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 8394514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 8404514f5e3Sopenharmony_ci 8414514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 8424514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::ValueOf(ecmaRuntimeCallInfo); 8434514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 8444514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1605788298132)).GetRawData()); 8454514f5e3Sopenharmony_ci 8464514f5e3Sopenharmony_ci // case :msg is not Date 8474514f5e3Sopenharmony_ci auto info1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 8484514f5e3Sopenharmony_ci info1->SetFunction(JSTaggedValue::Undefined()); 8494514f5e3Sopenharmony_ci info1->SetThis(JSTaggedValue::Undefined()); 8504514f5e3Sopenharmony_ci 8514514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, info1); 8524514f5e3Sopenharmony_ci result1 = BuiltinsDate::ValueOf(info1); 8534514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 8544514f5e3Sopenharmony_ci EXPECT_TRUE(thread->HasPendingException()); 8554514f5e3Sopenharmony_ci EXPECT_EQ(result1, JSTaggedValue::Exception()); 8564514f5e3Sopenharmony_ci thread->ClearException(); 8574514f5e3Sopenharmony_ci} 8584514f5e3Sopenharmony_ci 8594514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, ValueOfMinus) 8604514f5e3Sopenharmony_ci{ 8614514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 8624514f5e3Sopenharmony_ci JSDate::Cast(jsDate.GetTaggedValue().GetTaggedObject())->SetTimeValue(thread, JSTaggedValue(-4357419161618.0)); 8634514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 8644514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetFunction(JSTaggedValue::Undefined()); 8654514f5e3Sopenharmony_ci ecmaRuntimeCallInfo->SetThis(jsDate.GetTaggedValue()); 8664514f5e3Sopenharmony_ci 8674514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo); 8684514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::ValueOf(ecmaRuntimeCallInfo); 8694514f5e3Sopenharmony_ci ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(-4357419161618)).GetRawData()); 8704514f5e3Sopenharmony_ci} 8714514f5e3Sopenharmony_ci 8724514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDateTest, DateConstructor) 8734514f5e3Sopenharmony_ci{ 8744514f5e3Sopenharmony_ci // case1: test new target is undefined. 8754514f5e3Sopenharmony_ci JSHandle<JSDate> jsDate = JSDateCreateTest(thread); 8764514f5e3Sopenharmony_ci JSHandle<GlobalEnv> globalEnv = thread->GetEcmaVM()->GetGlobalEnv(); 8774514f5e3Sopenharmony_ci JSHandle<JSFunction> date_func(globalEnv->GetDateFunction()); 8784514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo1 = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue::Undefined(), 4); 8794514f5e3Sopenharmony_ci ecmaRuntimeCallInfo1->SetFunction(date_func.GetTaggedValue()); 8804514f5e3Sopenharmony_ci ecmaRuntimeCallInfo1->SetThis(JSTaggedValue::Undefined()); 8814514f5e3Sopenharmony_ci 8824514f5e3Sopenharmony_ci [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo1); 8834514f5e3Sopenharmony_ci JSTaggedValue result1 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo1); 8844514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 8854514f5e3Sopenharmony_ci ASSERT_TRUE(result1.IsString()); 8864514f5e3Sopenharmony_ci 8874514f5e3Sopenharmony_ci // case2: length == 0 8884514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo2 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 4); 8894514f5e3Sopenharmony_ci ecmaRuntimeCallInfo2->SetFunction(date_func.GetTaggedValue()); 8904514f5e3Sopenharmony_ci ecmaRuntimeCallInfo2->SetThis(jsDate.GetTaggedValue()); 8914514f5e3Sopenharmony_ci 8924514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo2); 8934514f5e3Sopenharmony_ci JSTaggedValue result2 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo2); 8944514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 8954514f5e3Sopenharmony_ci ASSERT_TRUE(result2.IsObject()); 8964514f5e3Sopenharmony_ci 8974514f5e3Sopenharmony_ci // case3: length == 1 8984514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo3 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 6); 8994514f5e3Sopenharmony_ci ecmaRuntimeCallInfo3->SetFunction(date_func.GetTaggedValue()); 9004514f5e3Sopenharmony_ci ecmaRuntimeCallInfo3->SetThis(jsDate.GetTaggedValue()); 9014514f5e3Sopenharmony_ci ecmaRuntimeCallInfo3->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9024514f5e3Sopenharmony_ci 9034514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo3); 9044514f5e3Sopenharmony_ci JSTaggedValue result3 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo3); 9054514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9064514f5e3Sopenharmony_ci ASSERT_TRUE(result3.IsObject()); 9074514f5e3Sopenharmony_ci 9084514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo4 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 6); 9094514f5e3Sopenharmony_ci ecmaRuntimeCallInfo4->SetFunction(date_func.GetTaggedValue()); 9104514f5e3Sopenharmony_ci ecmaRuntimeCallInfo4->SetThis(jsDate.GetTaggedValue()); 9114514f5e3Sopenharmony_ci ecmaRuntimeCallInfo4->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9124514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo4); 9134514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo4); 9144514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9154514f5e3Sopenharmony_ci 9164514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo5 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 6); 9174514f5e3Sopenharmony_ci ecmaRuntimeCallInfo5->SetFunction(date_func.GetTaggedValue()); 9184514f5e3Sopenharmony_ci ecmaRuntimeCallInfo5->SetThis(jsDate.GetTaggedValue()); 9194514f5e3Sopenharmony_ci ecmaRuntimeCallInfo5->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9204514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo5); 9214514f5e3Sopenharmony_ci JSTaggedValue result4 = BuiltinsDate::GetFullYear(ecmaRuntimeCallInfo5); 9224514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9234514f5e3Sopenharmony_ci ASSERT_EQ(result4.GetRawData(), JSTaggedValue(static_cast<double>(2018)).GetRawData()); 9244514f5e3Sopenharmony_ci 9254514f5e3Sopenharmony_ci // case4: length > 1 9264514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo6 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 9274514f5e3Sopenharmony_ci ecmaRuntimeCallInfo6->SetFunction(date_func.GetTaggedValue()); 9284514f5e3Sopenharmony_ci ecmaRuntimeCallInfo6->SetThis(jsDate.GetTaggedValue()); 9294514f5e3Sopenharmony_ci ecmaRuntimeCallInfo6->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9304514f5e3Sopenharmony_ci ecmaRuntimeCallInfo6->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 9314514f5e3Sopenharmony_ci 9324514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo6); 9334514f5e3Sopenharmony_ci JSTaggedValue result5 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo6); 9344514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9354514f5e3Sopenharmony_ci ASSERT_TRUE(result5.IsObject()); 9364514f5e3Sopenharmony_ci 9374514f5e3Sopenharmony_ci SetAllYearAndHours(thread, jsDate); 9384514f5e3Sopenharmony_ci 9394514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo7 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 9404514f5e3Sopenharmony_ci ecmaRuntimeCallInfo7->SetFunction(date_func.GetTaggedValue()); 9414514f5e3Sopenharmony_ci ecmaRuntimeCallInfo7->SetThis(jsDate.GetTaggedValue()); 9424514f5e3Sopenharmony_ci ecmaRuntimeCallInfo7->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9434514f5e3Sopenharmony_ci ecmaRuntimeCallInfo7->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 9444514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo7); 9454514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo7); 9464514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9474514f5e3Sopenharmony_ci 9484514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo8 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 9494514f5e3Sopenharmony_ci ecmaRuntimeCallInfo8->SetFunction(date_func.GetTaggedValue()); 9504514f5e3Sopenharmony_ci ecmaRuntimeCallInfo8->SetThis(jsDate.GetTaggedValue()); 9514514f5e3Sopenharmony_ci ecmaRuntimeCallInfo8->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9524514f5e3Sopenharmony_ci ecmaRuntimeCallInfo8->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 9534514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo8); 9544514f5e3Sopenharmony_ci JSTaggedValue result6 = BuiltinsDate::GetFullYear(ecmaRuntimeCallInfo8); 9554514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9564514f5e3Sopenharmony_ci ASSERT_EQ(result6.GetRawData(), JSTaggedValue(static_cast<double>(2018)).GetRawData()); 9574514f5e3Sopenharmony_ci 9584514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo9 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 9594514f5e3Sopenharmony_ci ecmaRuntimeCallInfo9->SetFunction(date_func.GetTaggedValue()); 9604514f5e3Sopenharmony_ci ecmaRuntimeCallInfo9->SetThis(jsDate.GetTaggedValue()); 9614514f5e3Sopenharmony_ci ecmaRuntimeCallInfo9->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9624514f5e3Sopenharmony_ci ecmaRuntimeCallInfo9->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 9634514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo9); 9644514f5e3Sopenharmony_ci JSTaggedValue result7 = BuiltinsDate::GetMonth(ecmaRuntimeCallInfo9); 9654514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9664514f5e3Sopenharmony_ci ASSERT_EQ(result7.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 9674514f5e3Sopenharmony_ci 9684514f5e3Sopenharmony_ci // case5: length > 7 9694514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo10 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 20); 9704514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetFunction(date_func.GetTaggedValue()); 9714514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetThis(jsDate.GetTaggedValue()); 9724514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9734514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 9744514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(2, JSTaggedValue(static_cast<double>(10))); 9754514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(3, JSTaggedValue(static_cast<double>(10))); 9764514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(4, JSTaggedValue(static_cast<double>(10))); 9774514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(5, JSTaggedValue(static_cast<double>(10))); 9784514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(6, JSTaggedValue(static_cast<double>(10))); 9794514f5e3Sopenharmony_ci ecmaRuntimeCallInfo10->SetCallArg(7, JSTaggedValue(static_cast<double>(10))); 9804514f5e3Sopenharmony_ci 9814514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo10); 9824514f5e3Sopenharmony_ci JSTaggedValue result8 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo10); 9834514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9844514f5e3Sopenharmony_ci ASSERT_TRUE(result8.IsObject()); 9854514f5e3Sopenharmony_ci 9864514f5e3Sopenharmony_ci // case6: length > 1, NAN number 9874514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo11 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 9884514f5e3Sopenharmony_ci ecmaRuntimeCallInfo11->SetFunction(date_func.GetTaggedValue()); 9894514f5e3Sopenharmony_ci ecmaRuntimeCallInfo11->SetThis(jsDate.GetTaggedValue()); 9904514f5e3Sopenharmony_ci ecmaRuntimeCallInfo11->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 9914514f5e3Sopenharmony_ci ecmaRuntimeCallInfo11->SetCallArg(1, JSTaggedValue(static_cast<double>(base::NAN_VALUE))); 9924514f5e3Sopenharmony_ci 9934514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo11); 9944514f5e3Sopenharmony_ci JSTaggedValue result9 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo11); 9954514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 9964514f5e3Sopenharmony_ci ASSERT_TRUE(result9.IsObject()); 9974514f5e3Sopenharmony_ci JSHandle<JSTaggedValue> result10(thread, result9); 9984514f5e3Sopenharmony_ci JSHandle<JSDate> dateResult1 = JSHandle<JSDate>::Cast(result10); 9994514f5e3Sopenharmony_ci ASSERT_EQ(dateResult1->GetTimeValue(), JSTaggedValue(static_cast<double>(base::NAN_VALUE))); 10004514f5e3Sopenharmony_ci 10014514f5e3Sopenharmony_ci // case7: length > 1, infinite number 10024514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo12 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 10034514f5e3Sopenharmony_ci ecmaRuntimeCallInfo12->SetFunction(date_func.GetTaggedValue()); 10044514f5e3Sopenharmony_ci ecmaRuntimeCallInfo12->SetThis(jsDate.GetTaggedValue()); 10054514f5e3Sopenharmony_ci ecmaRuntimeCallInfo12->SetCallArg(0, JSTaggedValue(static_cast<double>(2018))); 10064514f5e3Sopenharmony_ci ecmaRuntimeCallInfo12->SetCallArg(1, JSTaggedValue(static_cast<double>(base::POSITIVE_INFINITY))); 10074514f5e3Sopenharmony_ci 10084514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo12); 10094514f5e3Sopenharmony_ci JSTaggedValue result11 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo12); 10104514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 10114514f5e3Sopenharmony_ci ASSERT_TRUE(result11.IsObject()); 10124514f5e3Sopenharmony_ci JSHandle<JSTaggedValue> result12(thread, result11); 10134514f5e3Sopenharmony_ci JSHandle<JSDate> dateResult2 = JSHandle<JSDate>::Cast(result12); 10144514f5e3Sopenharmony_ci ASSERT_EQ(dateResult2->GetTimeValue(), JSTaggedValue(static_cast<double>(base::NAN_VALUE))); 10154514f5e3Sopenharmony_ci 10164514f5e3Sopenharmony_ci // case8: length > 1 10174514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo13 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 10184514f5e3Sopenharmony_ci ecmaRuntimeCallInfo13->SetFunction(date_func.GetTaggedValue()); 10194514f5e3Sopenharmony_ci ecmaRuntimeCallInfo13->SetThis(jsDate.GetTaggedValue()); 10204514f5e3Sopenharmony_ci ecmaRuntimeCallInfo13->SetCallArg(0, JSTaggedValue(static_cast<double>(10))); 10214514f5e3Sopenharmony_ci ecmaRuntimeCallInfo13->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 10224514f5e3Sopenharmony_ci 10234514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo13); 10244514f5e3Sopenharmony_ci JSTaggedValue result13 = BuiltinsDate::DateConstructor(ecmaRuntimeCallInfo13); 10254514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 10264514f5e3Sopenharmony_ci ASSERT_TRUE(result13.IsObject()); 10274514f5e3Sopenharmony_ci 10284514f5e3Sopenharmony_ci SetAllYearAndHours(thread, jsDate); 10294514f5e3Sopenharmony_ci 10304514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo14 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 10314514f5e3Sopenharmony_ci ecmaRuntimeCallInfo14->SetFunction(date_func.GetTaggedValue()); 10324514f5e3Sopenharmony_ci ecmaRuntimeCallInfo14->SetThis(jsDate.GetTaggedValue()); 10334514f5e3Sopenharmony_ci ecmaRuntimeCallInfo14->SetCallArg(0, JSTaggedValue(static_cast<double>(10))); 10344514f5e3Sopenharmony_ci ecmaRuntimeCallInfo14->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 10354514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo14); 10364514f5e3Sopenharmony_ci BuiltinsDate::SetFullYear(ecmaRuntimeCallInfo14); 10374514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 10384514f5e3Sopenharmony_ci 10394514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo15 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 10404514f5e3Sopenharmony_ci ecmaRuntimeCallInfo15->SetFunction(date_func.GetTaggedValue()); 10414514f5e3Sopenharmony_ci ecmaRuntimeCallInfo15->SetThis(jsDate.GetTaggedValue()); 10424514f5e3Sopenharmony_ci ecmaRuntimeCallInfo15->SetCallArg(0, JSTaggedValue(static_cast<double>(10))); 10434514f5e3Sopenharmony_ci ecmaRuntimeCallInfo15->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 10444514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo15); 10454514f5e3Sopenharmony_ci JSTaggedValue result14 = BuiltinsDate::GetFullYear(ecmaRuntimeCallInfo15); 10464514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 10474514f5e3Sopenharmony_ci ASSERT_EQ(result14.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 10484514f5e3Sopenharmony_ci 10494514f5e3Sopenharmony_ci auto ecmaRuntimeCallInfo16 = TestHelper::CreateEcmaRuntimeCallInfo(thread, jsDate.GetTaggedValue(), 8); 10504514f5e3Sopenharmony_ci ecmaRuntimeCallInfo16->SetFunction(date_func.GetTaggedValue()); 10514514f5e3Sopenharmony_ci ecmaRuntimeCallInfo16->SetThis(jsDate.GetTaggedValue()); 10524514f5e3Sopenharmony_ci ecmaRuntimeCallInfo16->SetCallArg(0, JSTaggedValue(static_cast<double>(10))); 10534514f5e3Sopenharmony_ci ecmaRuntimeCallInfo16->SetCallArg(1, JSTaggedValue(static_cast<double>(10))); 10544514f5e3Sopenharmony_ci prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo16); 10554514f5e3Sopenharmony_ci JSTaggedValue result15 = BuiltinsDate::GetMonth(ecmaRuntimeCallInfo16); 10564514f5e3Sopenharmony_ci TestHelper::TearDownFrame(thread, prev); 10574514f5e3Sopenharmony_ci ASSERT_EQ(result15.GetRawData(), JSTaggedValue(static_cast<double>(10)).GetRawData()); 10584514f5e3Sopenharmony_ci} 10594514f5e3Sopenharmony_ci} // namespace panda::test 1060