| // Copyright 2015 The Android Open Source Project |
| // // |
| // // This software is licensed under the terms of the GNU General Public |
| // // License version 2, as published by the Free Software Foundation, and |
| // // may be copied, distributed, and modified under those terms. |
| // // |
| // // This program is distributed in the hope that it will be useful, |
| // // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // // GNU General Public License for more details. |
| |
| #include "android/utils/timezone.h" |
| #include "android/base/testing/Utils.h" |
| |
| #include <gtest/gtest.h> |
| using android::base::System; |
| TEST(TimeZone, setTimeZoneToEST) { |
| //this test relies on the windows registry and it won't work on wine |
| SKIP_TEST_ON_WINE(); |
| timezone_set("America/New_York"); |
| //utc time for 2017-10-01 00:00:00 |
| time_t current_time = 1506816000; |
| EXPECT_EQ(-60 * 60 * 4, android_tzoffset_in_seconds(¤t_time)); |
| struct tm local = *android_localtime(¤t_time); |
| EXPECT_EQ(2017 - 1900, local.tm_year); |
| EXPECT_EQ(8, local.tm_mon); |
| EXPECT_EQ(30, local.tm_mday); |
| EXPECT_EQ(20, local.tm_hour); |
| EXPECT_EQ(0, local.tm_min); |
| EXPECT_EQ(0, local.tm_sec); |
| EXPECT_EQ(1, local.tm_isdst); |
| |
| //change current time to utc time for 2016-12-10 00:00:00 |
| current_time = 1481328000; |
| |
| EXPECT_EQ(-60 * 60 * 5, android_tzoffset_in_seconds(¤t_time)); |
| local = *android_localtime(¤t_time); |
| EXPECT_EQ(2016 - 1900, local.tm_year); |
| EXPECT_EQ(11, local.tm_mon); |
| EXPECT_EQ(9, local.tm_mday); |
| EXPECT_EQ(19, local.tm_hour); |
| EXPECT_EQ(0, local.tm_min); |
| EXPECT_EQ(0, local.tm_sec); |
| EXPECT_EQ(0, local.tm_isdst); |
| |
| } |
| |
| TEST(TimeZone, setTimeZoneToChinaStandardTime) { |
| //this test relies on the windows registry and it won't work on wine |
| SKIP_TEST_ON_WINE(); |
| timezone_set("Asia/Shanghai"); |
| //utc time for 2017-10-01 00:00:00 |
| time_t current_time = 1506816000; |
| EXPECT_EQ(60 * 60 * 8, android_tzoffset_in_seconds(¤t_time)); |
| struct tm local = *android_localtime(¤t_time); |
| EXPECT_EQ(2017 - 1900, local.tm_year); |
| EXPECT_EQ(9, local.tm_mon); |
| EXPECT_EQ(1, local.tm_mday); |
| EXPECT_EQ(8, local.tm_hour); |
| EXPECT_EQ(0, local.tm_min); |
| EXPECT_EQ(0, local.tm_sec); |
| EXPECT_EQ(-1, local.tm_isdst); |
| |
| //change current time to utc time for 2016-12-10 00:00:00 |
| current_time = 1481328000; |
| |
| EXPECT_EQ(60 * 60 * 8, android_tzoffset_in_seconds(¤t_time)); |
| local = *android_localtime(¤t_time); |
| EXPECT_EQ(2016 - 1900, local.tm_year); |
| EXPECT_EQ(11, local.tm_mon); |
| EXPECT_EQ(10, local.tm_mday); |
| EXPECT_EQ(8, local.tm_hour); |
| EXPECT_EQ(0, local.tm_min); |
| EXPECT_EQ(0, local.tm_sec); |
| EXPECT_EQ(-1, local.tm_isdst); |
| |
| } |
| |
| TEST(TimeZone, setTimeZoneToIndiaStandardTime) { |
| //this test relies on the windows registry and it won't work on wine |
| SKIP_TEST_ON_WINE(); |
| timezone_set("Asia/Calcutta"); |
| //utc time for 2016-10-13 21:55:18 |
| time_t current_time = 1476395718; |
| EXPECT_EQ(60 * 60 * 5 + 60 * 30, android_tzoffset_in_seconds(¤t_time)); |
| struct tm local = *android_localtime(¤t_time); |
| EXPECT_EQ(2016 - 1900, local.tm_year); |
| EXPECT_EQ(9, local.tm_mon); |
| EXPECT_EQ(14, local.tm_mday); |
| EXPECT_EQ(3, local.tm_hour); |
| EXPECT_EQ(25, local.tm_min); |
| EXPECT_EQ(18, local.tm_sec); |
| EXPECT_EQ(-1, local.tm_isdst); |
| |
| //change current time to utc time for 2016-12-10 00:00:00 |
| current_time = 1481328000; |
| |
| EXPECT_EQ(60 * 60 * 5 + 60 * 30, android_tzoffset_in_seconds(¤t_time)); |
| local = *android_localtime(¤t_time); |
| EXPECT_EQ(2016 - 1900, local.tm_year); |
| EXPECT_EQ(11, local.tm_mon); |
| EXPECT_EQ(10, local.tm_mday); |
| EXPECT_EQ(5, local.tm_hour); |
| EXPECT_EQ(30, local.tm_min); |
| EXPECT_EQ(0, local.tm_sec); |
| EXPECT_EQ(-1, local.tm_isdst); |
| } |
| |