Print this page
rev 5696 : 6336885: RFE: Locale Data Deployment Enhancements
4609153: Provide locale data for Indic locales
5104387: Support for gl_ES locale (galician language)
6337471: desktop/system locale preferences support
7056139: (cal) SPI support for locale-dependent Calendar parameters
7058206: Provide CalendarData SPI for week params and display field value names
7073852: Support multiple scripts for digits and decimal symbols per locale
7079560: [Fmt-Da] Context dependent month names support in SimpleDateFormat
7171324: getAvailableLocales() of locale sensitive services should return the actual availability of locales
7151414: (cal) Support calendar type identification
7168528: LocaleServiceProvider needs to be aware of Locale extensions
7171372: (cal) locale's default Calendar should be created if unknown calendar is specified
Summary: JEP 127: Improve Locale Data Packaging and Adopt Unicode CLDR Data (part 1 w/o packaging changes. by Naoto Sato and Masayoshi Okutsu)

Split Close
Expand all
Collapse all
          --- old/test/java/util/PluggableLocale/DateFormatProviderTest.java
          +++ new/test/java/util/PluggableLocale/DateFormatProviderTest.java
   1    1  /*
   2      - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
        2 + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
   3    3   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4    4   *
   5    5   * This code is free software; you can redistribute it and/or modify it
   6    6   * under the terms of the GNU General Public License version 2 only, as
   7    7   * published by the Free Software Foundation.
   8    8   *
   9    9   * This code is distributed in the hope that it will be useful, but WITHOUT
  10   10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11   11   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12   12   * version 2 for more details (a copy is included in the LICENSE file that
↓ open down ↓ 6 lines elided ↑ open up ↑
  19   19   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20   20   * or visit www.oracle.com if you need additional information or have any
  21   21   * questions.
  22   22   */
  23   23  /*
  24   24   *
  25   25   */
  26   26  
  27   27  import java.text.*;
  28   28  import java.util.*;
  29      -import sun.util.*;
       29 +import sun.util.locale.provider.*;
  30   30  import sun.util.resources.*;
  31   31  
  32   32  public class DateFormatProviderTest extends ProviderTest {
  33   33  
  34   34      com.foo.DateFormatProviderImpl dfp = new com.foo.DateFormatProviderImpl();
  35   35      List<Locale> availloc = Arrays.asList(DateFormat.getAvailableLocales());
  36   36      List<Locale> providerloc = Arrays.asList(dfp.getAvailableLocales());
  37      -    List<Locale> jreloc = Arrays.asList(LocaleData.getAvailableLocales());
       37 +    List<Locale> jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getDateFormatProvider().getAvailableLocales());
  38   38  
  39   39      public static void main(String[] s) {
  40   40          new DateFormatProviderTest();
  41   41      }
  42   42  
  43   43      DateFormatProviderTest() {
  44      -        availableLocalesTest();
  45   44          objectValidityTest();
  46   45          extendedVariantTest();
  47   46          messageFormatTest();
  48   47      }
  49   48  
  50      -    void availableLocalesTest() {
  51      -        Set<Locale> localesFromAPI = new HashSet<Locale>(availloc);
  52      -        Set<Locale> localesExpected = new HashSet<Locale>(jreloc);
  53      -        localesExpected.addAll(providerloc);
  54      -        if (localesFromAPI.equals(localesExpected)) {
  55      -            System.out.println("availableLocalesTest passed.");
  56      -        } else {
  57      -            throw new RuntimeException("availableLocalesTest failed");
  58      -        }
  59      -    }
  60      -
  61   49      void objectValidityTest() {
  62   50  
  63   51          for (Locale target: availloc) {
  64   52              // Get the key for the date/time patterns which is
  65   53              // specific to each calendar system.
  66   54              Calendar cal = Calendar.getInstance(target);
  67      -            String key = "DateTimePatterns";
  68      -            if (!cal.getClass().getName().equals("java.util.GregorianCalendar")) {
  69      -                // e.g., "java.util.JapaneseImperialCalendar.DateTimePatterns"
  70      -                key = cal.getClass().getName() + "." + key;
       55 +            String dkey = "DatePatterns";
       56 +            String tkey = "TimePatterns";
       57 +            String dtkey = "DateTimePatterns";
       58 +            switch (cal.getCalendarType()) {
       59 +                case "java.util.JapaneseImperialCalendar":
       60 +                    dkey = "japanese"+ "." + dkey;
       61 +                    tkey = "japanese"+ "." + tkey;
       62 +                    dtkey = "japanese"+ "." + dtkey;
       63 +                    break;
       64 +                case "sun.util.BuddhistCalendar":
       65 +                    dkey = "buddhist"+ "." + dkey;
       66 +                    tkey = "buddhist"+ "." + tkey;
       67 +                    dtkey = "buddhist"+ "." + dtkey;
       68 +                    break;
       69 +                case "java.util.GregorianCalendar":
       70 +                default:
       71 +                    break;
  71   72              }
  72   73              // pure JRE implementation
  73      -            ResourceBundle rb = LocaleData.getDateFormatData(target);
  74      -            boolean jreSupportsLocale = jreloc.contains(target);
       74 +            ResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getDateFormatData(target);
       75 +            boolean jreSupportsLocale = jreimplloc.contains(target);
  75   76  
  76   77              // JRE string arrays
       78 +            String[] jreDatePatterns = null;
       79 +            String[] jreTimePatterns = null;
  77   80              String[] jreDateTimePatterns = null;
  78   81              if (jreSupportsLocale) {
  79   82                  try {
  80      -                    jreDateTimePatterns = (String[])rb.getObject(key);
       83 +                    jreDatePatterns = (String[])rb.getObject(dkey);
       84 +                    jreTimePatterns = (String[])rb.getObject(tkey);
       85 +                    jreDateTimePatterns = (String[])rb.getObject(dtkey);
  81   86                  } catch (MissingResourceException mre) {}
  82   87              }
  83   88  
  84   89              for (int style = DateFormat.FULL; style <= DateFormat.SHORT; style ++) {
  85   90                  // result object
  86   91                  DateFormat result = DateFormat.getDateTimeInstance(style, style, target);
  87   92  
  88   93                  // provider's object (if any)
  89   94                  DateFormat providersResult = null;
  90   95                  if (providerloc.contains(target)) {
  91   96                      providersResult = dfp.getDateTimeInstance(style, style, target);
  92   97                  }
  93   98  
  94   99                  // JRE's object (if any)
  95  100                  DateFormat jresResult = null;
  96  101                  if (jreSupportsLocale) {
  97      -                    Object[] dateTimeArgs = {jreDateTimePatterns[style],
  98      -                                             jreDateTimePatterns[style + 4]};
  99      -                    String pattern = MessageFormat.format(jreDateTimePatterns[8], dateTimeArgs);
      102 +                    Object[] dateTimeArgs = {jreTimePatterns[style],
      103 +                                             jreDatePatterns[style]};
      104 +                    String pattern = MessageFormat.format(jreDateTimePatterns[0], dateTimeArgs);
 100  105                      jresResult = new SimpleDateFormat(pattern, target);
 101  106                  }
 102  107  
 103  108                  checkValidity(target, jresResult, providersResult, result, jreSupportsLocale);
 104  109              }
 105  110          }
 106  111      }
 107  112  
 108  113      // Check that fallback correctly occurs with locales with variant including '_'s
 109  114      // This test assumes that the provider supports the ja_JP_osaka locale, and JRE does not.
↓ open down ↓ 57 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX