1 /*
2  * Copyright (c) 2017, 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.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package test.java.time.chrono;
27 
28 import android.icu.util.VersionInfo;
29 import java.time.*;
30 import java.time.chrono.*;
31 import java.time.format.*;
32 import java.util.Locale;
33 
34 import org.testng.annotations.DataProvider;
35 import org.testng.annotations.Test;
36 import static org.testng.Assert.assertEquals;
37 
38 /**
39  * Tests Era.getDisplayName() correctly returns the name based on each
40  * chrono implementation.
41  * Note: The exact result may depend on locale data provider's implementation.
42  *
43  * @bug 8171049
44  */
45 @Test
46 public class TestEraDisplayName {
47     private static final Locale THAI = Locale.forLanguageTag("th-TH");
48     private static final Locale EGYPT = Locale.forLanguageTag("ar-EG");
49 
50     @DataProvider(name="eraDisplayName")
eraDisplayName()51     Object[][] eraDisplayName() {
52         return new Object[][] {
53             // Era, text style, displyay locale, expected name
54             // IsoEra
55             { IsoEra.BCE,   TextStyle.FULL,     Locale.US,      "Before Christ" },
56             { IsoEra.CE,    TextStyle.FULL,     Locale.US,      "Anno Domini" },
57             { IsoEra.BCE,   TextStyle.FULL,     Locale.JAPAN,   "\u7d00\u5143\u524d" },
58             { IsoEra.CE,    TextStyle.FULL,     Locale.JAPAN,   "\u897f\u66a6" },
59             { IsoEra.BCE,   TextStyle.SHORT,    Locale.US,      "BC" },
60             { IsoEra.CE,    TextStyle.SHORT,    Locale.US,      "AD" },
61             { IsoEra.BCE,   TextStyle.SHORT,    Locale.JAPAN,   "\u7d00\u5143\u524d" },
62             { IsoEra.CE,    TextStyle.SHORT,    Locale.JAPAN,   "\u897f\u66a6" },
63             { IsoEra.BCE,   TextStyle.NARROW,   Locale.US,      "B" },
64             { IsoEra.CE,    TextStyle.NARROW,   Locale.US,      "A" },
65             { IsoEra.BCE,   TextStyle.NARROW,   Locale.JAPAN,   "BC" },
66             { IsoEra.CE,    TextStyle.NARROW,   Locale.JAPAN,   "AD" },
67 
68             // JapaneseEra
69             { JapaneseEra.MEIJI,    TextStyle.FULL,     Locale.US,      "Meiji" },
70             // Android-changed: Android uses CLDR data.
71             // { JapaneseEra.TAISHO,   TextStyle.FULL,     Locale.US,      "Taisho" },
72             // { JapaneseEra.SHOWA,    TextStyle.FULL,     Locale.US,      "Showa" },
73             { JapaneseEra.TAISHO,   TextStyle.FULL,     Locale.US,      "Taishō" },
74             { JapaneseEra.SHOWA,    TextStyle.FULL,     Locale.US,      "Shōwa" },
75             { JapaneseEra.HEISEI,   TextStyle.FULL,     Locale.US,      "Heisei" },
76             { JapaneseEra.MEIJI,    TextStyle.FULL,     Locale.JAPAN,   "\u660e\u6cbb" },
77             { JapaneseEra.TAISHO,   TextStyle.FULL,     Locale.JAPAN,   "\u5927\u6b63" },
78             { JapaneseEra.SHOWA,    TextStyle.FULL,     Locale.JAPAN,   "\u662d\u548c" },
79             { JapaneseEra.HEISEI,   TextStyle.FULL,     Locale.JAPAN,   "\u5e73\u6210" },
80             { JapaneseEra.MEIJI,    TextStyle.SHORT,    Locale.US,      "Meiji" },
81             // Android-changed: Android uses CLDR data.
82             // { JapaneseEra.TAISHO,   TextStyle.SHORT,    Locale.US,      "Taisho" },
83             // { JapaneseEra.SHOWA,    TextStyle.SHORT,    Locale.US,      "Showa" },
84             { JapaneseEra.TAISHO,   TextStyle.SHORT,    Locale.US,      "Taishō" },
85             { JapaneseEra.SHOWA,    TextStyle.SHORT,    Locale.US,      "Shōwa" },
86             { JapaneseEra.HEISEI,   TextStyle.SHORT,    Locale.US,      "Heisei" },
87             { JapaneseEra.MEIJI,    TextStyle.SHORT,    Locale.JAPAN,   "\u660e\u6cbb" },
88             { JapaneseEra.TAISHO,   TextStyle.SHORT,    Locale.JAPAN,   "\u5927\u6b63" },
89             { JapaneseEra.SHOWA,    TextStyle.SHORT,    Locale.JAPAN,   "\u662d\u548c" },
90             { JapaneseEra.HEISEI,   TextStyle.SHORT,    Locale.JAPAN,   "\u5e73\u6210" },
91             { JapaneseEra.MEIJI,    TextStyle.NARROW,   Locale.US,      "M" },
92             { JapaneseEra.TAISHO,   TextStyle.NARROW,   Locale.US,      "T" },
93             { JapaneseEra.SHOWA,    TextStyle.NARROW,   Locale.US,      "S" },
94             { JapaneseEra.HEISEI,   TextStyle.NARROW,   Locale.US,      "H" },
95             { JapaneseEra.MEIJI,    TextStyle.NARROW,   Locale.JAPAN,   "M" },
96             { JapaneseEra.TAISHO,   TextStyle.NARROW,   Locale.JAPAN,   "T" },
97             { JapaneseEra.SHOWA,    TextStyle.NARROW,   Locale.JAPAN,   "S" },
98             { JapaneseEra.HEISEI,   TextStyle.NARROW,   Locale.JAPAN,   "H" },
99 
100             // ThaiBuddhistEra
101             // Android-changed: Android uses CLDR data.
102             // { ThaiBuddhistEra.BEFORE_BE,    TextStyle.FULL, Locale.US,      "BC" },
103             // { ThaiBuddhistEra.BE,           TextStyle.FULL, Locale.US,      "BE" },
104             // { ThaiBuddhistEra.BEFORE_BE,    TextStyle.FULL, THAI,           "BC" },
105             // { ThaiBuddhistEra.BE,           TextStyle.FULL, THAI,
106             //   "\u0e1e\u0e38\u0e17\u0e18\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a" },
107             // { ThaiBuddhistEra.BEFORE_BE,    TextStyle.SHORT, Locale.US,     "BC" },
108             // { ThaiBuddhistEra.BE,           TextStyle.SHORT, Locale.US,     "BE" },
109             // { ThaiBuddhistEra.BEFORE_BE,    TextStyle.SHORT, THAI,
110             //   "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a" +
111             //     "\u0e15\u0e4c\u0e01\u0e32\u0e25\u0e17\u0e35\u0e48" },
112             // { ThaiBuddhistEra.BE,           TextStyle.SHORT, THAI,  "\u0e1e.\u0e28." },
113             // { ThaiBuddhistEra.BEFORE_BE,    TextStyle.NARROW, Locale.US,    "BC" },
114             // { ThaiBuddhistEra.BE,           TextStyle.NARROW, Locale.US,    "BE" },
115             // { ThaiBuddhistEra.BEFORE_BE,    TextStyle.NARROW, THAI,         "BC" },
116             // { ThaiBuddhistEra.BE,           TextStyle.NARROW, THAI,         "\u0e1e.\u0e28." },
117             { ThaiBuddhistEra.BEFORE_BE,    TextStyle.FULL, Locale.US,      "0" },
118             { ThaiBuddhistEra.BE,           TextStyle.FULL, Locale.US,      "BE" },
119             { ThaiBuddhistEra.BEFORE_BE,    TextStyle.FULL, THAI,           "0" },
120             { ThaiBuddhistEra.BE,           TextStyle.FULL, THAI,
121                 "\u0e1e\u0e38\u0e17\u0e18\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a" },
122             { ThaiBuddhistEra.BEFORE_BE,    TextStyle.SHORT, Locale.US,     "0" },
123             { ThaiBuddhistEra.BE,           TextStyle.SHORT, Locale.US,     "BE" },
124             { ThaiBuddhistEra.BEFORE_BE,    TextStyle.SHORT, THAI,          "0" },
125             { ThaiBuddhistEra.BE,           TextStyle.SHORT, THAI,  "\u0e1e.\u0e28." },
126             { ThaiBuddhistEra.BEFORE_BE,    TextStyle.NARROW, Locale.US,    "0" },
127             { ThaiBuddhistEra.BE,           TextStyle.NARROW, Locale.US,    "BE" },
128             { ThaiBuddhistEra.BEFORE_BE,    TextStyle.NARROW, THAI,         "0" },
129             { ThaiBuddhistEra.BE,           TextStyle.NARROW, THAI,         "\u0e1e.\u0e28." },
130 
131             // MinguoEra
132             // Android-changed: Android uses CLDR data.
133             // { MinguoEra.BEFORE_ROC, TextStyle.FULL,     Locale.US,      "Before R.O.C." },
134             // { MinguoEra.ROC,        TextStyle.FULL,     Locale.US,      "Minguo" },
135             // { MinguoEra.BEFORE_ROC, TextStyle.FULL,     Locale.TAIWAN,  "\u6c11\u570b\u524d" },
136             // { MinguoEra.ROC,        TextStyle.FULL,     Locale.TAIWAN,  "\u6c11\u570b" },
137             // { MinguoEra.BEFORE_ROC, TextStyle.SHORT,    Locale.US,      "Before R.O.C." },
138             // { MinguoEra.ROC,        TextStyle.SHORT,    Locale.US,      "Minguo" },
139             // { MinguoEra.BEFORE_ROC, TextStyle.SHORT,    Locale.TAIWAN,  "\u6c11\u570b\u524d" },
140             // { MinguoEra.ROC,        TextStyle.SHORT,    Locale.TAIWAN,  "\u6c11\u570b" },
141             // { MinguoEra.BEFORE_ROC, TextStyle.NARROW,   Locale.US,      "Before R.O.C." },
142             // { MinguoEra.ROC,        TextStyle.NARROW,   Locale.US,      "Minguo" },
143             // { MinguoEra.BEFORE_ROC, TextStyle.NARROW,   Locale.TAIWAN,  "\u6c11\u570b\u524d" },
144             // { MinguoEra.ROC,        TextStyle.NARROW,   Locale.TAIWAN,  "\u6c11\u570b" },
145             { MinguoEra.BEFORE_ROC, TextStyle.FULL,     Locale.US,      "B.R.O.C." },
146             { MinguoEra.ROC,        TextStyle.FULL,     Locale.US,      "Minguo" },
147             { MinguoEra.BEFORE_ROC, TextStyle.FULL,     Locale.TAIWAN,  "\u6c11\u570b\u524d" },
148             { MinguoEra.ROC,        TextStyle.FULL,     Locale.TAIWAN,  "\u6c11\u570b" },
149             { MinguoEra.BEFORE_ROC, TextStyle.SHORT,    Locale.US,      "B.R.O.C." },
150             { MinguoEra.ROC,        TextStyle.SHORT,    Locale.US,      "Minguo" },
151             { MinguoEra.BEFORE_ROC, TextStyle.SHORT,    Locale.TAIWAN,  "\u6c11\u570b\u524d" },
152             { MinguoEra.ROC,        TextStyle.SHORT,    Locale.TAIWAN,  "\u6c11\u570b" },
153             { MinguoEra.BEFORE_ROC, TextStyle.NARROW,   Locale.US,      "B.R.O.C." },
154             { MinguoEra.ROC,        TextStyle.NARROW,   Locale.US,      "Minguo" },
155             { MinguoEra.BEFORE_ROC, TextStyle.NARROW,   Locale.TAIWAN,  "\u6c11\u570b\u524d" },
156             { MinguoEra.ROC,        TextStyle.NARROW,   Locale.TAIWAN,  "\u6c11\u570b" },
157 
158             // HijrahEra
159             { HijrahEra.AH, TextStyle.FULL,     Locale.US,  "AH" },
160             { HijrahEra.AH, TextStyle.FULL,     EGYPT,      "\u0647\u0640" },
161             { HijrahEra.AH, TextStyle.SHORT,    Locale.US,  "AH" },
162             { HijrahEra.AH, TextStyle.SHORT,    EGYPT,      "\u0647\u0640" },
163             { HijrahEra.AH, TextStyle.NARROW,   Locale.US,  "AH" },
164             { HijrahEra.AH, TextStyle.NARROW,   EGYPT,      "\u0647\u0640" },
165         };
166     }
167 
168     @Test(dataProvider="eraDisplayName")
test_eraDisplayName(Era era, TextStyle style, Locale locale, String expected)169     public void test_eraDisplayName(Era era, TextStyle style, Locale locale, String expected) {
170         // Android-added: The ICU data is different before ICU version 70. http://b/229960530
171         if (VersionInfo.ICU_VERSION.getMajor() < 70) {
172             return;
173         }
174         assertEquals(era.getDisplayName(style, locale), expected);
175     }
176 }
177