xref: /aosp_15_r20/art/test/092-locale/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2012 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker import java.text.DateFormat;
18*795d594fSAndroid Build Coastguard Worker import java.text.DateFormatSymbols;
19*795d594fSAndroid Build Coastguard Worker import java.text.Normalizer;
20*795d594fSAndroid Build Coastguard Worker import java.util.Arrays;
21*795d594fSAndroid Build Coastguard Worker import java.util.Calendar;
22*795d594fSAndroid Build Coastguard Worker import java.util.Currency;
23*795d594fSAndroid Build Coastguard Worker import java.util.Date;
24*795d594fSAndroid Build Coastguard Worker import java.util.Locale;
25*795d594fSAndroid Build Coastguard Worker import java.util.MissingResourceException;
26*795d594fSAndroid Build Coastguard Worker import java.util.TimeZone;
27*795d594fSAndroid Build Coastguard Worker 
28*795d594fSAndroid Build Coastguard Worker /**
29*795d594fSAndroid Build Coastguard Worker  * Exercise some locale-table-driven stuff.
30*795d594fSAndroid Build Coastguard Worker  */
31*795d594fSAndroid Build Coastguard Worker public class Main {
32*795d594fSAndroid Build Coastguard Worker 
main(String[] args)33*795d594fSAndroid Build Coastguard Worker     public static void main(String[] args) {
34*795d594fSAndroid Build Coastguard Worker         try {
35*795d594fSAndroid Build Coastguard Worker             testCalendar();
36*795d594fSAndroid Build Coastguard Worker         } catch (Exception ex) {
37*795d594fSAndroid Build Coastguard Worker             ex.printStackTrace(System.out);
38*795d594fSAndroid Build Coastguard Worker         }
39*795d594fSAndroid Build Coastguard Worker 
40*795d594fSAndroid Build Coastguard Worker         try {
41*795d594fSAndroid Build Coastguard Worker             testDateFormatSymbols();
42*795d594fSAndroid Build Coastguard Worker         } catch (Exception ex) {
43*795d594fSAndroid Build Coastguard Worker             ex.printStackTrace(System.out);
44*795d594fSAndroid Build Coastguard Worker         }
45*795d594fSAndroid Build Coastguard Worker 
46*795d594fSAndroid Build Coastguard Worker         try {
47*795d594fSAndroid Build Coastguard Worker             testCurrency();
48*795d594fSAndroid Build Coastguard Worker         } catch (Exception ex) {
49*795d594fSAndroid Build Coastguard Worker             ex.printStackTrace(System.out);
50*795d594fSAndroid Build Coastguard Worker         }
51*795d594fSAndroid Build Coastguard Worker 
52*795d594fSAndroid Build Coastguard Worker         try {
53*795d594fSAndroid Build Coastguard Worker             testNormalizer();
54*795d594fSAndroid Build Coastguard Worker         } catch (Exception ex) {
55*795d594fSAndroid Build Coastguard Worker             ex.printStackTrace(System.out);
56*795d594fSAndroid Build Coastguard Worker         }
57*795d594fSAndroid Build Coastguard Worker 
58*795d594fSAndroid Build Coastguard Worker         try {
59*795d594fSAndroid Build Coastguard Worker             testIso3();
60*795d594fSAndroid Build Coastguard Worker         } catch (Exception ex) {
61*795d594fSAndroid Build Coastguard Worker             ex.printStackTrace(System.out);
62*795d594fSAndroid Build Coastguard Worker         }
63*795d594fSAndroid Build Coastguard Worker     }
64*795d594fSAndroid Build Coastguard Worker 
testCalendar()65*795d594fSAndroid Build Coastguard Worker     static void testCalendar() {
66*795d594fSAndroid Build Coastguard Worker         TimeZone tz = TimeZone.getTimeZone("GMT");
67*795d594fSAndroid Build Coastguard Worker 
68*795d594fSAndroid Build Coastguard Worker         Locale usa = new Locale("en", "US");
69*795d594fSAndroid Build Coastguard Worker         Calendar usaCal = Calendar.getInstance(tz, usa);
70*795d594fSAndroid Build Coastguard Worker         usaCal.clear();     // don't want current date/time
71*795d594fSAndroid Build Coastguard Worker         usaCal.set(2012, Calendar.JANUARY, 1);
72*795d594fSAndroid Build Coastguard Worker 
73*795d594fSAndroid Build Coastguard Worker         Date when = usaCal.getTime();
74*795d594fSAndroid Build Coastguard Worker         DateFormat fmt = DateFormat.getDateInstance(DateFormat.FULL, usa);
75*795d594fSAndroid Build Coastguard Worker         fmt.setTimeZone(tz);    // defaults to local TZ; force GMT
76*795d594fSAndroid Build Coastguard Worker         System.out.println("USA(" + fmt.getTimeZone().getID() + "): "
77*795d594fSAndroid Build Coastguard Worker             + fmt.format(when));
78*795d594fSAndroid Build Coastguard Worker 
79*795d594fSAndroid Build Coastguard Worker         System.out.println("USA: first="
80*795d594fSAndroid Build Coastguard Worker             + usaCal.getFirstDayOfWeek() + ", name="
81*795d594fSAndroid Build Coastguard Worker             + usaCal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, usa));
82*795d594fSAndroid Build Coastguard Worker 
83*795d594fSAndroid Build Coastguard Worker 
84*795d594fSAndroid Build Coastguard Worker         Locale france = new Locale("fr", "FR");
85*795d594fSAndroid Build Coastguard Worker         Calendar franceCal = Calendar.getInstance(tz, france);
86*795d594fSAndroid Build Coastguard Worker         franceCal.clear();
87*795d594fSAndroid Build Coastguard Worker         franceCal.set(2012, Calendar.JANUARY, 2);
88*795d594fSAndroid Build Coastguard Worker 
89*795d594fSAndroid Build Coastguard Worker         when = franceCal.getTime();
90*795d594fSAndroid Build Coastguard Worker         fmt = DateFormat.getDateInstance(DateFormat.FULL, usa);
91*795d594fSAndroid Build Coastguard Worker         fmt.setTimeZone(tz);    // defaults to local TZ; force GMT
92*795d594fSAndroid Build Coastguard Worker         System.out.println("France(" + fmt.getTimeZone().getID() + "): "
93*795d594fSAndroid Build Coastguard Worker             + fmt.format(when));
94*795d594fSAndroid Build Coastguard Worker 
95*795d594fSAndroid Build Coastguard Worker         System.out.println("France: first="
96*795d594fSAndroid Build Coastguard Worker             + franceCal.getFirstDayOfWeek() + ", name="
97*795d594fSAndroid Build Coastguard Worker             + franceCal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, france));
98*795d594fSAndroid Build Coastguard Worker     }
99*795d594fSAndroid Build Coastguard Worker 
testDateFormatSymbols()100*795d594fSAndroid Build Coastguard Worker     static void testDateFormatSymbols() {
101*795d594fSAndroid Build Coastguard Worker         Locale usa = new Locale("en", "US");
102*795d594fSAndroid Build Coastguard Worker         DateFormatSymbols syms = DateFormatSymbols.getInstance(usa);
103*795d594fSAndroid Build Coastguard Worker         String[] list = syms.getAmPmStrings();
104*795d594fSAndroid Build Coastguard Worker         System.out.println("USA dfs: " + Arrays.deepToString(list));
105*795d594fSAndroid Build Coastguard Worker     }
106*795d594fSAndroid Build Coastguard Worker 
testCurrency()107*795d594fSAndroid Build Coastguard Worker     static void testCurrency() {
108*795d594fSAndroid Build Coastguard Worker         Locale usa = new Locale("en", "US");
109*795d594fSAndroid Build Coastguard Worker         Currency dollars = Currency.getInstance(usa);
110*795d594fSAndroid Build Coastguard Worker 
111*795d594fSAndroid Build Coastguard Worker         System.out.println(usa.toString() + ": " + dollars.toString()
112*795d594fSAndroid Build Coastguard Worker             + " " + dollars.getSymbol() + dollars.getDefaultFractionDigits());
113*795d594fSAndroid Build Coastguard Worker 
114*795d594fSAndroid Build Coastguard Worker         Locale japan = new Locale("jp", "JP");
115*795d594fSAndroid Build Coastguard Worker         Currency yen = Currency.getInstance(japan);
116*795d594fSAndroid Build Coastguard Worker 
117*795d594fSAndroid Build Coastguard Worker         System.out.println(japan.toString() + ": " + yen.toString()
118*795d594fSAndroid Build Coastguard Worker             + " " + yen.getSymbol() + yen.getDefaultFractionDigits());
119*795d594fSAndroid Build Coastguard Worker     }
120*795d594fSAndroid Build Coastguard Worker 
testNormalizer()121*795d594fSAndroid Build Coastguard Worker     static void testNormalizer() {
122*795d594fSAndroid Build Coastguard Worker         String composed = "Bl\u00c1ah";
123*795d594fSAndroid Build Coastguard Worker         String decomposed = "Bl\u0041\u0301ah";
124*795d594fSAndroid Build Coastguard Worker         String res;
125*795d594fSAndroid Build Coastguard Worker 
126*795d594fSAndroid Build Coastguard Worker         res = Normalizer.normalize(composed, Normalizer.Form.NFD);
127*795d594fSAndroid Build Coastguard Worker         if (!decomposed.equals(res)) {
128*795d594fSAndroid Build Coastguard Worker             System.out.println("Bad decompose: '" + composed + "' --> '"
129*795d594fSAndroid Build Coastguard Worker                 + res + "'");
130*795d594fSAndroid Build Coastguard Worker         }
131*795d594fSAndroid Build Coastguard Worker 
132*795d594fSAndroid Build Coastguard Worker         res = Normalizer.normalize(decomposed, Normalizer.Form.NFC);
133*795d594fSAndroid Build Coastguard Worker         if (!composed.equals(res)) {
134*795d594fSAndroid Build Coastguard Worker             System.out.println("Bad compose: '" + decomposed + "' --> '"
135*795d594fSAndroid Build Coastguard Worker                 + res + "'");
136*795d594fSAndroid Build Coastguard Worker         }
137*795d594fSAndroid Build Coastguard Worker 
138*795d594fSAndroid Build Coastguard Worker         System.out.println("Normalizer passed");
139*795d594fSAndroid Build Coastguard Worker     }
140*795d594fSAndroid Build Coastguard Worker 
141*795d594fSAndroid Build Coastguard Worker     /*
142*795d594fSAndroid Build Coastguard Worker      * Test that we can set and get an ISO3 language code.  Support for this
143*795d594fSAndroid Build Coastguard Worker      * is expected by the Android framework.
144*795d594fSAndroid Build Coastguard Worker      */
testIso3()145*795d594fSAndroid Build Coastguard Worker     static void testIso3() {
146*795d594fSAndroid Build Coastguard Worker         Locale loc;
147*795d594fSAndroid Build Coastguard Worker         loc = new Locale("en", "US");
148*795d594fSAndroid Build Coastguard Worker         System.out.println("loc: " + loc);
149*795d594fSAndroid Build Coastguard Worker         System.out.println(" iso3=" + loc.getISO3Language());
150*795d594fSAndroid Build Coastguard Worker 
151*795d594fSAndroid Build Coastguard Worker         loc = new Locale("eng", "USA");
152*795d594fSAndroid Build Coastguard Worker         System.out.println("loc: " + loc);
153*795d594fSAndroid Build Coastguard Worker         try {
154*795d594fSAndroid Build Coastguard Worker             System.out.println(" iso3=" + loc.getISO3Language());
155*795d594fSAndroid Build Coastguard Worker         } catch (MissingResourceException mre) {
156*795d594fSAndroid Build Coastguard Worker             System.out.println("couldn't get iso3 language");
157*795d594fSAndroid Build Coastguard Worker         }
158*795d594fSAndroid Build Coastguard Worker     }
159*795d594fSAndroid Build Coastguard Worker }
160