1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/i18n/timezone.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h" 8*6777b538SAndroid Build Coastguard Worker #include "third_party/icu/source/common/unicode/strenum.h" 9*6777b538SAndroid Build Coastguard Worker #include "third_party/icu/source/common/unicode/unistr.h" 10*6777b538SAndroid Build Coastguard Worker #include "third_party/icu/source/i18n/unicode/timezone.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker namespace base { 13*6777b538SAndroid Build Coastguard Worker namespace { 14*6777b538SAndroid Build Coastguard Worker TEST(TimezoneTest,CountryCodeForTimezones)15*6777b538SAndroid Build Coastguard WorkerTEST(TimezoneTest, CountryCodeForTimezones) { 16*6777b538SAndroid Build Coastguard Worker std::unique_ptr<icu::StringEnumeration> timezones( 17*6777b538SAndroid Build Coastguard Worker icu::TimeZone::createEnumeration()); 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker UErrorCode status = U_ZERO_ERROR; 20*6777b538SAndroid Build Coastguard Worker while (const icu::UnicodeString* timezone = timezones->snext(status)) { 21*6777b538SAndroid Build Coastguard Worker icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone(*timezone)); 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker std::string country_code = CountryCodeForCurrentTimezone(); 24*6777b538SAndroid Build Coastguard Worker // On some systems (such as Android or some flavors of Linux), ICU may come 25*6777b538SAndroid Build Coastguard Worker // up empty. With https://chromium-review.googlesource.com/c/512282/ , ICU 26*6777b538SAndroid Build Coastguard Worker // will not fail any more. See also 27*6777b538SAndroid Build Coastguard Worker // http://bugs.icu-project.org/trac/ticket/13208 . Even with that, ICU 28*6777b538SAndroid Build Coastguard Worker // returns '001' (world) for region-agnostic timezones such as Etc/UTC and 29*6777b538SAndroid Build Coastguard Worker // |CountryCodeForCurrentTimezone| returns an empty string so that the next 30*6777b538SAndroid Build Coastguard Worker // fallback can be tried by a customer. 31*6777b538SAndroid Build Coastguard Worker if (!country_code.empty()) 32*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(2U, country_code.size()) << "country_code = " << country_code; 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker icu::TimeZone::adoptDefault(nullptr); 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker } // namespace 39*6777b538SAndroid Build Coastguard Worker } // namespace base 40