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