blob: c5825c796d471fc15d0295554f6fd0ef61cdf485 [file] [log] [blame]
// 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(&current_time));
struct tm local = *android_localtime(&current_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(&current_time));
local = *android_localtime(&current_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(&current_time));
struct tm local = *android_localtime(&current_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(&current_time));
local = *android_localtime(&current_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(&current_time));
struct tm local = *android_localtime(&current_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(&current_time));
local = *android_localtime(&current_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);
}