< prev index next >

test/jdk/java/util/Locale/bcp47u/JavaTimeTests.java

Print this page
rev 47925 : 8191349: Add a new method in j.t.f.DateTimeFormatter to reflect Unicode extensions
Reviewed-by:


  21  * questions.
  22  */
  23 
  24 /*
  25  *
  26  * @test
  27  * @bug 8176841
  28  * @summary Tests java.time classes deals with Unicode extensions
  29  *      correctly.
  30  * @modules jdk.localedata
  31  * @run testng/othervm -Djava.locale.providers=CLDR JavaTimeTests
  32  */
  33 
  34 import static org.testng.Assert.assertEquals;
  35 
  36 import java.time.DayOfWeek;
  37 import java.time.ZonedDateTime;
  38 import java.time.ZoneId;
  39 import java.time.chrono.Chronology;
  40 import java.time.chrono.HijrahChronology;

  41 import java.time.chrono.JapaneseChronology;
  42 import java.time.format.DateTimeFormatter;
  43 import java.time.format.DateTimeFormatterBuilder;
  44 import java.time.format.FormatStyle;


  45 import java.time.temporal.WeekFields;
  46 import java.util.Locale;
  47 import java.util.TimeZone;
  48 
  49 import org.testng.annotations.AfterTest;
  50 import org.testng.annotations.BeforeTest;
  51 import org.testng.annotations.DataProvider;
  52 import org.testng.annotations.Test;
  53 
  54 /**
  55  * Test JavaTime with BCP47 U extensions
  56  */
  57 @Test
  58 public class JavaTimeTests {
  59     private static TimeZone defaultTZ;
  60 
  61     private static final Chronology JAPANESE = JapaneseChronology.INSTANCE;
  62     private static final Chronology HIJRAH = HijrahChronology.INSTANCE;
  63 
  64     private static final ZoneId ASIATOKYO = ZoneId.of("Asia/Tokyo");


  76     private static final Locale FW_FRI = Locale.forLanguageTag("en-US-u-fw-fri");
  77     private static final Locale FW_SAT = Locale.forLanguageTag("en-US-u-fw-sat");
  78 
  79     private static final Locale RG_GB = Locale.forLanguageTag("en-US-u-rg-gbzzzz");
  80 
  81     private static final ZonedDateTime ZDT = ZonedDateTime.of(2017, 8, 10, 15, 15, 0, 0, AMLA);
  82 
  83     private static final String PATTERN = "GGGG MMMM-dd-uu HH:mm:ss zzzz";
  84 
  85     @BeforeTest
  86     public void beforeTest() {
  87         defaultTZ = TimeZone.getDefault();
  88         TimeZone.setDefault(TimeZone.getTimeZone(AMLA));
  89     }
  90 
  91     @AfterTest
  92     public void afterTest() {
  93         TimeZone.setDefault(defaultTZ);
  94     }
  95 
  96     @DataProvider(name="withLocale")
  97     Object[][] withLocale() {
  98         return new Object[][] {
  99             // Locale, Chrono override, Zone override, Expected Chrono, Expected Zone,
 100             // Expected formatted string
 101             {Locale.JAPAN, null, null, null, null,
 102             "2017\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 \u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593"
 103             },
 104             {Locale.JAPAN, JAPANESE, null, JAPANESE, null,
 105             "\u5e73\u621029\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 \u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593"
 106             },
 107             {Locale.JAPAN, JAPANESE, ASIATOKYO, JAPANESE, ASIATOKYO,
 108             "\u5e73\u621029\u5e748\u670811\u65e5\u91d1\u66dc\u65e5 7\u664215\u520600\u79d2 \u65e5\u672c\u6a19\u6e96\u6642"
 109             },
 110 
 111             {JCAL, null, null, JAPANESE, null,
 112             "Thursday, August 10, 29 Heisei at 3:15:00 PM Pacific Daylight Time"
 113             },
 114             {JCAL, HIJRAH, null, JAPANESE, null,
 115             "Thursday, August 10, 29 Heisei at 3:15:00 PM Pacific Daylight Time"
 116             },
 117             {HCAL, JAPANESE, null, HIJRAH, null,


 119             },
 120 
 121 
 122             {JPTYO, null, null, null, ASIATOKYO,
 123             "Friday, August 11, 2017 at 7:15:00 AM Japan Standard Time"
 124             },
 125             {JPTYO, null, AMLA, null, ASIATOKYO,
 126             "Friday, August 11, 2017 at 7:15:00 AM Japan Standard Time"
 127             },
 128             // invalid tz
 129             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null, null, null,
 130             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 131             },
 132             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, AMLA, null, AMLA,
 133             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 134             },
 135 
 136             {RG_GB, null, null, null, null,
 137             "Thursday, 10 August 2017 at 15:15:00 Pacific Daylight Time"
 138             },








































































 139         };
 140     }
 141 
 142     @DataProvider(name="firstDayOfWeek")
 143     Object[][] firstDayOfWeek () {
 144         return new Object[][] {
 145             // Locale, Expected DayOfWeek,
 146             {Locale.US, DayOfWeek.SUNDAY},
 147             {FW_SUN, DayOfWeek.SUNDAY},
 148             {FW_MON, DayOfWeek.MONDAY},
 149             {FW_TUE, DayOfWeek.TUESDAY},
 150             {FW_WED, DayOfWeek.WEDNESDAY},
 151             {FW_THU, DayOfWeek.THURSDAY},
 152             {FW_FRI, DayOfWeek.FRIDAY},
 153             {FW_SAT, DayOfWeek.SATURDAY},
 154 
 155             // invalid case
 156             {Locale.forLanguageTag("en-US-u-fw-xxx"), DayOfWeek.SUNDAY},
 157 
 158             // region override


 166         };
 167     }
 168 
 169     @DataProvider(name="minDaysInFirstWeek")
 170     Object[][] minDaysInFrstWeek () {
 171         return new Object[][] {
 172             // Locale, Expected minDay,
 173             {Locale.US, 1},
 174 
 175             // region override
 176             {RG_GB, 4},
 177             {Locale.forLanguageTag("zh-CN-u-rg-eszzzz"), 4},
 178         };
 179     }
 180 
 181     @DataProvider(name="ofPattern")
 182     Object[][] ofPattern() {
 183         return new Object[][] {
 184             // Locale, Expected Chrono, Expected Zone,
 185             // Expected formatted string
 186             {JCAL, JAPANESE, null,
 187             "Heisei August-10-17 15:15:00 Pacific Daylight Time"
 188             },
 189             {HCAL, HIJRAH, null,
 190             "AH Dhu\u02bbl-Qi\u02bbdah-18-38 15:15:00 Pacific Daylight Time"
 191             },
 192 
 193             {JPTYO, null, ASIATOKYO,
 194             "Anno Domini August-11-17 07:15:00 Japan Standard Time"
 195             },
 196             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null,
 197             "Anno Domini August-10-17 15:15:00 Pacific Daylight Time"
 198             },
 199 
 200             {RG_GB, null, null,
 201             "Anno Domini August-10-17 15:15:00 Pacific Daylight Time"
 202             },
 203 
 204         };
 205     }
 206 
















































































































































































































































































































































































































































































































 207     @Test(dataProvider="withLocale")
 208     public void test_withLocale(Locale locale, Chronology chrono, ZoneId zone,
 209                                 Chronology chronoExpected, ZoneId zoneExpected,
 210                                 String formatExpected) {
 211         DateTimeFormatter dtf =
 212             DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.FULL)
 213                 .withChronology(chrono).withZone(zone).withLocale(locale);
 214         assertEquals(dtf.getChronology(), chronoExpected);
 215         assertEquals(dtf.getZone(), zoneExpected);
 216         String formatted = dtf.format(ZDT);
 217         assertEquals(formatted, formatExpected);
 218         assertEquals(dtf.parse(formatted, ZonedDateTime::from),
 219             zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
 220     }
 221 
 222     @Test(dataProvider="firstDayOfWeek")
 223     public void test_firstDayOfWeek(Locale locale, DayOfWeek dowExpected) {
 224         DayOfWeek dow = WeekFields.of(locale).getFirstDayOfWeek();
 225         assertEquals(dow, dowExpected);
 226     }


 241         assertEquals(dtf.getZone(), zoneExpected);
 242         String formatted = dtf.format(ZDT);
 243         assertEquals(formatted, formatExpected);
 244         assertEquals(dtf.parse(formatted, ZonedDateTime::from),
 245             zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
 246     }
 247 
 248     @Test(dataProvider="ofPattern")
 249     public void test_toFormatter(Locale locale,
 250                                 Chronology chronoExpected, ZoneId zoneExpected,
 251                                 String formatExpected) {
 252         DateTimeFormatter dtf =
 253             new DateTimeFormatterBuilder().appendPattern(PATTERN).toFormatter(locale);
 254         assertEquals(dtf.getChronology(), chronoExpected);
 255         assertEquals(dtf.getZone(), zoneExpected);
 256         String formatted = dtf.format(ZDT);
 257         assertEquals(formatted, formatExpected);
 258         assertEquals(dtf.parse(formatted, ZonedDateTime::from),
 259             zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
 260     }





















 261 }


  21  * questions.
  22  */
  23 
  24 /*
  25  *
  26  * @test
  27  * @bug 8176841
  28  * @summary Tests java.time classes deals with Unicode extensions
  29  *      correctly.
  30  * @modules jdk.localedata
  31  * @run testng/othervm -Djava.locale.providers=CLDR JavaTimeTests
  32  */
  33 
  34 import static org.testng.Assert.assertEquals;
  35 
  36 import java.time.DayOfWeek;
  37 import java.time.ZonedDateTime;
  38 import java.time.ZoneId;
  39 import java.time.chrono.Chronology;
  40 import java.time.chrono.HijrahChronology;
  41 import java.time.chrono.IsoChronology;
  42 import java.time.chrono.JapaneseChronology;
  43 import java.time.format.DateTimeFormatter;
  44 import java.time.format.DateTimeFormatterBuilder;
  45 import java.time.format.FormatStyle;
  46 import java.time.temporal.ChronoField;
  47 import java.time.temporal.TemporalField;
  48 import java.time.temporal.WeekFields;
  49 import java.util.Locale;
  50 import java.util.TimeZone;
  51 
  52 import org.testng.annotations.AfterTest;
  53 import org.testng.annotations.BeforeTest;
  54 import org.testng.annotations.DataProvider;
  55 import org.testng.annotations.Test;
  56 
  57 /**
  58  * Test JavaTime with BCP47 U extensions
  59  */
  60 @Test
  61 public class JavaTimeTests {
  62     private static TimeZone defaultTZ;
  63 
  64     private static final Chronology JAPANESE = JapaneseChronology.INSTANCE;
  65     private static final Chronology HIJRAH = HijrahChronology.INSTANCE;
  66 
  67     private static final ZoneId ASIATOKYO = ZoneId.of("Asia/Tokyo");


  79     private static final Locale FW_FRI = Locale.forLanguageTag("en-US-u-fw-fri");
  80     private static final Locale FW_SAT = Locale.forLanguageTag("en-US-u-fw-sat");
  81 
  82     private static final Locale RG_GB = Locale.forLanguageTag("en-US-u-rg-gbzzzz");
  83 
  84     private static final ZonedDateTime ZDT = ZonedDateTime.of(2017, 8, 10, 15, 15, 0, 0, AMLA);
  85 
  86     private static final String PATTERN = "GGGG MMMM-dd-uu HH:mm:ss zzzz";
  87 
  88     @BeforeTest
  89     public void beforeTest() {
  90         defaultTZ = TimeZone.getDefault();
  91         TimeZone.setDefault(TimeZone.getTimeZone(AMLA));
  92     }
  93 
  94     @AfterTest
  95     public void afterTest() {
  96         TimeZone.setDefault(defaultTZ);
  97     }
  98 
  99     @DataProvider(name="localizedBy")
 100     Object[][] localizedBy() {
 101         return new Object[][] {
 102             // Locale, Chrono override, Zone override, Expected Chrono, Expected Zone,
 103             // Expected formatted string
 104             {Locale.JAPAN, null, null, null, null,
 105             "2017\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 \u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593"
 106             },
 107             {Locale.JAPAN, JAPANESE, null, JAPANESE, null,
 108             "\u5e73\u621029\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 \u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593"
 109             },
 110             {Locale.JAPAN, JAPANESE, ASIATOKYO, JAPANESE, ASIATOKYO,
 111             "\u5e73\u621029\u5e748\u670811\u65e5\u91d1\u66dc\u65e5 7\u664215\u520600\u79d2 \u65e5\u672c\u6a19\u6e96\u6642"
 112             },
 113 
 114             {JCAL, null, null, JAPANESE, null,
 115             "Thursday, August 10, 29 Heisei at 3:15:00 PM Pacific Daylight Time"
 116             },
 117             {JCAL, HIJRAH, null, JAPANESE, null,
 118             "Thursday, August 10, 29 Heisei at 3:15:00 PM Pacific Daylight Time"
 119             },
 120             {HCAL, JAPANESE, null, HIJRAH, null,


 122             },
 123 
 124 
 125             {JPTYO, null, null, null, ASIATOKYO,
 126             "Friday, August 11, 2017 at 7:15:00 AM Japan Standard Time"
 127             },
 128             {JPTYO, null, AMLA, null, ASIATOKYO,
 129             "Friday, August 11, 2017 at 7:15:00 AM Japan Standard Time"
 130             },
 131             // invalid tz
 132             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null, null, null,
 133             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 134             },
 135             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, AMLA, null, AMLA,
 136             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 137             },
 138 
 139             {RG_GB, null, null, null, null,
 140             "Thursday, 10 August 2017 at 15:15:00 Pacific Daylight Time"
 141             },
 142 
 143             // DecimalStyle
 144             {Locale.forLanguageTag("en-US-u-nu-thai"), null, null, null, null,
 145             "Thursday, August \u0e51\u0e50, \u0e52\u0e50\u0e51\u0e57 at \u0e53:\u0e51\u0e55:\u0e50\u0e50 PM Pacific Daylight Time"
 146             },
 147             // DecimalStyle, "nu" vs "rg"
 148             {Locale.forLanguageTag("en-US-u-nu-thai-rg-uszzzz"), null, null, null, null,
 149             "Thursday, August \u0e51\u0e50, \u0e52\u0e50\u0e51\u0e57 at \u0e53:\u0e51\u0e55:\u0e50\u0e50 PM Pacific Daylight Time"
 150             },
 151             // DecimalStyle, invalid
 152             {Locale.forLanguageTag("en-US-u-nu-foo"), null, null, null, null,
 153             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 154             },
 155         };
 156     }
 157 
 158     @DataProvider(name="withLocale")
 159     Object[][] withLocale() {
 160         return new Object[][] {
 161             // Locale, Chrono override, Zone override, Expected Chrono, Expected Zone,
 162             // Expected formatted string
 163             {Locale.JAPAN, null, null, null, null,
 164             "2017\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 \u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593"
 165             },
 166             {Locale.JAPAN, JAPANESE, null, JAPANESE, null,
 167             "\u5e73\u621029\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 \u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593"
 168             },
 169             {Locale.JAPAN, JAPANESE, ASIATOKYO, JAPANESE, ASIATOKYO,
 170             "\u5e73\u621029\u5e748\u670811\u65e5\u91d1\u66dc\u65e5 7\u664215\u520600\u79d2 \u65e5\u672c\u6a19\u6e96\u6642"
 171             },
 172 
 173             {JCAL, null, null, null, null,
 174             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 175             },
 176             {JCAL, HIJRAH, null, HIJRAH, null,
 177             "Thursday, Dhu\u02bbl-Qi\u02bbdah 18, 1438 AH at 3:15:00 PM Pacific Daylight Time"
 178             },
 179             {HCAL, JAPANESE, null, JAPANESE, null,
 180             "Thursday, August 10, 29 Heisei at 3:15:00 PM Pacific Daylight Time"
 181             },
 182 
 183 
 184             {JPTYO, null, null, null, null,
 185             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 186             },
 187             {JPTYO, null, AMLA, null, AMLA,
 188             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 189             },
 190             // invalid tz
 191             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null, null, null,
 192             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 193             },
 194             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null, null, null,
 195             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 196             },
 197 
 198             {RG_GB, null, null, null, null,
 199             "Thursday, 10 August 2017 at 15:15:00 Pacific Daylight Time"
 200             },
 201 
 202             // DecimalStyle
 203             {Locale.forLanguageTag("en-US-u-nu-thai"), null, null, null, null,
 204             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 205             },
 206             // DecimalStyle, "nu" vs "rg"
 207             {Locale.forLanguageTag("en-US-u-nu-thai-rg-uszzzz"), null, null, null, null,
 208             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 209             },
 210             // DecimalStyle, invalid
 211             {Locale.forLanguageTag("en-US-u-nu-foo"), null, null, null, null,
 212             "Thursday, August 10, 2017 at 3:15:00 PM Pacific Daylight Time"
 213             },
 214         };
 215     }
 216 
 217     @DataProvider(name="firstDayOfWeek")
 218     Object[][] firstDayOfWeek () {
 219         return new Object[][] {
 220             // Locale, Expected DayOfWeek,
 221             {Locale.US, DayOfWeek.SUNDAY},
 222             {FW_SUN, DayOfWeek.SUNDAY},
 223             {FW_MON, DayOfWeek.MONDAY},
 224             {FW_TUE, DayOfWeek.TUESDAY},
 225             {FW_WED, DayOfWeek.WEDNESDAY},
 226             {FW_THU, DayOfWeek.THURSDAY},
 227             {FW_FRI, DayOfWeek.FRIDAY},
 228             {FW_SAT, DayOfWeek.SATURDAY},
 229 
 230             // invalid case
 231             {Locale.forLanguageTag("en-US-u-fw-xxx"), DayOfWeek.SUNDAY},
 232 
 233             // region override


 241         };
 242     }
 243 
 244     @DataProvider(name="minDaysInFirstWeek")
 245     Object[][] minDaysInFrstWeek () {
 246         return new Object[][] {
 247             // Locale, Expected minDay,
 248             {Locale.US, 1},
 249 
 250             // region override
 251             {RG_GB, 4},
 252             {Locale.forLanguageTag("zh-CN-u-rg-eszzzz"), 4},
 253         };
 254     }
 255 
 256     @DataProvider(name="ofPattern")
 257     Object[][] ofPattern() {
 258         return new Object[][] {
 259             // Locale, Expected Chrono, Expected Zone,
 260             // Expected formatted string
 261             {JCAL, null, null,
 262             "Anno Domini August-10-17 15:15:00 Pacific Daylight Time"
 263             },
 264             {HCAL, null, null,
 265             "Anno Domini August-10-17 15:15:00 Pacific Daylight Time"
 266             },
 267 
 268             {JPTYO, null, null,
 269             "Anno Domini August-10-17 15:15:00 Pacific Daylight Time"
 270             },
 271             {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null,
 272             "Anno Domini August-10-17 15:15:00 Pacific Daylight Time"
 273             },
 274 
 275             {RG_GB, null, null,
 276             "Anno Domini August-10-17 15:15:00 Pacific Daylight Time"
 277             },
 278 
 279         };
 280     }
 281 
 282     @DataProvider(name="shortTZID")
 283     Object[][] shortTZID() {
 284         return new Object[][] {
 285             // LDML's short ID, Expected Zone,
 286             {"adalv", "Europe/Andorra"},
 287             {"aedxb", "Asia/Dubai"},
 288             {"afkbl", "Asia/Kabul"},
 289             {"aganu", "America/Antigua"},
 290             {"aiaxa", "America/Anguilla"},
 291             {"altia", "Europe/Tirane"},
 292             {"amevn", "Asia/Yerevan"},
 293             {"ancur", "America/Curacao"},
 294             {"aolad", "Africa/Luanda"},
 295             {"aqcas", "Antarctica/Casey"},
 296             {"aqdav", "Antarctica/Davis"},
 297             {"aqddu", "Antarctica/DumontDUrville"},
 298             {"aqmaw", "Antarctica/Mawson"},
 299             {"aqmcm", "Antarctica/McMurdo"},
 300             {"aqplm", "Antarctica/Palmer"},
 301             {"aqrot", "Antarctica/Rothera"},
 302             {"aqsyw", "Antarctica/Syowa"},
 303             {"aqtrl", "Antarctica/Troll"},
 304             {"aqvos", "Antarctica/Vostok"},
 305             {"arbue", "America/Buenos_Aires"},
 306             {"arcor", "America/Cordoba"},
 307             {"arctc", "America/Catamarca"},
 308             {"arirj", "America/Argentina/La_Rioja"},
 309             {"arjuj", "America/Jujuy"},
 310             {"arluq", "America/Argentina/San_Luis"},
 311             {"armdz", "America/Mendoza"},
 312             {"arrgl", "America/Argentina/Rio_Gallegos"},
 313             {"arsla", "America/Argentina/Salta"},
 314             {"artuc", "America/Argentina/Tucuman"},
 315             {"aruaq", "America/Argentina/San_Juan"},
 316             {"arush", "America/Argentina/Ushuaia"},
 317             {"asppg", "Pacific/Pago_Pago"},
 318             {"atvie", "Europe/Vienna"},
 319             {"auadl", "Australia/Adelaide"},
 320             {"aubhq", "Australia/Broken_Hill"},
 321             {"aubne", "Australia/Brisbane"},
 322             {"audrw", "Australia/Darwin"},
 323             {"aueuc", "Australia/Eucla"},
 324             {"auhba", "Australia/Hobart"},
 325             {"aukns", "Australia/Currie"},
 326             {"auldc", "Australia/Lindeman"},
 327             {"auldh", "Australia/Lord_Howe"},
 328             {"aumel", "Australia/Melbourne"},
 329             {"aumqi", "Antarctica/Macquarie"},
 330             {"auper", "Australia/Perth"},
 331             {"ausyd", "Australia/Sydney"},
 332             {"awaua", "America/Aruba"},
 333             {"azbak", "Asia/Baku"},
 334             {"basjj", "Europe/Sarajevo"},
 335             {"bbbgi", "America/Barbados"},
 336             {"bddac", "Asia/Dhaka"},
 337             {"bebru", "Europe/Brussels"},
 338             {"bfoua", "Africa/Ouagadougou"},
 339             {"bgsof", "Europe/Sofia"},
 340             {"bhbah", "Asia/Bahrain"},
 341             {"bibjm", "Africa/Bujumbura"},
 342             {"bjptn", "Africa/Porto-Novo"},
 343             {"bmbda", "Atlantic/Bermuda"},
 344             {"bnbwn", "Asia/Brunei"},
 345             {"bolpb", "America/La_Paz"},
 346             {"bqkra", "America/Kralendijk"},
 347             {"braux", "America/Araguaina"},
 348             {"brbel", "America/Belem"},
 349             {"brbvb", "America/Boa_Vista"},
 350             {"brcgb", "America/Cuiaba"},
 351             {"brcgr", "America/Campo_Grande"},
 352             {"brern", "America/Eirunepe"},
 353             {"brfen", "America/Noronha"},
 354             {"brfor", "America/Fortaleza"},
 355             {"brmao", "America/Manaus"},
 356             {"brmcz", "America/Maceio"},
 357             {"brpvh", "America/Porto_Velho"},
 358             {"brrbr", "America/Rio_Branco"},
 359             {"brrec", "America/Recife"},
 360             {"brsao", "America/Sao_Paulo"},
 361             {"brssa", "America/Bahia"},
 362             {"brstm", "America/Santarem"},
 363             {"bsnas", "America/Nassau"},
 364             {"btthi", "Asia/Thimphu"},
 365             {"bwgbe", "Africa/Gaborone"},
 366             {"bymsq", "Europe/Minsk"},
 367             {"bzbze", "America/Belize"},
 368             {"cacfq", "America/Creston"},
 369             {"caedm", "America/Edmonton"},
 370             {"caffs", "America/Rainy_River"},
 371             {"cafne", "America/Fort_Nelson"},
 372             {"caglb", "America/Glace_Bay"},
 373             {"cagoo", "America/Goose_Bay"},
 374             {"cahal", "America/Halifax"},
 375             {"caiql", "America/Iqaluit"},
 376             {"camon", "America/Moncton"},
 377             {"capnt", "America/Pangnirtung"},
 378             {"careb", "America/Resolute"},
 379             {"careg", "America/Regina"},
 380             {"casjf", "America/St_Johns"},
 381             {"canpg", "America/Nipigon"},
 382             {"cathu", "America/Thunder_Bay"},
 383             {"cator", "America/Toronto"},
 384             {"cavan", "America/Vancouver"},
 385             {"cawnp", "America/Winnipeg"},
 386             {"caybx", "America/Blanc-Sablon"},
 387             {"caycb", "America/Cambridge_Bay"},
 388             {"cayda", "America/Dawson"},
 389             {"caydq", "America/Dawson_Creek"},
 390             {"cayek", "America/Rankin_Inlet"},
 391             {"cayev", "America/Inuvik"},
 392             {"cayxy", "America/Whitehorse"},
 393             {"cayyn", "America/Swift_Current"},
 394             {"cayzf", "America/Yellowknife"},
 395             {"cayzs", "America/Coral_Harbour"},
 396             {"cccck", "Indian/Cocos"},
 397             {"cdfbm", "Africa/Lubumbashi"},
 398             {"cdfih", "Africa/Kinshasa"},
 399             {"cfbgf", "Africa/Bangui"},
 400             {"cgbzv", "Africa/Brazzaville"},
 401             {"chzrh", "Europe/Zurich"},
 402             {"ciabj", "Africa/Abidjan"},
 403             {"ckrar", "Pacific/Rarotonga"},
 404             {"clipc", "Pacific/Easter"},
 405             {"clscl", "America/Santiago"},
 406             {"cmdla", "Africa/Douala"},
 407             {"cnsha", "Asia/Shanghai"},
 408             {"cnurc", "Asia/Urumqi"},
 409             {"cobog", "America/Bogota"},
 410             {"crsjo", "America/Costa_Rica"},
 411             {"cst6cdt", "CST6CDT"},
 412             {"cuhav", "America/Havana"},
 413             {"cvrai", "Atlantic/Cape_Verde"},
 414             {"cxxch", "Indian/Christmas"},
 415             {"cynic", "Asia/Nicosia"},
 416             {"czprg", "Europe/Prague"},
 417             {"deber", "Europe/Berlin"},
 418             {"debsngn", "Europe/Busingen"},
 419             {"djjib", "Africa/Djibouti"},
 420             {"dkcph", "Europe/Copenhagen"},
 421             {"dmdom", "America/Dominica"},
 422             {"dosdq", "America/Santo_Domingo"},
 423             {"dzalg", "Africa/Algiers"},
 424             {"ecgps", "Pacific/Galapagos"},
 425             {"ecgye", "America/Guayaquil"},
 426             {"eetll", "Europe/Tallinn"},
 427             {"egcai", "Africa/Cairo"},
 428             {"eheai", "Africa/El_Aaiun"},
 429             {"erasm", "Africa/Asmera"},
 430             {"esceu", "Africa/Ceuta"},
 431             {"eslpa", "Atlantic/Canary"},
 432             {"esmad", "Europe/Madrid"},
 433             {"est5edt", "EST5EDT"},
 434             {"etadd", "Africa/Addis_Ababa"},
 435             {"fihel", "Europe/Helsinki"},
 436             {"fimhq", "Europe/Mariehamn"},
 437             {"fjsuv", "Pacific/Fiji"},
 438             {"fkpsy", "Atlantic/Stanley"},
 439             {"fmksa", "Pacific/Kosrae"},
 440             {"fmpni", "Pacific/Ponape"},
 441             {"fmtkk", "Pacific/Truk"},
 442             {"fotho", "Atlantic/Faeroe"},
 443             {"frpar", "Europe/Paris"},
 444             {"galbv", "Africa/Libreville"},
 445             {"gaza", "Asia/Gaza"},
 446             {"gblon", "Europe/London"},
 447             {"gdgnd", "America/Grenada"},
 448             {"getbs", "Asia/Tbilisi"},
 449             {"gfcay", "America/Cayenne"},
 450             {"gggci", "Europe/Guernsey"},
 451             {"ghacc", "Africa/Accra"},
 452             {"gigib", "Europe/Gibraltar"},
 453             {"gldkshvn", "America/Danmarkshavn"},
 454             {"glgoh", "America/Godthab"},
 455             {"globy", "America/Scoresbysund"},
 456             {"glthu", "America/Thule"},
 457             {"gmbjl", "Africa/Banjul"},
 458             {"gncky", "Africa/Conakry"},
 459             {"gpbbr", "America/Guadeloupe"},
 460             {"gpmsb", "America/Marigot"},
 461             {"gpsbh", "America/St_Barthelemy"},
 462             {"gqssg", "Africa/Malabo"},
 463             {"grath", "Europe/Athens"},
 464             {"gsgrv", "Atlantic/South_Georgia"},
 465             {"gtgua", "America/Guatemala"},
 466             {"gugum", "Pacific/Guam"},
 467             {"gwoxb", "Africa/Bissau"},
 468             {"gygeo", "America/Guyana"},
 469             {"hebron", "Asia/Hebron"},
 470             {"hkhkg", "Asia/Hong_Kong"},
 471             {"hntgu", "America/Tegucigalpa"},
 472             {"hrzag", "Europe/Zagreb"},
 473             {"htpap", "America/Port-au-Prince"},
 474             {"hubud", "Europe/Budapest"},
 475             {"iddjj", "Asia/Jayapura"},
 476             {"idjkt", "Asia/Jakarta"},
 477             {"idmak", "Asia/Makassar"},
 478             {"idpnk", "Asia/Pontianak"},
 479             {"iedub", "Europe/Dublin"},
 480             {"imdgs", "Europe/Isle_of_Man"},
 481             {"inccu", "Asia/Calcutta"},
 482             {"iodga", "Indian/Chagos"},
 483             {"iqbgw", "Asia/Baghdad"},
 484             {"irthr", "Asia/Tehran"},
 485             {"isrey", "Atlantic/Reykjavik"},
 486             {"itrom", "Europe/Rome"},
 487             {"jeruslm", "Asia/Jerusalem"},
 488             {"jesth", "Europe/Jersey"},
 489             {"jmkin", "America/Jamaica"},
 490             {"joamm", "Asia/Amman"},
 491             {"jptyo", "Asia/Tokyo"},
 492             {"kenbo", "Africa/Nairobi"},
 493             {"kgfru", "Asia/Bishkek"},
 494             {"khpnh", "Asia/Phnom_Penh"},
 495             {"kicxi", "Pacific/Kiritimati"},
 496             {"kipho", "Pacific/Enderbury"},
 497             {"kitrw", "Pacific/Tarawa"},
 498             {"kmyva", "Indian/Comoro"},
 499             {"knbas", "America/St_Kitts"},
 500             {"kpfnj", "Asia/Pyongyang"},
 501             {"krsel", "Asia/Seoul"},
 502             {"kwkwi", "Asia/Kuwait"},
 503             {"kygec", "America/Cayman"},
 504             {"kzaau", "Asia/Aqtau"},
 505             {"kzakx", "Asia/Aqtobe"},
 506             {"kzala", "Asia/Almaty"},
 507             {"kzkzo", "Asia/Qyzylorda"},
 508             {"kzura", "Asia/Oral"},
 509             {"lavte", "Asia/Vientiane"},
 510             {"lbbey", "Asia/Beirut"},
 511             {"lccas", "America/St_Lucia"},
 512             {"livdz", "Europe/Vaduz"},
 513             {"lkcmb", "Asia/Colombo"},
 514             {"lrmlw", "Africa/Monrovia"},
 515             {"lsmsu", "Africa/Maseru"},
 516             {"ltvno", "Europe/Vilnius"},
 517             {"lulux", "Europe/Luxembourg"},
 518             {"lvrix", "Europe/Riga"},
 519             {"lytip", "Africa/Tripoli"},
 520             {"macas", "Africa/Casablanca"},
 521             {"mcmon", "Europe/Monaco"},
 522             {"mdkiv", "Europe/Chisinau"},
 523             {"metgd", "Europe/Podgorica"},
 524             {"mgtnr", "Indian/Antananarivo"},
 525             {"mhkwa", "Pacific/Kwajalein"},
 526             {"mhmaj", "Pacific/Majuro"},
 527             {"mkskp", "Europe/Skopje"},
 528             {"mlbko", "Africa/Bamako"},
 529             {"mmrgn", "Asia/Rangoon"},
 530             {"mncoq", "Asia/Choibalsan"},
 531             {"mnhvd", "Asia/Hovd"},
 532             {"mnuln", "Asia/Ulaanbaatar"},
 533             {"momfm", "Asia/Macau"},
 534             {"mpspn", "Pacific/Saipan"},
 535             {"mqfdf", "America/Martinique"},
 536             {"mrnkc", "Africa/Nouakchott"},
 537             {"msmni", "America/Montserrat"},
 538             {"mst7mdt", "MST7MDT"},
 539             {"mtmla", "Europe/Malta"},
 540             {"muplu", "Indian/Mauritius"},
 541             {"mvmle", "Indian/Maldives"},
 542             {"mwblz", "Africa/Blantyre"},
 543             {"mxchi", "America/Chihuahua"},
 544             {"mxcun", "America/Cancun"},
 545             {"mxhmo", "America/Hermosillo"},
 546             {"mxmam", "America/Matamoros"},
 547             {"mxmex", "America/Mexico_City"},
 548             {"mxmid", "America/Merida"},
 549             {"mxmty", "America/Monterrey"},
 550             {"mxmzt", "America/Mazatlan"},
 551             {"mxoji", "America/Ojinaga"},
 552             {"mxpvr", "America/Bahia_Banderas"},
 553             {"mxstis", "America/Santa_Isabel"},
 554             {"mxtij", "America/Tijuana"},
 555             {"mykch", "Asia/Kuching"},
 556             {"mykul", "Asia/Kuala_Lumpur"},
 557             {"mzmpm", "Africa/Maputo"},
 558             {"nawdh", "Africa/Windhoek"},
 559             {"ncnou", "Pacific/Noumea"},
 560             {"nenim", "Africa/Niamey"},
 561             {"nfnlk", "Pacific/Norfolk"},
 562             {"nglos", "Africa/Lagos"},
 563             {"nimga", "America/Managua"},
 564             {"nlams", "Europe/Amsterdam"},
 565             {"noosl", "Europe/Oslo"},
 566             {"npktm", "Asia/Katmandu"},
 567             {"nrinu", "Pacific/Nauru"},
 568             {"nuiue", "Pacific/Niue"},
 569             {"nzakl", "Pacific/Auckland"},
 570             {"nzcht", "Pacific/Chatham"},
 571             {"ommct", "Asia/Muscat"},
 572             {"papty", "America/Panama"},
 573             {"pelim", "America/Lima"},
 574             {"pfgmr", "Pacific/Gambier"},
 575             {"pfnhv", "Pacific/Marquesas"},
 576             {"pfppt", "Pacific/Tahiti"},
 577             {"pgpom", "Pacific/Port_Moresby"},
 578             {"pgraw", "Pacific/Bougainville"},
 579             {"phmnl", "Asia/Manila"},
 580             {"pkkhi", "Asia/Karachi"},
 581             {"plwaw", "Europe/Warsaw"},
 582             {"pmmqc", "America/Miquelon"},
 583             {"pnpcn", "Pacific/Pitcairn"},
 584             {"prsju", "America/Puerto_Rico"},
 585             {"pst8pdt", "PST8PDT"},
 586             {"ptfnc", "Atlantic/Madeira"},
 587             {"ptlis", "Europe/Lisbon"},
 588             {"ptpdl", "Atlantic/Azores"},
 589             {"pwror", "Pacific/Palau"},
 590             {"pyasu", "America/Asuncion"},
 591             {"qadoh", "Asia/Qatar"},
 592             {"rereu", "Indian/Reunion"},
 593             {"robuh", "Europe/Bucharest"},
 594             {"rsbeg", "Europe/Belgrade"},
 595             {"ruchita", "Asia/Chita"},
 596             {"rudyr", "Asia/Anadyr"},
 597             {"rugdx", "Asia/Magadan"},
 598             {"ruikt", "Asia/Irkutsk"},
 599             {"rukgd", "Europe/Kaliningrad"},
 600             {"rukhndg", "Asia/Khandyga"},
 601             {"rukra", "Asia/Krasnoyarsk"},
 602             {"rukuf", "Europe/Samara"},
 603             {"rumow", "Europe/Moscow"},
 604             {"runoz", "Asia/Novokuznetsk"},
 605             {"ruoms", "Asia/Omsk"},
 606             {"ruovb", "Asia/Novosibirsk"},
 607             {"rupkc", "Asia/Kamchatka"},
 608             {"rusred", "Asia/Srednekolymsk"},
 609             {"ruunera", "Asia/Ust-Nera"},
 610             {"ruuus", "Asia/Sakhalin"},
 611             {"ruvog", "Europe/Volgograd"},
 612             {"ruvvo", "Asia/Vladivostok"},
 613             {"ruyek", "Asia/Yekaterinburg"},
 614             {"ruyks", "Asia/Yakutsk"},
 615             {"rwkgl", "Africa/Kigali"},
 616             {"saruh", "Asia/Riyadh"},
 617             {"sbhir", "Pacific/Guadalcanal"},
 618             {"scmaw", "Indian/Mahe"},
 619             {"sdkrt", "Africa/Khartoum"},
 620             {"sesto", "Europe/Stockholm"},
 621             {"sgsin", "Asia/Singapore"},
 622             {"shshn", "Atlantic/St_Helena"},
 623             {"silju", "Europe/Ljubljana"},
 624             {"sjlyr", "Arctic/Longyearbyen"},
 625             {"skbts", "Europe/Bratislava"},
 626             {"slfna", "Africa/Freetown"},
 627             {"smsai", "Europe/San_Marino"},
 628             {"sndkr", "Africa/Dakar"},
 629             {"somgq", "Africa/Mogadishu"},
 630             {"srpbm", "America/Paramaribo"},
 631             {"ssjub", "Africa/Juba"},
 632             {"sttms", "Africa/Sao_Tome"},
 633             {"svsal", "America/El_Salvador"},
 634             {"sxphi", "America/Lower_Princes"},
 635             {"sydam", "Asia/Damascus"},
 636             {"szqmn", "Africa/Mbabane"},
 637             {"tcgdt", "America/Grand_Turk"},
 638             {"tdndj", "Africa/Ndjamena"},
 639             {"tfpfr", "Indian/Kerguelen"},
 640             {"tglfw", "Africa/Lome"},
 641             {"thbkk", "Asia/Bangkok"},
 642             {"tjdyu", "Asia/Dushanbe"},
 643             {"tkfko", "Pacific/Fakaofo"},
 644             {"tldil", "Asia/Dili"},
 645             {"tmasb", "Asia/Ashgabat"},
 646             {"tntun", "Africa/Tunis"},
 647             {"totbu", "Pacific/Tongatapu"},
 648             {"trist", "Europe/Istanbul"},
 649             {"ttpos", "America/Port_of_Spain"},
 650             {"tvfun", "Pacific/Funafuti"},
 651             {"twtpe", "Asia/Taipei"},
 652             {"tzdar", "Africa/Dar_es_Salaam"},
 653             {"uaiev", "Europe/Kiev"},
 654             {"uaozh", "Europe/Zaporozhye"},
 655             {"uasip", "Europe/Simferopol"},
 656             {"uauzh", "Europe/Uzhgorod"},
 657             {"ugkla", "Africa/Kampala"},
 658             {"umawk", "Pacific/Wake"},
 659             {"umjon", "Pacific/Johnston"},
 660             {"ummdy", "Pacific/Midway"},
 661 //            {"unk", "Etc/Unknown"},
 662             {"usadk", "America/Adak"},
 663             {"usaeg", "America/Indiana/Marengo"},
 664             {"usanc", "America/Anchorage"},
 665             {"usboi", "America/Boise"},
 666             {"uschi", "America/Chicago"},
 667             {"usden", "America/Denver"},
 668             {"usdet", "America/Detroit"},
 669             {"ushnl", "Pacific/Honolulu"},
 670             {"usind", "America/Indianapolis"},
 671             {"usinvev", "America/Indiana/Vevay"},
 672             {"usjnu", "America/Juneau"},
 673             {"usknx", "America/Indiana/Knox"},
 674             {"uslax", "America/Los_Angeles"},
 675             {"uslui", "America/Louisville"},
 676             {"usmnm", "America/Menominee"},
 677             {"usmtm", "America/Metlakatla"},
 678             {"usmoc", "America/Kentucky/Monticello"},
 679             {"usndcnt", "America/North_Dakota/Center"},
 680             {"usndnsl", "America/North_Dakota/New_Salem"},
 681             {"usnyc", "America/New_York"},
 682             {"usoea", "America/Indiana/Vincennes"},
 683             {"usome", "America/Nome"},
 684             {"usphx", "America/Phoenix"},
 685             {"ussit", "America/Sitka"},
 686             {"ustel", "America/Indiana/Tell_City"},
 687             {"uswlz", "America/Indiana/Winamac"},
 688             {"uswsq", "America/Indiana/Petersburg"},
 689             {"usxul", "America/North_Dakota/Beulah"},
 690             {"usyak", "America/Yakutat"},
 691             {"utc", "Etc/GMT"},
 692             {"utce01", "Etc/GMT-1"},
 693             {"utce02", "Etc/GMT-2"},
 694             {"utce03", "Etc/GMT-3"},
 695             {"utce04", "Etc/GMT-4"},
 696             {"utce05", "Etc/GMT-5"},
 697             {"utce06", "Etc/GMT-6"},
 698             {"utce07", "Etc/GMT-7"},
 699             {"utce08", "Etc/GMT-8"},
 700             {"utce09", "Etc/GMT-9"},
 701             {"utce10", "Etc/GMT-10"},
 702             {"utce11", "Etc/GMT-11"},
 703             {"utce12", "Etc/GMT-12"},
 704             {"utce13", "Etc/GMT-13"},
 705             {"utce14", "Etc/GMT-14"},
 706             {"utcw01", "Etc/GMT+1"},
 707             {"utcw02", "Etc/GMT+2"},
 708             {"utcw03", "Etc/GMT+3"},
 709             {"utcw04", "Etc/GMT+4"},
 710             {"utcw05", "Etc/GMT+5"},
 711             {"utcw06", "Etc/GMT+6"},
 712             {"utcw07", "Etc/GMT+7"},
 713             {"utcw08", "Etc/GMT+8"},
 714             {"utcw09", "Etc/GMT+9"},
 715             {"utcw10", "Etc/GMT+10"},
 716             {"utcw11", "Etc/GMT+11"},
 717             {"utcw12", "Etc/GMT+12"},
 718             {"uymvd", "America/Montevideo"},
 719             {"uzskd", "Asia/Samarkand"},
 720             {"uztas", "Asia/Tashkent"},
 721             {"vavat", "Europe/Vatican"},
 722             {"vcsvd", "America/St_Vincent"},
 723             {"veccs", "America/Caracas"},
 724             {"vgtov", "America/Tortola"},
 725             {"vistt", "America/St_Thomas"},
 726             {"vnsgn", "Asia/Saigon"},
 727             {"vuvli", "Pacific/Efate"},
 728             {"wfmau", "Pacific/Wallis"},
 729             {"wsapw", "Pacific/Apia"},
 730             {"yeade", "Asia/Aden"},
 731             {"ytmam", "Indian/Mayotte"},
 732             {"zajnb", "Africa/Johannesburg"},
 733             {"zmlun", "Africa/Lusaka"},
 734             {"zwhre", "Africa/Harare"},
 735 
 736         };
 737     }
 738 
 739     @DataProvider(name="getLocalizedDateTimePattern")
 740     Object[][] getLocalizedDateTimePattern() {
 741         return new Object[][] {
 742             // Locale, Expected pattern,
 743             {Locale.US, FormatStyle.FULL, "EEEE, MMMM d, y 'at' h:mm:ss a zzzz"},
 744             {Locale.US, FormatStyle.LONG, "MMMM d, y 'at' h:mm:ss a z"},
 745             {Locale.US, FormatStyle.MEDIUM, "MMM d, y, h:mm:ss a"},
 746             {Locale.US, FormatStyle.SHORT, "M/d/yy, h:mm a"},
 747             {RG_GB, FormatStyle.FULL, "EEEE, d MMMM y 'at' HH:mm:ss zzzz"},
 748             {RG_GB, FormatStyle.LONG, "d MMMM y 'at' HH:mm:ss z"},
 749             {RG_GB, FormatStyle.MEDIUM, "d MMM y, HH:mm:ss"},
 750             {RG_GB, FormatStyle.SHORT, "dd/MM/y, HH:mm"},
 751         };
 752     }
 753 
 754     @DataProvider(name="getDisplayName")
 755     Object[][] getDisplayName() {
 756         return new Object[][] {
 757             // Locale, field, Expected name,
 758             {Locale.US, ChronoField.AMPM_OF_DAY, "AM/PM"},
 759             {RG_GB, ChronoField.AMPM_OF_DAY, "am/pm"},
 760         };
 761     }
 762 
 763     @Test(dataProvider="localizedBy")
 764     public void test_localizedBy(Locale locale, Chronology chrono, ZoneId zone,
 765                                 Chronology chronoExpected, ZoneId zoneExpected,
 766                                 String formatExpected) {
 767         DateTimeFormatter dtf =
 768             DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.FULL)
 769                 .withChronology(chrono).withZone(zone).localizedBy(locale);
 770         assertEquals(dtf.getChronology(), chronoExpected);
 771         assertEquals(dtf.getZone(), zoneExpected);
 772         String formatted = dtf.format(ZDT);
 773         assertEquals(formatted, formatExpected);
 774         assertEquals(dtf.parse(formatted, ZonedDateTime::from),
 775             zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
 776     }
 777 
 778     @Test(dataProvider="withLocale")
 779     public void test_withLocale(Locale locale, Chronology chrono, ZoneId zone,
 780                                 Chronology chronoExpected, ZoneId zoneExpected,
 781                                 String formatExpected) {
 782         DateTimeFormatter dtf =
 783             DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.FULL)
 784                 .withChronology(chrono).withZone(zone).withLocale(locale);
 785         assertEquals(dtf.getChronology(), chronoExpected);
 786         assertEquals(dtf.getZone(), zoneExpected);
 787         String formatted = dtf.format(ZDT);
 788         assertEquals(formatted, formatExpected);
 789         assertEquals(dtf.parse(formatted, ZonedDateTime::from),
 790             zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
 791     }
 792 
 793     @Test(dataProvider="firstDayOfWeek")
 794     public void test_firstDayOfWeek(Locale locale, DayOfWeek dowExpected) {
 795         DayOfWeek dow = WeekFields.of(locale).getFirstDayOfWeek();
 796         assertEquals(dow, dowExpected);
 797     }


 812         assertEquals(dtf.getZone(), zoneExpected);
 813         String formatted = dtf.format(ZDT);
 814         assertEquals(formatted, formatExpected);
 815         assertEquals(dtf.parse(formatted, ZonedDateTime::from),
 816             zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
 817     }
 818 
 819     @Test(dataProvider="ofPattern")
 820     public void test_toFormatter(Locale locale,
 821                                 Chronology chronoExpected, ZoneId zoneExpected,
 822                                 String formatExpected) {
 823         DateTimeFormatter dtf =
 824             new DateTimeFormatterBuilder().appendPattern(PATTERN).toFormatter(locale);
 825         assertEquals(dtf.getChronology(), chronoExpected);
 826         assertEquals(dtf.getZone(), zoneExpected);
 827         String formatted = dtf.format(ZDT);
 828         assertEquals(formatted, formatExpected);
 829         assertEquals(dtf.parse(formatted, ZonedDateTime::from),
 830             zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
 831     }
 832 
 833     @Test(dataProvider="shortTZID")
 834     public void test_shortTZID(String shortID, String expectedZone) {
 835         Locale l = Locale.forLanguageTag("en-US-u-tz-" + shortID);
 836         DateTimeFormatter dtf =
 837             DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.FULL)
 838                 .localizedBy(l);
 839         assertEquals(dtf.getZone(), ZoneId.of(expectedZone));
 840     }
 841 
 842     @Test(dataProvider="getLocalizedDateTimePattern")
 843     public void test_getLocalizedDateTimePattern(Locale l, FormatStyle s, String expectedPattern) {
 844         DateTimeFormatterBuilder dtfb = new DateTimeFormatterBuilder();
 845         assertEquals(dtfb.getLocalizedDateTimePattern(s, s, IsoChronology.INSTANCE, l),
 846             expectedPattern);
 847     }
 848 
 849     @Test(dataProvider="getDisplayName")
 850     public void test_getDisplayName(Locale l, TemporalField f, String expectedName) {
 851         assertEquals(f.getDisplayName(l), expectedName);
 852     }
 853 }
< prev index next >