#include "ash/system/time/date_helper.h"
#include "ash/system/time/calendar_unittest_utils.h"
#include "ash/test/ash_test_base.h"
#include "base/i18n/rtl.h"
#include "chromeos/ash/components/settings/scoped_timezone_settings.h"
namespace ash {
class DateHelperUnittest : public AshTestBase {
public:
DateHelperUnittest() = default;
DateHelperUnittest(const DateHelperUnittest& other) = delete;
DateHelperUnittest& operator=(const DateHelperUnittest& other) = delete;
~DateHelperUnittest() override = default;
void SetDefaultLocale(const std::string& lang) {
base::i18n::SetICUDefaultLocale(lang);
DateHelper::GetInstance()->ResetFormatters();
DateHelper::GetInstance()->CalculateLocalWeekTitles();
}
std::u16string Format12HrClockInterval(const base::Time& start_time,
const base::Time& end_time) {
return DateHelper::GetInstance()->GetFormattedInterval(
DateHelper::GetInstance()->twelve_hour_clock_interval_formatter(),
start_time, end_time);
}
std::u16string Format24HrClockInterval(const base::Time& start_time,
const base::Time& end_time) {
return DateHelper::GetInstance()->GetFormattedInterval(
DateHelper::GetInstance()->twenty_four_hour_clock_interval_formatter(),
start_time, end_time);
}
};
TEST_F(DateHelperUnittest, GetWeekTitle) {
SetDefaultLocale("zh-CN");
std::vector<std::u16string> week_titles =
DateHelper::GetInstance()->week_titles();
EXPECT_EQ(u"一", week_titles[0]);
EXPECT_EQ(u"二", week_titles[1]);
EXPECT_EQ(u"三", week_titles[2]);
EXPECT_EQ(u"四", week_titles[3]);
EXPECT_EQ(u"五", week_titles[4]);
EXPECT_EQ(u"六", week_titles[5]);
EXPECT_EQ(u"日", week_titles[6]);
SetDefaultLocale("ar");
week_titles = DateHelper::GetInstance()->week_titles();
EXPECT_EQ(u"س", week_titles[0]);
EXPECT_EQ(u"ح", week_titles[1]);
EXPECT_EQ(u"ن", week_titles[2]);
EXPECT_EQ(u"ث", week_titles[3]);
EXPECT_EQ(u"ر", week_titles[4]);
EXPECT_EQ(u"خ", week_titles[5]);
EXPECT_EQ(u"ج", week_titles[6]);
SetDefaultLocale("ko");
week_titles = DateHelper::GetInstance()->week_titles();
EXPECT_EQ(u"일", week_titles[0]);
EXPECT_EQ(u"월", week_titles[1]);
EXPECT_EQ(u"화", week_titles[2]);
EXPECT_EQ(u"수", week_titles[3]);
EXPECT_EQ(u"목", week_titles[4]);
EXPECT_EQ(u"금", week_titles[5]);
EXPECT_EQ(u"토", week_titles[6]);
SetDefaultLocale("en_US");
week_titles = DateHelper::GetInstance()->week_titles();
EXPECT_EQ(u"S", week_titles[0]);
EXPECT_EQ(u"M", week_titles[1]);
EXPECT_EQ(u"T", week_titles[2]);
EXPECT_EQ(u"W", week_titles[3]);
EXPECT_EQ(u"T", week_titles[4]);
EXPECT_EQ(u"F", week_titles[5]);
EXPECT_EQ(u"S", week_titles[6]);
}
TEST_F(DateHelperUnittest, GetWeekTitleForAllLocales) {
for (auto* locale : kLocales) {
SetDefaultLocale(locale);
EXPECT_EQ(7U, DateHelper::GetInstance()->week_titles().size());
}
}
TEST_F(DateHelperUnittest, GetFormattedInterval) {
ash::system::ScopedTimezoneSettings timezone_settings(u"GMT");
base::Time date1;
base::Time date2;
base::Time date3;
ASSERT_TRUE(base::Time::FromString("22 Nov 2021 10:00 GMT", &date1));
ASSERT_TRUE(base::Time::FromString("22 Nov 2021 11:45 GMT", &date2));
ASSERT_TRUE(base::Time::FromString("22 Nov 2021 22:30 GMT", &date3));
SetDefaultLocale("en_US");
EXPECT_EQ(u"10:00\u2009–\u200911:45\u202fAM",
Format12HrClockInterval(date1, date2));
EXPECT_EQ(u"10:00\u202fAM\u2009–\u200910:30\u202fPM",
Format12HrClockInterval(date1, date3));
EXPECT_EQ(u"10:00\u2009–\u200911:45", Format24HrClockInterval(date1, date2));
EXPECT_EQ(u"10:00\u2009–\u200922:30", Format24HrClockInterval(date1, date3));
SetDefaultLocale("zh_Hant");
EXPECT_EQ(u"上午10:00至11:45", Format12HrClockInterval(date1, date2));
EXPECT_EQ(u"上午10:00至晚上10:30", Format12HrClockInterval(date1, date3));
EXPECT_EQ(u"10:00 – 11:45", Format24HrClockInterval(date1, date2));
EXPECT_EQ(u"10:00 – 22:30", Format24HrClockInterval(date1, date3));
SetDefaultLocale("ar");
EXPECT_EQ(u"10:00–11:45 ص", Format12HrClockInterval(date1, date2));
EXPECT_EQ(u"10:00 ص – 10:30 م", Format12HrClockInterval(date1, date3));
EXPECT_EQ(u"10:00–11:45", Format24HrClockInterval(date1, date2));
EXPECT_EQ(u"10:00–22:30", Format24HrClockInterval(date1, date3));
}
}