jdk/test/java/util/Calendar/SupplementalJapaneseEraTest.java
changeset 25966 71ee1f15845e
child 42696 a0df1f76b88e
equal deleted inserted replaced
25851:cd6f4557e7fe 25966:71ee1f15845e
       
     1 /*
       
     2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 
       
    24 import java.text.SimpleDateFormat;
       
    25 import java.time.chrono.JapaneseDate;
       
    26 import java.util.Calendar;
       
    27 import java.util.Date;
       
    28 import java.util.GregorianCalendar;
       
    29 import static java.util.GregorianCalendar.*;
       
    30 import java.util.Locale;
       
    31 import java.util.TimeZone;
       
    32 
       
    33 /*
       
    34  * Usage:
       
    35  *   java SupplementalJapaneseEraTest <flag>
       
    36  *    <flag>
       
    37  *      -s   prints start time for a test era
       
    38  *      -e   prints the English name of the last predefined era
       
    39  *
       
    40  *   java -Djdk.calendar.japanese.supplemental.era=... SupplementalJapaneseEraTest <flag>
       
    41  *      -t   executes tests with a valid property value
       
    42  *      -b <eraname>
       
    43  *           executes tests with an invalid property value
       
    44  *           <eraname> must be the output with -e
       
    45  */
       
    46 
       
    47 public class SupplementalJapaneseEraTest {
       
    48     private static final Locale WAREKI_LOCALE = Locale.forLanguageTag("ja-JP-u-ca-japanese");
       
    49     private static final String NEW_ERA_NAME = "NewEra";
       
    50     private static final String NEW_ERA_ABBR = "N.E.";
       
    51     private static int errors = 0;
       
    52 
       
    53     public static void main(String[] args) {
       
    54         // args[0] is a flag.
       
    55         switch (args[0]) {
       
    56         case "-s":
       
    57             // print the start time of the new era for testing
       
    58             Calendar cal = new Calendar.Builder()
       
    59                 .setCalendarType("japanese")
       
    60                 .setTimeZone(TimeZone.getTimeZone("GMT"))
       
    61                 .setDate(200, FEBRUARY, 11)
       
    62                 .build();
       
    63             System.out.println(cal.getTimeInMillis());
       
    64             break;
       
    65 
       
    66         case "-e":
       
    67             // print the current era name in English
       
    68             Calendar jcal = new Calendar.Builder()
       
    69                 .setCalendarType("japanese")
       
    70                 .setFields(YEAR, 1, DAY_OF_YEAR, 1)
       
    71                 .build();
       
    72             System.out.println(jcal.getDisplayName(ERA, LONG, Locale.US));
       
    73             break;
       
    74 
       
    75         case "-t":
       
    76             // test with a valid property value
       
    77             testProperty();
       
    78             break;
       
    79 
       
    80         case "-b":
       
    81             // test with an invalid property value
       
    82             // args[1] is the current era name given by -e.
       
    83             testValidation(args[1].replace("\r", "")); // remove any CR for Cygwin
       
    84             break;
       
    85         }
       
    86         if (errors != 0) {
       
    87             throw new RuntimeException("test failed");
       
    88         }
       
    89     }
       
    90 
       
    91     private static void testProperty() {
       
    92         Calendar jcal = new Calendar.Builder()
       
    93             .setCalendarType("japanese")
       
    94             .setFields(YEAR, 1, DAY_OF_YEAR, 1)
       
    95             .build();
       
    96         Date firstDayOfEra = jcal.getTime();
       
    97 
       
    98         jcal.set(ERA, jcal.get(ERA) - 1); // previous era
       
    99         jcal.set(YEAR, 1);
       
   100         jcal.set(DAY_OF_YEAR, 1);
       
   101         Calendar cal = new GregorianCalendar();
       
   102         cal.setTimeInMillis(jcal.getTimeInMillis());
       
   103         cal.add(YEAR, 199);
       
   104         int year = cal.get(YEAR);
       
   105 
       
   106         SimpleDateFormat sdf;
       
   107         String expected, got;
       
   108 
       
   109         // test long era name
       
   110         sdf = new SimpleDateFormat("GGGG y-MM-dd", WAREKI_LOCALE);
       
   111         got = sdf.format(firstDayOfEra);
       
   112         expected = NEW_ERA_NAME + " 1-02-11";
       
   113         if (!expected.equals(got)) {
       
   114             System.err.printf("GGGG y-MM-dd: got=\"%s\", expected=\"%s\"%n", got, expected);
       
   115             errors++;
       
   116         }
       
   117 
       
   118         // test era abbreviation
       
   119         sdf = new SimpleDateFormat("G y-MM-dd", WAREKI_LOCALE);
       
   120         got = sdf.format(firstDayOfEra);
       
   121         expected = NEW_ERA_ABBR+" 1-02-11";
       
   122         if (!expected.equals(got)) {
       
   123             System.err.printf("GGGG y-MM-dd: got=\"%s\", expected=\"%s\"%n", got, expected);
       
   124             errors++;
       
   125         }
       
   126 
       
   127         // confirm the gregorian year
       
   128         sdf = new SimpleDateFormat("y", Locale.US);
       
   129         int y = Integer.parseInt(sdf.format(firstDayOfEra));
       
   130         if (y != year) {
       
   131             System.err.printf("Gregorian year: got=%d, expected=%d%n", y, year);
       
   132             errors++;
       
   133         }
       
   134 
       
   135         // test java.time.chrono.JapaneseEra
       
   136         JapaneseDate jdate = JapaneseDate.of(year, 2, 11);
       
   137         got = jdate.toString();
       
   138         expected = "Japanese " + NEW_ERA_NAME + " 1-02-11";
       
   139         if (!expected.equals(got)) {
       
   140             System.err.printf("JapaneseDate: got=\"%s\", expected=\"%s\"%n", got, expected);
       
   141             errors++;
       
   142         }
       
   143     }
       
   144 
       
   145     private static void testValidation(String eraName) {
       
   146         Calendar jcal = new Calendar.Builder()
       
   147             .setCalendarType("japanese")
       
   148             .setFields(YEAR, 1, DAY_OF_YEAR, 1)
       
   149             .build();
       
   150         if (!jcal.getDisplayName(ERA, LONG, Locale.US).equals(eraName)) {
       
   151             errors++;
       
   152             String prop = System.getProperty("jdk.calendar.japanese.supplemental.era");
       
   153             System.err.println("Era changed with invalid property: " + prop);
       
   154         }
       
   155     }
       
   156 }