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