xref: /aosp_15_r20/external/cronet/base/i18n/timezone_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 Worker TEST(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