File: time_util_unittest.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (130 lines) | stat: -rw-r--r-- 5,621 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "google_apis/common/time_util.h"

#include "base/i18n/time_formatting.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace google_apis::util {
namespace {

std::string FormatTime(const base::Time& time) {
  return base::UnlocalizedTimeFormatWithPattern(time, "yyMMddHHmmssSSS");
}

}  // namespace

TEST(TimeUtilTest, GetTimeFromStringLocalTimezone) {
  static constexpr base::Time::Exploded kExploded = {.year = 2013,
                                                     .month = 1,
                                                     .day_of_month = 15,
                                                     .hour = 17,
                                                     .minute = 11,
                                                     .second = 35,
                                                     .millisecond = 374};
  base::Time local_time;
  EXPECT_TRUE(base::Time::FromLocalExploded(kExploded, &local_time));

  // Creates local time object, parsing time string. Note that if there is
  // not timezone suffix, GetTimeFromString() will handle this as local time
  // with FromLocalExploded().
  base::Time test_time;
  ASSERT_TRUE(GetTimeFromString("2013-01-15T17:11:35.374", &test_time));

  // Compare the time objects.
  EXPECT_EQ(local_time, test_time);
}

TEST(TimeUtilTest, GetTimeFromStringNonTrivialTimezones) {
  // Creates the target time.
  base::Time target_time;
  EXPECT_TRUE(GetTimeFromString("2012-07-14T01:03:21.151Z", &target_time));

  // Tests positive offset (hour only).
  base::Time test_time;
  EXPECT_TRUE(GetTimeFromString("2012-07-14T02:03:21.151+01", &test_time));
  EXPECT_EQ(FormatTime(target_time), FormatTime(test_time));

  // Tests positive offset (hour and minutes).
  EXPECT_TRUE(GetTimeFromString("2012-07-14T07:33:21.151+06:30", &test_time));
  EXPECT_EQ(FormatTime(target_time), FormatTime(test_time));

  // Tests negative offset.
  EXPECT_TRUE(GetTimeFromString("2012-07-13T18:33:21.151-06:30", &test_time));
  EXPECT_EQ(FormatTime(target_time), FormatTime(test_time));
}

TEST(TimeUtilTest, GetTimeFromStringBasic) {
  // Test that the special timezone "Z" (UTC) is handled.
  static constexpr base::Time::Exploded kExploded1 = {
      .year = 2005, .month = 1, .day_of_month = 7, .hour = 8, .minute = 2};
  base::Time out_time;
  EXPECT_TRUE(base::Time::FromUTCExploded(kExploded1, &out_time));
  base::Time test_time;
  EXPECT_TRUE(GetTimeFromString("2005-01-07T08:02:00Z", &test_time));
  EXPECT_EQ(FormatTime(out_time), FormatTime(test_time));

  // Test that a simple timezone "-08:00" is handled
  // 17:57 - 8 hours = 09:57
  static constexpr base::Time::Exploded kExploded2 = {
      .year = 2005, .month = 8, .day_of_month = 9, .hour = 17, .minute = 57};
  EXPECT_TRUE(base::Time::FromUTCExploded(kExploded2, &out_time));
  EXPECT_TRUE(GetTimeFromString("2005-08-09T09:57:00-08:00", &test_time));
  EXPECT_EQ(FormatTime(out_time), FormatTime(test_time));

  // Test that milliseconds (.123) are handled.
  static constexpr base::Time::Exploded kExploded3 = {.year = 2005,
                                                      .month = 1,
                                                      .day_of_month = 7,
                                                      .hour = 8,
                                                      .minute = 2,
                                                      .millisecond = 123};
  EXPECT_TRUE(base::Time::FromUTCExploded(kExploded3, &out_time));
  EXPECT_TRUE(GetTimeFromString("2005-01-07T08:02:00.123Z", &test_time));
  EXPECT_EQ(FormatTime(out_time), FormatTime(test_time));
}

TEST(TimeUtilTest, GetDateOnlyFromStringBasic) {
  static constexpr base::Time::Exploded kExploded = {
      .year = 2009, .month = 10, .day_of_month = 23};
  base::Time out_time;
  EXPECT_TRUE(base::Time::FromUTCExploded(kExploded, &out_time));
  base::Time test_time;
  EXPECT_TRUE(GetDateOnlyFromString("2009-10-23", &test_time));
  EXPECT_EQ(FormatTime(out_time), FormatTime(test_time));
}

TEST(TimeUtilTest, FormatTimeAsString) {
  static constexpr base::Time::Exploded kTime = {.year = 2012,
                                                 .month = 7,
                                                 .day_of_month = 19,
                                                 .hour = 15,
                                                 .minute = 59,
                                                 .second = 13,
                                                 .millisecond = 123};
  base::Time time;
  EXPECT_TRUE(base::Time::FromUTCExploded(kTime, &time));
  EXPECT_EQ("2012-07-19T15:59:13.123Z", FormatTimeAsString(time));

  EXPECT_EQ("null", FormatTimeAsString(base::Time()));
}

TEST(TimeUtilTest, FormatTimeAsStringLocalTime) {
  static constexpr base::Time::Exploded kTime = {.year = 2012,
                                                 .month = 7,
                                                 .day_of_month = 19,
                                                 .hour = 15,
                                                 .minute = 59,
                                                 .second = 13,
                                                 .millisecond = 123};
  base::Time time;
  EXPECT_TRUE(base::Time::FromLocalExploded(kTime, &time));
  EXPECT_EQ("2012-07-19T15:59:13.123", FormatTimeAsStringLocaltime(time));

  EXPECT_EQ("null", FormatTimeAsStringLocaltime(base::Time()));
}

}  // namespace google_apis::util