| /* |
| * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code 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 |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| /* |
| * @test |
| * @bug 8181157 8202537 8234347 8236548 |
| * @modules jdk.localedata |
| * @summary Checks CLDR time zone names are generated correctly at runtime |
| * @run testng/othervm -Djava.locale.providers=CLDR TimeZoneNamesTest |
| */ |
| |
| import java.text.DateFormatSymbols; |
| import java.time.ZoneId; |
| import java.time.format.TextStyle; |
| import java.util.Arrays; |
| import java.util.Locale; |
| import java.util.Objects; |
| import java.util.TimeZone; |
| |
| import static org.testng.Assert.assertEquals; |
| import static org.testng.Assert.assertFalse; |
| import org.testng.annotations.DataProvider; |
| import org.testng.annotations.Test; |
| |
| @Test |
| public class TimeZoneNamesTest { |
| |
| @DataProvider(name="noResourceTZs") |
| Object[][] data() { |
| return new Object[][] { |
| // tzid, locale, style, expected |
| |
| // This list is as of CLDR version 33, and should be examined |
| // on the CLDR data upgrade. |
| |
| // no "metazone" zones |
| {"Asia/Srednekolymsk", Locale.US, "Srednekolymsk Standard Time", |
| "GMT+11:00", |
| "Srednekolymsk Daylight Time", |
| "GMT+11:00", |
| "Srednekolymsk Time", |
| "GMT+11:00"}, |
| {"Asia/Srednekolymsk", Locale.FRANCE, "Srednekolymsk (heure standard)", |
| "UTC+11:00", |
| "Srednekolymsk (heure d\u2019\u00e9t\u00e9)", |
| "UTC+11:00", |
| "heure : Srednekolymsk", |
| "UTC+11:00"}, |
| {"America/Punta_Arenas", Locale.US, "Punta Arenas Standard Time", |
| "GMT-03:00", |
| "Punta Arenas Daylight Time", |
| "GMT-03:00", |
| "Punta Arenas Time", |
| "GMT-03:00"}, |
| {"America/Punta_Arenas", Locale.FRANCE, "Punta Arenas (heure standard)", |
| "UTC\u221203:00", |
| "Punta Arenas (heure d\u2019\u00e9t\u00e9)", |
| "UTC\u221203:00", |
| "heure : Punta Arenas", |
| "UTC\u221203:00"}, |
| {"Asia/Famagusta", Locale.US, "Famagusta Standard Time", |
| "GMT+02:00", |
| "Famagusta Daylight Time", |
| "GMT+03:00", |
| "Famagusta Time", |
| "GMT+02:00"}, |
| {"Asia/Famagusta", Locale.FRANCE, "Famagouste (heure standard)", |
| "UTC+02:00", |
| "Famagouste (heure d\u2019\u00e9t\u00e9)", |
| "UTC+03:00", |
| "heure : Famagouste", |
| "UTC+02:00"}, |
| {"Europe/Astrakhan", Locale.US, "Astrakhan Standard Time", |
| "GMT+04:00", |
| "Astrakhan Daylight Time", |
| "GMT+04:00", |
| "Astrakhan Time", |
| "GMT+04:00"}, |
| {"Europe/Astrakhan", Locale.FRANCE, "Astrakhan (heure standard)", |
| "UTC+04:00", |
| "Astrakhan (heure d\u2019\u00e9t\u00e9)", |
| "UTC+04:00", |
| "heure : Astrakhan", |
| "UTC+04:00"}, |
| {"Europe/Saratov", Locale.US, "Saratov Standard Time", |
| "GMT+04:00", |
| "Saratov Daylight Time", |
| "GMT+04:00", |
| "Saratov Time", |
| "GMT+04:00"}, |
| {"Europe/Saratov", Locale.FRANCE, "Saratov (heure standard)", |
| "UTC+04:00", |
| "Saratov (heure d\u2019\u00e9t\u00e9)", |
| "UTC+04:00", |
| "heure : Saratov", |
| "UTC+04:00"}, |
| {"Europe/Ulyanovsk", Locale.US, "Ulyanovsk Standard Time", |
| "GMT+04:00", |
| "Ulyanovsk Daylight Time", |
| "GMT+04:00", |
| "Ulyanovsk Time", |
| "GMT+04:00"}, |
| {"Europe/Ulyanovsk", Locale.FRANCE, "Oulianovsk (heure standard)", |
| "UTC+04:00", |
| "Oulianovsk (heure d\u2019\u00e9t\u00e9)", |
| "UTC+04:00", |
| "heure : Oulianovsk", |
| "UTC+04:00"}, |
| {"Pacific/Bougainville", Locale.US, "Bougainville Standard Time", |
| "GMT+11:00", |
| "Bougainville Daylight Time", |
| "GMT+11:00", |
| "Bougainville Time", |
| "GMT+11:00"}, |
| {"Pacific/Bougainville", Locale.FRANCE, "Bougainville (heure standard)", |
| "UTC+11:00", |
| "Bougainville (heure d\u2019\u00e9t\u00e9)", |
| "UTC+11:00", |
| "heure : Bougainville", |
| "UTC+11:00"}, |
| {"Europe/Istanbul", Locale.US, "Istanbul Standard Time", |
| "GMT+03:00", |
| "Istanbul Daylight Time", |
| "GMT+03:00", |
| "Istanbul Time", |
| "GMT+03:00"}, |
| {"Europe/Istanbul", Locale.FRANCE, "Istanbul (heure standard)", |
| "UTC+03:00", |
| "Istanbul (heure d\u2019\u00e9t\u00e9)", |
| "UTC+03:00", |
| "heure : Istanbul", |
| "UTC+03:00"}, |
| {"Asia/Istanbul", Locale.US, "Istanbul Standard Time", |
| "GMT+03:00", |
| "Istanbul Daylight Time", |
| "GMT+03:00", |
| "Istanbul Time", |
| "GMT+03:00"}, |
| {"Asia/Istanbul", Locale.FRANCE, "Istanbul (heure standard)", |
| "UTC+03:00", |
| "Istanbul (heure d\u2019\u00e9t\u00e9)", |
| "UTC+03:00", |
| "heure : Istanbul", |
| "UTC+03:00"}, |
| {"Turkey", Locale.US, "Istanbul Standard Time", |
| "GMT+03:00", |
| "Istanbul Daylight Time", |
| "GMT+03:00", |
| "Istanbul Time", |
| "GMT+03:00"}, |
| {"Turkey", Locale.FRANCE, "Istanbul (heure standard)", |
| "UTC+03:00", |
| "Istanbul (heure d\u2019\u00e9t\u00e9)", |
| "UTC+03:00", |
| "heure : Istanbul", |
| "UTC+03:00"}, |
| }; |
| } |
| |
| |
| @Test(dataProvider="noResourceTZs") |
| public void test_tzNames(String tzid, Locale locale, String lstd, String sstd, String ldst, String sdst, String lgen, String sgen) { |
| // Standard time |
| assertEquals(TimeZone.getTimeZone(tzid).getDisplayName(false, TimeZone.LONG, locale), lstd); |
| assertEquals(TimeZone.getTimeZone(tzid).getDisplayName(false, TimeZone.SHORT, locale), sstd); |
| |
| // daylight saving time |
| assertEquals(TimeZone.getTimeZone(tzid).getDisplayName(true, TimeZone.LONG, locale), ldst); |
| assertEquals(TimeZone.getTimeZone(tzid).getDisplayName(true, TimeZone.SHORT, locale), sdst); |
| |
| // generic name |
| assertEquals(ZoneId.of(tzid).getDisplayName(TextStyle.FULL, locale), lgen); |
| assertEquals(ZoneId.of(tzid).getDisplayName(TextStyle.SHORT, locale), sgen); |
| } |
| |
| // Make sure getZoneStrings() returns non-empty string array |
| @Test |
| public void test_getZoneStrings() { |
| assertFalse( |
| Arrays.stream(Locale.getAvailableLocales()) |
| .peek(l -> System.out.println("Locale: " + l)) |
| .map(l -> DateFormatSymbols.getInstance(l).getZoneStrings()) |
| .flatMap(zs -> Arrays.stream(zs)) |
| .peek(names -> System.out.println(" tz: " + names[0])) |
| .flatMap(names -> Arrays.stream(names)) |
| .filter(name -> Objects.isNull(name) || name.isEmpty()) |
| .findAny() |
| .isPresent(), |
| "getZoneStrings() returned array containing non-empty string element(s)"); |
| } |
| } |