diff options
Diffstat (limited to 'xbmc/test/TestDateTime.cpp')
-rw-r--r-- | xbmc/test/TestDateTime.cpp | 660 |
1 files changed, 660 insertions, 0 deletions
diff --git a/xbmc/test/TestDateTime.cpp b/xbmc/test/TestDateTime.cpp new file mode 100644 index 0000000..7e51df8 --- /dev/null +++ b/xbmc/test/TestDateTime.cpp @@ -0,0 +1,660 @@ +/* + * Copyright (C) 2015-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "LangInfo.h" +#include "XBDateTime.h" +#include "guilib/LocalizeStrings.h" + +#include <array> +#include <iostream> + +#include <gtest/gtest.h> + +class TestDateTime : public testing::Test +{ +protected: + TestDateTime() = default; + ~TestDateTime() override = default; +}; + +TEST_F(TestDateTime, DateTimeOperators) +{ + CDateTime dateTime1(1991, 5, 14, 12, 34, 56); + CDateTime dateTime2(1991, 5, 14, 12, 34, 57); + + EXPECT_TRUE(dateTime1 < dateTime2); + EXPECT_FALSE(dateTime1 > dateTime2); + EXPECT_FALSE(dateTime1 == dateTime2); +} + +TEST_F(TestDateTime, FileTimeOperators) +{ + CDateTime dateTime1(1991, 5, 14, 12, 34, 56); + CDateTime dateTime2(1991, 5, 14, 12, 34, 57); + + KODI::TIME::FileTime fileTime1; + KODI::TIME::FileTime fileTime2; + + dateTime1.GetAsTimeStamp(fileTime1); + dateTime2.GetAsTimeStamp(fileTime2); + + CDateTime dateTime3(fileTime1); + + EXPECT_TRUE(dateTime3 < fileTime2); + EXPECT_FALSE(dateTime3 > fileTime2); + EXPECT_FALSE(dateTime3 == fileTime2); +} + +TEST_F(TestDateTime, SystemTimeOperators) +{ + CDateTime dateTime1(1991, 5, 14, 12, 34, 56); + CDateTime dateTime2(1991, 5, 14, 12, 34, 57); + + KODI::TIME::SystemTime systemTime; + dateTime2.GetAsSystemTime(systemTime); + + EXPECT_TRUE(dateTime1 < systemTime); + EXPECT_FALSE(dateTime1 > systemTime); + EXPECT_FALSE(dateTime1 == systemTime); +} + +TEST_F(TestDateTime, TimeTOperators) +{ + CDateTime dateTime1(1991, 5, 14, 12, 34, 56); + CDateTime dateTime2(1991, 5, 14, 12, 34, 57); + + time_t time; + dateTime2.GetAsTime(time); + + EXPECT_TRUE(dateTime1 < time); + EXPECT_FALSE(dateTime1 > time); + EXPECT_FALSE(dateTime1 == time); +} + +TEST_F(TestDateTime, TmOperators) +{ + { + CDateTime dateTime1(1991, 5, 14, 12, 34, 56); + + tm t1; + dateTime1.GetAsTm(t1); + + EXPECT_FALSE(dateTime1 < t1); + EXPECT_FALSE(dateTime1 > t1); + EXPECT_TRUE(dateTime1 == t1); + + CDateTime dateTime2(1991, 5, 14, 12, 34, 57); + + tm t2; + dateTime2.GetAsTm(t2); + + EXPECT_TRUE(dateTime1 < t2); + EXPECT_FALSE(dateTime1 > t2); + EXPECT_FALSE(dateTime1 == t2); + } + + // same test but opposite daylight saving + { + CDateTime dateTime1(1991, 1, 14, 12, 34, 56); + + tm t1; + dateTime1.GetAsTm(t1); + + EXPECT_FALSE(dateTime1 < t1); + EXPECT_FALSE(dateTime1 > t1); + EXPECT_TRUE(dateTime1 == t1); + + CDateTime dateTime2(1991, 1, 14, 12, 34, 57); + + tm t2; + dateTime2.GetAsTm(t2); + + EXPECT_TRUE(dateTime1 < t2); + EXPECT_FALSE(dateTime1 > t2); + EXPECT_FALSE(dateTime1 == t2); + } +} + +// no way to test this platform agnostically (for now) so just log it. +TEST_F(TestDateTime, GetCurrentDateTime) +{ + auto date = CDateTime::GetCurrentDateTime(); + std::cout << "Current Date: " << date.GetAsDBDateTime() << std::endl; +} + +// no way to test this platform agnostically (for now) so just log it. +TEST_F(TestDateTime, GetUTCDateTime) +{ + auto date = CDateTime::GetUTCDateTime(); + std::cout << "Current Date UTC: " << date.GetAsDBDateTime() << std::endl; +} + +TEST_F(TestDateTime, MonthStringToMonthNum) +{ + std::array<std::pair<std::string, std::string>, 12> months = {{ + {"Jan", "January"}, + {"Feb", "February"}, + {"Mar", "March"}, + {"Apr", "April"}, + {"May", "May"}, + {"Jun", "June"}, + {"Jul", "July"}, + {"Aug", "August"}, + {"Sep", "September"}, + {"Oct", "October"}, + {"Nov", "November"}, + {"Dec", "December"}, + }}; + + int i = 1; + for (const auto& month : months) + { + EXPECT_EQ(CDateTime::MonthStringToMonthNum(month.first), i); + EXPECT_EQ(CDateTime::MonthStringToMonthNum(month.second), i); + i++; + } +} + +// this method is broken as SetFromDBDate() will return true +TEST_F(TestDateTime, DISABLED_SetFromDateString) +{ + CDateTime dateTime; + EXPECT_TRUE(dateTime.SetFromDateString("tuesday may 14, 1991")); + + std::cout << "year: " << dateTime.GetYear() << std::endl; + std::cout << "month: " << dateTime.GetMonth() << std::endl; + std::cout << "day: " << dateTime.GetDay() << std::endl; + + EXPECT_EQ(dateTime.GetYear(), 1991); + EXPECT_EQ(dateTime.GetMonth(), 5); + EXPECT_EQ(dateTime.GetDay(), 14); +} + +TEST_F(TestDateTime, SetFromDBDate) +{ + CDateTime dateTime; + EXPECT_TRUE(dateTime.SetFromDBDate("1991-05-14")); + EXPECT_EQ(dateTime.GetYear(), 1991); + EXPECT_EQ(dateTime.GetMonth(), 5); + EXPECT_EQ(dateTime.GetDay(), 14); + + dateTime.Reset(); + EXPECT_TRUE(dateTime.SetFromDBDate("02-01-1993")); + EXPECT_EQ(dateTime.GetYear(), 1993); + EXPECT_EQ(dateTime.GetMonth(), 1); + EXPECT_EQ(dateTime.GetDay(), 2); +} + +// disabled on osx and freebsd as their mktime functions +// don't work for dates before 1900 +#if defined(TARGET_DARWIN_OSX) || defined(TARGET_FREEBSD) +TEST_F(TestDateTime, DISABLED_SetFromDBTime) +#else +TEST_F(TestDateTime, SetFromDBTime) +#endif +{ + CDateTime dateTime1; + EXPECT_TRUE(dateTime1.SetFromDBTime("12:34")); + EXPECT_EQ(dateTime1.GetHour(), 12); + EXPECT_EQ(dateTime1.GetMinute(), 34); + EXPECT_EQ(dateTime1.GetSecond(), 0); + + CDateTime dateTime2; + EXPECT_TRUE(dateTime2.SetFromDBTime("12:34:56")); + EXPECT_EQ(dateTime2.GetHour(), 12); + EXPECT_EQ(dateTime2.GetMinute(), 34); + EXPECT_EQ(dateTime2.GetSecond(), 56); +} + +TEST_F(TestDateTime, SetFromDBDateTime) +{ + CDateTime dateTime; + EXPECT_TRUE(dateTime.SetFromDBDateTime("1991-05-14 12:34:56")); + EXPECT_EQ(dateTime.GetYear(), 1991); + EXPECT_EQ(dateTime.GetMonth(), 5); + EXPECT_EQ(dateTime.GetDay(), 14); + EXPECT_EQ(dateTime.GetHour(), 12); + EXPECT_EQ(dateTime.GetMinute(), 34); + EXPECT_EQ(dateTime.GetSecond(), 56); +} + +TEST_F(TestDateTime, SetFromW3CDate) +{ + CDateTime dateTime; + EXPECT_TRUE(dateTime.SetFromW3CDate("1994-11-05T13:15:30Z")); + EXPECT_EQ(dateTime.GetYear(), 1994); + EXPECT_EQ(dateTime.GetMonth(), 11); + EXPECT_EQ(dateTime.GetDay(), 5); + EXPECT_EQ(dateTime.GetHour(), 0); + EXPECT_EQ(dateTime.GetMinute(), 0); + EXPECT_EQ(dateTime.GetSecond(), 0); +} + +TEST_F(TestDateTime, SetFromW3CDateTime) +{ + CDateTimeSpan bias = CDateTime::GetTimezoneBias(); + CDateTime dateTime; + dateTime.SetFromDBDateTime("1994-11-05 13:15:30"); + dateTime += bias; + std::string dateTimeStr = dateTime.GetAsDBDate() + "T" + dateTime.GetAsDBTime() + "Z"; + + CDateTime dateTime1; + EXPECT_TRUE(dateTime1.SetFromW3CDateTime(dateTimeStr)); + EXPECT_EQ(dateTime1.GetYear(), 1994); + EXPECT_EQ(dateTime1.GetMonth(), 11); + EXPECT_EQ(dateTime1.GetDay(), 5); + EXPECT_EQ(dateTime1.GetHour(), 13); + EXPECT_EQ(dateTime1.GetMinute(), 15); + EXPECT_EQ(dateTime1.GetSecond(), 30); + + CDateTime dateTime2; + EXPECT_TRUE(dateTime2.SetFromW3CDateTime("1994-11-05T08:15:30-05:00")); + EXPECT_EQ(dateTime2.GetYear(), 1994); + EXPECT_EQ(dateTime2.GetMonth(), 11); + EXPECT_EQ(dateTime2.GetDay(), 5); + EXPECT_EQ(dateTime2.GetHour(), 13); + EXPECT_EQ(dateTime2.GetMinute(), 15); + EXPECT_EQ(dateTime2.GetSecond(), 30); +} + +TEST_F(TestDateTime, SetFromUTCDateTime) +{ + CDateTimeSpan bias = CDateTime::GetTimezoneBias(); + + CDateTime dateTime1; + dateTime1.SetFromDBDateTime("1991-05-14 12:34:56"); + dateTime1 += bias; + + CDateTime dateTime2; + EXPECT_TRUE(dateTime2.SetFromUTCDateTime(dateTime1)); + EXPECT_EQ(dateTime2.GetYear(), 1991); + EXPECT_EQ(dateTime2.GetMonth(), 5); + EXPECT_EQ(dateTime2.GetDay(), 14); + EXPECT_EQ(dateTime2.GetHour(), 12); + EXPECT_EQ(dateTime2.GetMinute(), 34); + EXPECT_EQ(dateTime2.GetSecond(), 56); + + const time_t time = 674224496 + bias.GetSecondsTotal(); + + CDateTime dateTime3; + EXPECT_TRUE(dateTime3.SetFromUTCDateTime(time)); + EXPECT_EQ(dateTime3.GetYear(), 1991); + EXPECT_EQ(dateTime3.GetMonth(), 5); + EXPECT_EQ(dateTime3.GetDay(), 14); + EXPECT_EQ(dateTime3.GetHour(), 12); + EXPECT_EQ(dateTime3.GetMinute(), 34); + EXPECT_EQ(dateTime3.GetSecond(), 56); +} + +TEST_F(TestDateTime, SetFromRFC1123DateTime) +{ + std::string dateTime1("Mon, 21 Oct 2018 12:16:24 GMT"); + + CDateTime dateTime2; + EXPECT_TRUE(dateTime2.SetFromRFC1123DateTime(dateTime1)); + EXPECT_EQ(dateTime2.GetYear(), 2018); + EXPECT_EQ(dateTime2.GetMonth(), 10); + EXPECT_EQ(dateTime2.GetDay(), 21); + EXPECT_EQ(dateTime2.GetHour(), 12); + EXPECT_EQ(dateTime2.GetMinute(), 16); + EXPECT_EQ(dateTime2.GetSecond(), 24); +} + +TEST_F(TestDateTime, SetDateTime) +{ + CDateTime dateTime1; + EXPECT_TRUE(dateTime1.SetDateTime(1991, 05, 14, 12, 34, 56)); + EXPECT_EQ(dateTime1.GetYear(), 1991); + EXPECT_EQ(dateTime1.GetMonth(), 5); + EXPECT_EQ(dateTime1.GetDay(), 14); + EXPECT_EQ(dateTime1.GetHour(), 12); + EXPECT_EQ(dateTime1.GetMinute(), 34); + EXPECT_EQ(dateTime1.GetSecond(), 56); + + CDateTime dateTime2; + EXPECT_TRUE(dateTime2.SetDate(1991, 05, 14)); + EXPECT_EQ(dateTime2.GetYear(), 1991); + EXPECT_EQ(dateTime2.GetMonth(), 5); + EXPECT_EQ(dateTime2.GetDay(), 14); + EXPECT_EQ(dateTime2.GetHour(), 0); + EXPECT_EQ(dateTime2.GetMinute(), 0); + EXPECT_EQ(dateTime2.GetSecond(), 0); + +// disabled on osx and freebsd as their mktime functions +// don't work for dates before 1900 +#if !defined(TARGET_DARWIN_OSX) && !defined(TARGET_FREEBSD) + CDateTime dateTime3; + EXPECT_TRUE(dateTime3.SetTime(12, 34, 56)); + EXPECT_EQ(dateTime3.GetYear(), 1601); + EXPECT_EQ(dateTime3.GetMonth(), 1); + EXPECT_EQ(dateTime3.GetDay(), 1); + EXPECT_EQ(dateTime3.GetHour(), 12); + EXPECT_EQ(dateTime3.GetMinute(), 34); + EXPECT_EQ(dateTime3.GetSecond(), 56); +#endif +} + +TEST_F(TestDateTime, GetAsStrings) +{ + CDateTime dateTime; + dateTime.SetDateTime(1991, 05, 14, 12, 34, 56); + + EXPECT_EQ(dateTime.GetAsSaveString(), "19910514_123456"); + EXPECT_EQ(dateTime.GetAsDBDateTime(), "1991-05-14 12:34:56"); + EXPECT_EQ(dateTime.GetAsDBDate(), "1991-05-14"); + EXPECT_EQ(dateTime.GetAsDBTime(), "12:34:56"); + EXPECT_EQ(dateTime.GetAsW3CDate(), "1991-05-14"); +} + +// disabled because we have no way to validate these values +// GetTimezoneBias() always returns a positive value so +// there is no way to detect the direction of the offset +TEST_F(TestDateTime, DISABLED_GetAsStringsWithBias) +{ + CDateTimeSpan bias = CDateTime::GetTimezoneBias(); + + CDateTime dateTime; + dateTime.SetDateTime(1991, 05, 14, 12, 34, 56); + + CDateTime dateTimeWithBias(dateTime); + dateTimeWithBias += bias; + + EXPECT_EQ(dateTime.GetAsRFC1123DateTime(), "Tue, 14 May 1991 20:34:56 GMT"); + EXPECT_EQ(dateTime.GetAsW3CDateTime(false), "1991-05-14T12:34:56+08:00"); + EXPECT_EQ(dateTime.GetAsW3CDateTime(true), "1991-05-14T20:34:56Z"); +} + +TEST_F(TestDateTime, GetAsLocalized) +{ + // short date formats using "/" + // "DD/MM/YYYY", + // "MM/DD/YYYY", + // "YYYY/MM/DD", + // "D/M/YYYY", + // short date formats using "-" + // "DD-MM-YYYY", + // "MM-DD-YYYY", + // "YYYY-MM-DD", + // "YYYY-M-D", + // short date formats using "." + // "DD.MM.YYYY", + // "DD.M.YYYY", + // "D.M.YYYY", + // "D. M. YYYY", + // "YYYY.MM.DD" + + // "DDDD, D MMMM YYYY", + // "DDDD, DD MMMM YYYY", + // "DDDD, D. MMMM YYYY", + // "DDDD, DD. MMMM YYYY", + // "DDDD, MMMM D, YYYY", + // "DDDD, MMMM DD, YYYY", + // "DDDD D MMMM YYYY", + // "DDDD DD MMMM YYYY", + // "DDDD D. MMMM YYYY", + // "DDDD DD. MMMM YYYY", + // "D. MMMM YYYY", + // "DD. MMMM YYYY", + // "D. MMMM. YYYY", + // "DD. MMMM. YYYY", + // "YYYY. MMMM. D" + + ASSERT_TRUE(g_localizeStrings.Load(g_langInfo.GetLanguagePath(), "resource.language.en_gb")); + + // 24 hour clock must be set before time format + g_langInfo.Set24HourClock(false); + g_langInfo.SetTimeFormat("hh:mm:ss"); + + g_langInfo.SetShortDateFormat("MM/DD/YYYY"); + g_langInfo.SetLongDateFormat("DDDD, DD MMMM YYYY"); + + CDateTime dateTime1; + dateTime1.SetDateTime(1991, 05, 14, 12, 34, 56); + + // std::cout << "GetAsLocalizedDate: " << dateTime1.GetAsLocalizedDate(false) << std::endl; + // std::cout << "GetAsLocalizedDate: " << dateTime1.GetAsLocalizedDate(true) << std::endl; + // std::cout << "GetAsLocalizedDate: " << dateTime1.GetAsLocalizedDate(std::string("dd-mm-yyyy")) << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime1.GetAsLocalizedTime("hh-mm-ss", true) << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime1.GetAsLocalizedTime("hh-mm-ss", false) + // << std::endl; + // std::cout << "GetAsLocalizedDateTime: " << dateTime1.GetAsLocalizedDateTime(false, false) + // << std::endl; + // std::cout << "GetAsLocalizedDateTime: " << dateTime1.GetAsLocalizedDateTime(true, true) + // << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(0), false) + // << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(0), true) + // << std::endl; + + // std::cout << "1: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(1)) << std::endl; + // std::cout << "2: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(2)) << std::endl; + // std::cout << "3: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(3)) << std::endl; + // std::cout << "4: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(4)) << std::endl; + // std::cout << "5: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(5)) << std::endl; + // std::cout << "6: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(6)) << std::endl; + // std::cout << "7: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(7)) << std::endl; + // std::cout << "8: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(8)) << std::endl; + // std::cout << "14: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(14)) << std::endl; + // std::cout << "15: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(15)) << std::endl; + // std::cout << "16: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(16)) << std::endl; + // std::cout << "19: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(19)) << std::endl; + // std::cout << "27: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(27)) << std::endl; + // std::cout << "32: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(32)) << std::endl; + // std::cout << "64: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(64)) << std::endl; + // std::cout << "128: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(128)) << std::endl; + // std::cout << "256: " << dateTime1.GetAsLocalizedTime(TIME_FORMAT(256)) << std::endl; + + EXPECT_EQ(dateTime1.GetAsLocalizedDate(false), "05/14/1991"); + EXPECT_EQ(dateTime1.GetAsLocalizedDate(true), "Tuesday, 14 May 1991"); + EXPECT_EQ(dateTime1.GetAsLocalizedDate(std::string("dd-mm-yyyy")), + "14-05-1991"); // need to force overload function + EXPECT_EQ(dateTime1.GetAsLocalizedTime("hh-mm-ss", true), "12-34-56"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime("hh-mm-ss", false), "12-34"); + EXPECT_EQ(dateTime1.GetAsLocalizedDateTime(false, false), "05/14/1991 12:34"); + EXPECT_EQ(dateTime1.GetAsLocalizedDateTime(true, true), "Tuesday, 14 May 1991 12:34:56"); + + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(0), false), "12:34"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(0), true), "12:34:56"); + + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(1)), "56"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(2)), "34"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(3)), "34:56"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(4)), "12"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(5)), "12:56"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(6)), "12:34"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(7)), "12:34:56"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(8)), "PM"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(14)), "12:34 PM"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(15)), "12:34:56 PM"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(16)), "12"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(19)), "12:34:56"); + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(27)), "12:34:56 PM"); + + // not possible to use these three + // EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(32)), ""); + // EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(64)), ""); + // EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(128)), ""); + + EXPECT_EQ(dateTime1.GetAsLocalizedTime(TIME_FORMAT(256)), "34"); + + + // 24 hour clock must be set before time format + g_langInfo.Set24HourClock(true); + g_langInfo.SetTimeFormat("h:m:s"); + + g_langInfo.SetShortDateFormat("YYYY-M-D"); + g_langInfo.SetLongDateFormat("DDDD, MMMM D, YYYY"); + + CDateTime dateTime2; + dateTime2.SetDateTime(2020, 2, 3, 4, 5, 6); + + // std::cout << "GetAsLocalizedDate: " << dateTime2.GetAsLocalizedDate(false) << std::endl; + // std::cout << "GetAsLocalizedDate: " << dateTime2.GetAsLocalizedDate(true) << std::endl; + // std::cout << "GetAsLocalizedDate: " << dateTime2.GetAsLocalizedDate(std::string("dd-mm-yyyy")) << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime2.GetAsLocalizedTime("hh-mm-ss", true) << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime2.GetAsLocalizedTime("hh-mm-ss", false) + // << std::endl; + // std::cout << "GetAsLocalizedDateTime: " << dateTime2.GetAsLocalizedDateTime(false, false) + // << std::endl; + // std::cout << "GetAsLocalizedDateTime: " << dateTime2.GetAsLocalizedDateTime(true, true) + // << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(0), false) + // << std::endl; + // std::cout << "GetAsLocalizedTime: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(0), true) + // << std::endl; + + // std::cout << "1: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(1)) << std::endl; + // std::cout << "2: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(2)) << std::endl; + // std::cout << "3: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(3)) << std::endl; + // std::cout << "4: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(4)) << std::endl; + // std::cout << "5: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(5)) << std::endl; + // std::cout << "6: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(6)) << std::endl; + // std::cout << "7: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(7)) << std::endl; + // std::cout << "8: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(8)) << std::endl; + // std::cout << "14: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(14)) << std::endl; + // std::cout << "15: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(15)) << std::endl; + // std::cout << "16: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(16)) << std::endl; + // std::cout << "19: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(19)) << std::endl; + // std::cout << "27: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(27)) << std::endl; + // std::cout << "32: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(32)) << std::endl; + // std::cout << "64: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(64)) << std::endl; + // std::cout << "128: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(128)) << std::endl; + // std::cout << "256: " << dateTime2.GetAsLocalizedTime(TIME_FORMAT(256)) << std::endl; + + EXPECT_EQ(dateTime2.GetAsLocalizedDate(false), "2020-2-3"); + EXPECT_EQ(dateTime2.GetAsLocalizedDate(true), "Monday, February 3, 2020"); + EXPECT_EQ(dateTime2.GetAsLocalizedDate(std::string("dd-mm-yyyy")), + "03-02-2020"); // need to force overload function + EXPECT_EQ(dateTime2.GetAsLocalizedTime("hh-mm-ss", true), "04-05-06"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime("hh-mm-ss", false), "04-05"); + EXPECT_EQ(dateTime2.GetAsLocalizedDateTime(false, false), "2020-2-3 4:5"); + EXPECT_EQ(dateTime2.GetAsLocalizedDateTime(true, true), "Monday, February 3, 2020 4:5:6"); + + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(0), false), "4:5"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(0), true), "4:5:6"); + + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(1)), "06"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(2)), "05"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(3)), "05:06"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(4)), "04"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(5)), "04:06"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(6)), "04:05"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(7)), "04:05:06"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(8)), ""); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(14)), "04:05"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(15)), "04:05:06"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(16)), "4"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(19)), "4:05:06"); + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(27)), "4:05:06 AM"); + + // not possible to use these three + // EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(32)), ""); + // EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(64)), ""); + // EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(128)), ""); + + EXPECT_EQ(dateTime2.GetAsLocalizedTime(TIME_FORMAT(256)), "5"); +} + +TEST_F(TestDateTime, GetAsSystemTime) +{ + CDateTime dateTime; + dateTime.SetDateTime(1991, 05, 14, 12, 34, 56); + + KODI::TIME::SystemTime systemTime; + dateTime.GetAsSystemTime(systemTime); + + EXPECT_TRUE(dateTime == systemTime); +} + +TEST_F(TestDateTime, GetAsTime) +{ + CDateTime dateTime; + dateTime.SetDateTime(1991, 05, 14, 12, 34, 56); + + time_t time; + dateTime.GetAsTime(time); + + EXPECT_TRUE(dateTime == time); +} + +TEST_F(TestDateTime, GetAsTm) +{ + { + CDateTime dateTime; + dateTime.SetDateTime(1991, 05, 14, 12, 34, 56); + + tm time; + dateTime.GetAsTm(time); + EXPECT_TRUE(dateTime == time); + } + + // same test but opposite daylight saving + { + CDateTime dateTime; + dateTime.SetDateTime(1991, 01, 14, 12, 34, 56); + + tm time; + dateTime.GetAsTm(time); + EXPECT_TRUE(dateTime == time); + } +} + +// Disabled pending std::chrono and std::date changes. +TEST_F(TestDateTime, DISABLED_GetAsTimeStamp) +{ + CDateTimeSpan bias = CDateTime::GetTimezoneBias(); + + CDateTime dateTime; + dateTime.SetDateTime(1991, 05, 14, 12, 34, 56); + + KODI::TIME::FileTime fileTime; + dateTime.GetAsTimeStamp(fileTime); + dateTime += bias; + + EXPECT_TRUE(dateTime == fileTime); +} + +TEST_F(TestDateTime, GetAsUTCDateTime) +{ + CDateTimeSpan bias = CDateTime::GetTimezoneBias(); + + CDateTime dateTime1; + dateTime1.SetDateTime(1991, 05, 14, 12, 34, 56); + + CDateTime dateTime2; + dateTime2 = dateTime1.GetAsUTCDateTime(); + dateTime2 -= bias; + + EXPECT_EQ(dateTime2.GetYear(), 1991); + EXPECT_EQ(dateTime2.GetMonth(), 5); + EXPECT_EQ(dateTime2.GetDay(), 14); + EXPECT_EQ(dateTime2.GetHour(), 12); + EXPECT_EQ(dateTime2.GetMinute(), 34); + EXPECT_EQ(dateTime2.GetSecond(), 56); +} + +// disabled on osx and freebsd as their mktime functions +// don't work for dates before 1900 +#if defined(TARGET_DARWIN_OSX) || defined(TARGET_FREEBSD) +TEST_F(TestDateTime, DISABLED_Reset) +#else +TEST_F(TestDateTime, Reset) +#endif +{ + CDateTime dateTime; + dateTime.SetDateTime(1991, 05, 14, 12, 34, 56); + + dateTime.Reset(); + + EXPECT_EQ(dateTime.GetYear(), 1601); + EXPECT_EQ(dateTime.GetMonth(), 1); + EXPECT_EQ(dateTime.GetDay(), 1); + EXPECT_EQ(dateTime.GetHour(), 0); + EXPECT_EQ(dateTime.GetMinute(), 0); + EXPECT_EQ(dateTime.GetSecond(), 0); +} |