Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / ui / base / l10n / time_format_unittest.cc
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/base/l10n/time_format.h"
6
7 #include "base/files/file_path.h"
8 #include "base/strings/string16.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/time/time.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/base/resource/resource_bundle.h"
13
14 using base::ASCIIToUTF16;
15
16 namespace ui {
17 namespace {
18
19 using base::TimeDelta;
20
21 class TimeFormatTest : public ::testing::Test {
22  public:
23   static void SetUpTestCase() {
24     LoadLocale(ui::ResourceBundle::GetSharedInstance()
25                    .GetLocaleFilePath("en-US", true));
26   }
27
28   static void TearDownTestCase() {
29     LoadLocale(base::FilePath());
30   }
31
32  private:
33   static void LoadLocale(const base::FilePath& file_path) {
34     ui::ResourceBundle::GetSharedInstance().OverrideLocalePakForTest(file_path);
35     ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US");
36   }
37 };
38
39 void TestTimeFormats(const TimeDelta& delta, const char* expected_ascii) {
40   base::string16 expected = ASCIIToUTF16(expected_ascii);
41   base::string16 expected_left = expected + ASCIIToUTF16(" left");
42   base::string16 expected_ago = expected + ASCIIToUTF16(" ago");
43   EXPECT_EQ(expected, TimeFormat::TimeDurationShort(delta));
44   EXPECT_EQ(expected_left, TimeFormat::TimeRemaining(delta));
45   EXPECT_EQ(expected_ago, TimeFormat::TimeElapsed(delta));
46 }
47
48 TEST_F(TimeFormatTest, FormatTime) {
49   const TimeDelta one_day = TimeDelta::FromDays(1);
50   const TimeDelta one_hour = TimeDelta::FromHours(1);
51   const TimeDelta one_min = TimeDelta::FromMinutes(1);
52   const TimeDelta one_second = TimeDelta::FromSeconds(1);
53   const TimeDelta one_millisecond = TimeDelta::FromMilliseconds(1);
54   const TimeDelta zero = TimeDelta::FromMilliseconds(0);
55
56   TestTimeFormats(zero, "0 secs");
57   TestTimeFormats(499 * one_millisecond, "0 secs");
58   TestTimeFormats(500 * one_millisecond, "1 sec");
59   TestTimeFormats(1 * one_second + 499 * one_millisecond, "1 sec");
60   TestTimeFormats(1 * one_second + 500 * one_millisecond, "2 secs");
61   TestTimeFormats(59 * one_second + 499 * one_millisecond, "59 secs");
62   TestTimeFormats(59 * one_second + 500 * one_millisecond, "1 min");
63   TestTimeFormats(1 * one_min + 30 * one_second - one_millisecond, "1 min");
64   TestTimeFormats(1 * one_min + 30 * one_second, "2 mins");
65   TestTimeFormats(59 * one_min + 30 * one_second - one_millisecond, "59 mins");
66   TestTimeFormats(59 * one_min + 30 * one_second, "1 hour");
67   TestTimeFormats(1 * one_hour + 30 * one_min - one_millisecond, "1 hour");
68   TestTimeFormats(1 * one_hour + 30 * one_min, "2 hours");
69   TestTimeFormats(23 * one_hour + 30 * one_min - one_millisecond, "23 hours");
70   TestTimeFormats(23 * one_hour + 30 * one_min, "1 day");
71   TestTimeFormats(1 * one_day + 12 * one_hour - one_millisecond, "1 day");
72   TestTimeFormats(1 * one_day + 12 * one_hour, "2 days");
73 }
74
75 void TestRemainingLong(const TimeDelta& delta, const std::string& expected) {
76   EXPECT_EQ(TimeFormat::TimeRemainingLong(delta), ASCIIToUTF16(expected));
77 }
78
79 TEST_F(TimeFormatTest, TimeRemainingLong) {
80   const TimeDelta one_day(TimeDelta::FromDays(1));
81   const TimeDelta one_hour(TimeDelta::FromHours(1));
82   const TimeDelta one_min(TimeDelta::FromMinutes(1));
83   const TimeDelta one_second(TimeDelta::FromSeconds(1));
84   const TimeDelta one_millisecond(TimeDelta::FromMilliseconds(1));
85   const TimeDelta zero(TimeDelta::FromMilliseconds(0));
86
87   TestRemainingLong(zero, "0 seconds left");
88   TestRemainingLong(499 * one_millisecond, "0 seconds left");
89   TestRemainingLong(500 * one_millisecond, "1 second left");
90   TestRemainingLong(one_second + 499 * one_millisecond, "1 second left");
91   TestRemainingLong(one_second + 500 * one_millisecond, "2 seconds left");
92   TestRemainingLong(59 * one_second + 499 * one_millisecond, "59 seconds left");
93   TestRemainingLong(59 * one_second + 500 * one_millisecond, "1 minute left");
94   TestRemainingLong(one_min + 30 * one_second - one_millisecond,
95                     "1 minute left");
96   TestRemainingLong(one_min + 30 * one_second, "2 minutes left");
97   TestRemainingLong(59 * one_min + 30 * one_second - one_millisecond,
98                     "59 minutes left");
99   TestRemainingLong(59 * one_min + 30 * one_second, "1 hour left");
100   TestRemainingLong(one_hour + 30 * one_min - one_millisecond, "1 hour left");
101   TestRemainingLong(one_hour + 30 * one_min, "2 hours left");
102   TestRemainingLong(23 * one_hour + 30 * one_min - one_millisecond,
103                     "23 hours left");
104   TestRemainingLong(23 * one_hour + 30 * one_min, "1 day left");
105   TestRemainingLong(one_day + 12 * one_hour - one_millisecond, "1 day left");
106   TestRemainingLong(one_day + 12 * one_hour, "2 days left");
107 }
108
109 // crbug.com/159388: This test fails when daylight savings time ends.
110 TEST_F(TimeFormatTest, RelativeDate) {
111   base::Time now = base::Time::Now();
112   base::string16 today_str = TimeFormat::RelativeDate(now, NULL);
113   EXPECT_EQ(ASCIIToUTF16("Today"), today_str);
114
115   base::Time yesterday = now - TimeDelta::FromDays(1);
116   base::string16 yesterday_str = TimeFormat::RelativeDate(yesterday, NULL);
117   EXPECT_EQ(ASCIIToUTF16("Yesterday"), yesterday_str);
118
119   base::Time two_days_ago = now - TimeDelta::FromDays(2);
120   base::string16 two_days_ago_str =
121       TimeFormat::RelativeDate(two_days_ago, NULL);
122   EXPECT_TRUE(two_days_ago_str.empty());
123
124   base::Time a_week_ago = now - TimeDelta::FromDays(7);
125   base::string16 a_week_ago_str = TimeFormat::RelativeDate(a_week_ago, NULL);
126   EXPECT_TRUE(a_week_ago_str.empty());
127 }
128
129 }  // namespace
130 }  // namespace ui