Home | History | Annotate | Download | only in drive
      1 // Copyright (c) 2012 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 "google_apis/drive/time_util.h"
      6 
      7 #include "base/i18n/time_formatting.h"
      8 #include "base/strings/utf_string_conversions.h"
      9 #include "base/time/time.h"
     10 #include "testing/gtest/include/gtest/gtest.h"
     11 
     12 namespace google_apis {
     13 namespace util {
     14 namespace {
     15 
     16 std::string FormatTime(const base::Time& time) {
     17   return base::UTF16ToUTF8(base::TimeFormatShortDateAndTime(time));
     18 }
     19 
     20 }  // namespace
     21 
     22 TEST(TimeUtilTest, GetTimeFromStringLocalTimezone) {
     23   // Creates local time objects from exploded structure.
     24   base::Time::Exploded exploded = {2013, 1, 0, 15, 17, 11, 35, 374};
     25   base::Time local_time = base::Time::FromLocalExploded(exploded);
     26 
     27   // Creates local time object, parsing time string. Note that if there is
     28   // not timezone suffix, GetTimeFromString() will handle this as local time
     29   // with FromLocalExploded().
     30   base::Time test_time;
     31   ASSERT_TRUE(GetTimeFromString("2013-01-15T17:11:35.374", &test_time));
     32 
     33   // Compare the time objects.
     34   EXPECT_EQ(local_time, test_time);
     35 }
     36 
     37 TEST(TimeUtilTest, GetTimeFromStringNonTrivialTimezones) {
     38   base::Time target_time;
     39   base::Time test_time;
     40   // Creates the target time.
     41   EXPECT_TRUE(GetTimeFromString("2012-07-14T01:03:21.151Z", &target_time));
     42 
     43   // Tests positive offset (hour only).
     44   EXPECT_TRUE(GetTimeFromString("2012-07-14T02:03:21.151+01", &test_time));
     45   EXPECT_EQ(FormatTime(target_time), FormatTime(test_time));
     46 
     47   // Tests positive offset (hour and minutes).
     48   EXPECT_TRUE(GetTimeFromString("2012-07-14T07:33:21.151+06:30", &test_time));
     49   EXPECT_EQ(FormatTime(target_time), FormatTime(test_time));
     50 
     51   // Tests negative offset.
     52   EXPECT_TRUE(GetTimeFromString("2012-07-13T18:33:21.151-06:30", &test_time));
     53   EXPECT_EQ(FormatTime(target_time), FormatTime(test_time));
     54 }
     55 
     56 TEST(TimeUtilTest, GetTimeFromStringBasic) {
     57   base::Time test_time;
     58 
     59   // Test that the special timezone "Z" (UTC) is handled.
     60   base::Time::Exploded target_time1 = {2005, 1, 0, 7, 8, 2, 0, 0};
     61   EXPECT_TRUE(GetTimeFromString("2005-01-07T08:02:00Z", &test_time));
     62   EXPECT_EQ(FormatTime(base::Time::FromUTCExploded(target_time1)),
     63             FormatTime(test_time));
     64 
     65   // Test that a simple timezone "-08:00" is handled
     66   // 17:57 - 8 hours = 09:57
     67   base::Time::Exploded target_time2 = {2005, 8, 0, 9, 17, 57, 0, 0};
     68   EXPECT_TRUE(GetTimeFromString("2005-08-09T09:57:00-08:00", &test_time));
     69   EXPECT_EQ(FormatTime(base::Time::FromUTCExploded(target_time2)),
     70             FormatTime(test_time));
     71 
     72   // Test that milliseconds (.123) are handled.
     73   base::Time::Exploded target_time3 = {2005, 1, 0, 7, 8, 2, 0, 123};
     74   EXPECT_TRUE(GetTimeFromString("2005-01-07T08:02:00.123Z", &test_time));
     75   EXPECT_EQ(FormatTime(base::Time::FromUTCExploded(target_time3)),
     76             FormatTime(test_time));
     77 }
     78 
     79 TEST(TimeUtilTest, FormatTimeAsString) {
     80   base::Time::Exploded exploded_time = {2012, 7, 0, 19, 15, 59, 13, 123};
     81   base::Time time = base::Time::FromUTCExploded(exploded_time);
     82   EXPECT_EQ("2012-07-19T15:59:13.123Z", FormatTimeAsString(time));
     83 
     84   EXPECT_EQ("null", FormatTimeAsString(base::Time()));
     85 }
     86 
     87 TEST(TimeUtilTest, FormatTimeAsStringLocalTime) {
     88   base::Time::Exploded exploded_time = {2012, 7, 0, 19, 15, 59, 13, 123};
     89   base::Time time = base::Time::FromLocalExploded(exploded_time);
     90   EXPECT_EQ("2012-07-19T15:59:13.123", FormatTimeAsStringLocaltime(time));
     91 
     92   EXPECT_EQ("null", FormatTimeAsStringLocaltime(base::Time()));
     93 }
     94 
     95 }  // namespace util
     96 }  // namespace google_apis
     97