910e62b5创建于 1月15日历史提交
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/message_center/views/relative_time_formatter.h"

#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/strings/grit/ui_strings.h"


namespace message_center {

namespace {

// In Android, DateUtils.YEAR_IN_MILLIS is 364 days (52 weeks * 7 days).
constexpr base::TimeDelta kYearTimeDelta = base::Days(364);

std::u16string GetRelativeTime(base::TimeDelta delta) {
  std::u16string relative_time;
  base::TimeDelta next_update;
  GetRelativeTimeStringAndNextUpdateTime(delta, &relative_time, &next_update);
  return relative_time;
}

base::TimeDelta GetNextUpdate(base::TimeDelta delta) {
  std::u16string relative_time;
  base::TimeDelta next_update;
  GetRelativeTimeStringAndNextUpdateTime(delta, &relative_time, &next_update);
  return next_update;
}

}  // namespace

TEST(RelativeTimeFormatterTest, Format_Future_30Sec) {
  std::u16string relative_time = GetRelativeTime(base::Seconds(30));
  EXPECT_EQ(
      l10n_util::GetStringUTF16(IDS_MESSAGE_NOTIFICATION_NOW_STRING_SHORTEST),
      relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_30Sec) {
  std::u16string relative_time = GetRelativeTime(base::Seconds(-30));
  EXPECT_EQ(
      l10n_util::GetStringUTF16(IDS_MESSAGE_NOTIFICATION_NOW_STRING_SHORTEST),
      relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Future_60Sec) {
  std::u16string relative_time = GetRelativeTime(base::Minutes(1));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_MINUTES_SHORTEST_FUTURE, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_60Sec) {
  std::u16string relative_time = GetRelativeTime(base::Minutes(-1));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_MINUTES_SHORTEST, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Future_5Min) {
  std::u16string relative_time = GetRelativeTime(base::Minutes(5));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_MINUTES_SHORTEST_FUTURE, 5),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_5Min) {
  std::u16string relative_time = GetRelativeTime(base::Minutes(-5));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_MINUTES_SHORTEST, 5),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Future_60Min) {
  std::u16string relative_time = GetRelativeTime(base::Hours(1));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_HOURS_SHORTEST_FUTURE, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_60Min) {
  std::u16string relative_time = GetRelativeTime(base::Hours(-1));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_HOURS_SHORTEST, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Future_10Hrs) {
  std::u16string relative_time = GetRelativeTime(base::Hours(10));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_HOURS_SHORTEST_FUTURE, 10),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_10Hrs) {
  std::u16string relative_time = GetRelativeTime(base::Hours(-10));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_HOURS_SHORTEST, 10),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Future_24Hrs) {
  std::u16string relative_time = GetRelativeTime(base::Days(1));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_DAYS_SHORTEST_FUTURE, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_24Hrs) {
  std::u16string relative_time = GetRelativeTime(base::Days(-1));
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_DAYS_SHORTEST, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Future_1Year) {
  std::u16string relative_time = GetRelativeTime(kYearTimeDelta);
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_YEARS_SHORTEST_FUTURE, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_1Year) {
  std::u16string relative_time = GetRelativeTime(-kYearTimeDelta);
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_YEARS_SHORTEST, 1),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Future_10Years) {
  std::u16string relative_time = GetRelativeTime(kYearTimeDelta * 10);
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_YEARS_SHORTEST_FUTURE, 10),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Format_Past_10Years) {
  std::u16string relative_time = GetRelativeTime(-kYearTimeDelta * 10);
  EXPECT_EQ(l10n_util::GetPluralStringFUTF16(
                IDS_MESSAGE_NOTIFICATION_DURATION_YEARS_SHORTEST, 10),
            relative_time);
}

TEST(RelativeTimeFormatterTest, Update_Future_Year) {
  base::TimeDelta next_update =
      GetNextUpdate(kYearTimeDelta * 2 - base::Milliseconds(1));
  EXPECT_EQ(kYearTimeDelta, next_update);
}

TEST(RelativeTimeFormatterTest, Update_Future_Day) {
  base::TimeDelta next_update =
      GetNextUpdate(base::Days(2) - base::Milliseconds(1));
  EXPECT_EQ(base::Days(1), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Future_Hour) {
  base::TimeDelta next_update =
      GetNextUpdate(base::Hours(2) - base::Milliseconds(1));
  EXPECT_EQ(base::Hours(1), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Future_Minute) {
  base::TimeDelta next_update =
      GetNextUpdate(base::Minutes(2) - base::Milliseconds(1));
  EXPECT_EQ(base::Minutes(1), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Future_Now) {
  base::TimeDelta next_update = GetNextUpdate(base::Seconds(30));
  EXPECT_EQ(base::Seconds(90), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Past_Now) {
  base::TimeDelta next_update = GetNextUpdate(base::Seconds(-30));
  EXPECT_EQ(base::Seconds(30), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Past_Minute) {
  base::TimeDelta next_update = GetNextUpdate(base::Minutes(-1));
  EXPECT_EQ(base::Minutes(1), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Past_Hour) {
  base::TimeDelta next_update = GetNextUpdate(base::Hours(-1));
  EXPECT_EQ(base::Hours(1), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Past_Day) {
  base::TimeDelta next_update = GetNextUpdate(base::Days(-1));
  EXPECT_EQ(base::Days(1), next_update);
}

TEST(RelativeTimeFormatterTest, Update_Past_Year) {
  base::TimeDelta next_update = GetNextUpdate(-kYearTimeDelta);
  EXPECT_EQ(kYearTimeDelta, next_update);
}

}  // namespace message_center