2 *******************************************************************************
\r
3 * Copyright (C) 2004-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.format;
\r
10 import java.util.ArrayList;
\r
11 import java.util.List;
\r
12 import java.util.MissingResourceException;
\r
13 import java.util.ResourceBundle;
\r
15 import com.ibm.icu.dev.test.TestFmwk;
\r
16 import com.ibm.icu.text.BreakIterator;
\r
17 import com.ibm.icu.text.Collator;
\r
18 import com.ibm.icu.text.DateFormat;
\r
19 import com.ibm.icu.text.NumberFormat;
\r
20 import com.ibm.icu.text.SimpleDateFormat;
\r
21 import com.ibm.icu.util.BuddhistCalendar;
\r
22 import com.ibm.icu.util.Calendar;
\r
23 import com.ibm.icu.util.Currency;
\r
24 import com.ibm.icu.util.GlobalizationPreferences;
\r
25 import com.ibm.icu.util.GregorianCalendar;
\r
26 import com.ibm.icu.util.IslamicCalendar;
\r
27 import com.ibm.icu.util.JapaneseCalendar;
\r
28 import com.ibm.icu.util.TimeZone;
\r
29 import com.ibm.icu.util.ULocale;
\r
33 public class GlobalizationPreferencesTest extends TestFmwk {
\r
35 public static void main(String[] args) throws Exception {
\r
36 new GlobalizationPreferencesTest().run(args);
\r
39 public void TestDefault() {
\r
40 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
41 ULocale defLocale = new ULocale("en_US");
\r
42 ULocale defFallbackLocale = new ULocale("en");
\r
44 if (!defLocale.equals(ULocale.getDefault())) {
\r
45 // Locale.US is always used as the default locale in the test environment
\r
46 // If not, some test cases will fail...
\r
47 errln("FAIL: The default locale of the test environment must be en_US");
\r
50 logln("Default locale: " + defLocale.toString());
\r
52 // First locale is en_US
\r
53 ULocale gpLocale0 = gp.getLocale(0);
\r
54 logln("Primary locale: " + gpLocale0.toString());
\r
55 if (!gpLocale0.equals(defLocale)) {
\r
56 errln("FAIL: The primary locale is not en_US");
\r
59 // Second locale is en
\r
60 ULocale gpLocale1 = gp.getLocale(1);
\r
61 logln("Secondary locale: " + gpLocale1.toString());
\r
62 if (!gpLocale1.equals(defFallbackLocale)) {
\r
63 errln("FAIL: The secondary locale is not en");
\r
66 // Third locale is null
\r
67 ULocale gpLocale2 = gp.getLocale(2);
\r
68 if (gpLocale2 != null) {
\r
69 errln("FAIL: Number of locales must be 2");
\r
73 Calendar cal = gp.getCalendar();
\r
74 ULocale calLocale = cal.getLocale(ULocale.VALID_LOCALE);
\r
75 logln("Calendar locale: " + calLocale.toString());
\r
76 if (!calLocale.equals(defLocale)) {
\r
77 errln("FAIL: The calendar locale must match with the default JVM locale");
\r
81 Collator coll = gp.getCollator();
\r
82 ULocale collLocale = coll.getLocale(ULocale.VALID_LOCALE);
\r
83 logln("Collator locale: " + collLocale.toString());
\r
84 if (!collLocale.equals(defLocale)) {
\r
85 errln("FAIL: The collator locale must match with the default JVM locale");
\r
88 // BreakIterator locale
\r
89 BreakIterator brk = gp.getBreakIterator(GlobalizationPreferences.BI_CHARACTER);
\r
90 ULocale brkLocale = brk.getLocale(ULocale.VALID_LOCALE);
\r
91 logln("BreakIterator locale: " + brkLocale.toString());
\r
92 if (!brkLocale.equals(defLocale)) {
\r
93 errln("FAIL: The break iterator locale must match with the default JVM locale");
\r
97 // DateFormat locale
\r
98 DateFormat df = gp.getDateFormat(GlobalizationPreferences.DF_FULL, GlobalizationPreferences.DF_NONE);
\r
99 ULocale dfLocale = df.getLocale(ULocale.VALID_LOCALE);
\r
100 logln("DateFormat locale: " + dfLocale.toString());
\r
101 if (!dfLocale.equals(defLocale)) {
\r
102 errln("FAIL: The date format locale must match with the default JVM locale");
\r
106 // NumberFormat locale
\r
107 NumberFormat nf = gp.getNumberFormat(GlobalizationPreferences.NF_NUMBER);
\r
108 ULocale nfLocale = nf.getLocale(ULocale.VALID_LOCALE);
\r
109 logln("NumberFormat locale: " + nfLocale.toString());
\r
110 if (!nfLocale.equals(defLocale)) {
\r
111 errln("FAIL: The number format locale must match with the default JVM locale");
\r
115 public void TestFreezable() {
\r
116 logln("Create a new GlobalizationPreference object");
\r
117 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
118 if (gp.isFrozen()) {
\r
119 errln("FAIL: This object is not yet frozen");
\r
122 logln("Call reset()");
\r
123 boolean bSet = true;
\r
126 } catch (UnsupportedOperationException uoe) {
\r
130 errln("FAIL: reset() must not throw an exception before frozen");
\r
133 // Freeze the object
\r
134 logln("Freeze the object");
\r
136 if (!gp.isFrozen()) {
\r
137 errln("FAIL: This object is already fronzen");
\r
141 logln("Call reset() after frozen");
\r
145 } catch (UnsupportedOperationException uoe) {
\r
149 errln("FAIL: reset() must be blocked after frozen");
\r
152 // setLocales(ULocale[])
\r
153 logln("Call setLocales(ULocale[]) after frozen");
\r
156 gp.setLocales(new ULocale[] {new ULocale("fr_FR")});
\r
157 } catch (UnsupportedOperationException uoe) {
\r
161 errln("FAIL: setLocales(ULocale[]) must be blocked after frozen");
\r
164 // setLocales(ULocale[])
\r
165 logln("Call setLocales(List) after frozen");
\r
167 ArrayList list = new ArrayList(1);
\r
168 list.add(new ULocale("fr_FR"));
\r
170 gp.setLocales(list);
\r
171 } catch (UnsupportedOperationException uoe) {
\r
175 errln("FAIL: setLocales(List) must be blocked after frozen");
\r
178 // setLocales(String)
\r
179 logln("Call setLocales(String) after frozen");
\r
182 gp.setLocales("pt-BR,es;q=0.7");
\r
183 } catch (UnsupportedOperationException uoe) {
\r
187 errln("FAIL: setLocales(String) must be blocked after frozen");
\r
190 // setLocale(ULocale)
\r
191 logln("Call setLocale(ULocale) after frozen");
\r
194 gp.setLocale(new ULocale("fi_FI"));
\r
195 } catch (UnsupportedOperationException uoe) {
\r
199 errln("FAIL: setLocale(ULocale) must be blocked after frozen");
\r
202 // setTerritory(String)
\r
203 logln("Call setTerritory(String) after frozen");
\r
206 gp.setTerritory("AU");
\r
207 } catch (UnsupportedOperationException uoe) {
\r
211 errln("FAIL: setTerritory(String) must be blocked after frozen");
\r
214 // Modifiable clone
\r
215 logln("Create a modifiable clone");
\r
216 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
218 if (gp1.isFrozen()) {
\r
219 errln("FAIL: The object returned by cloneAsThawed() must not be frozen yet");
\r
222 // setLocale(ULocale)
\r
223 logln("Call setLocale(ULocale) of the modifiable clone");
\r
226 gp1.setLocale(new ULocale("fr_FR"));
\r
227 } catch (UnsupportedOperationException uoe) {
\r
231 errln("FAIL: setLocales(ULocale) must not throw an exception before frozen");
\r
235 static String[][] INPUT_LOCALEIDS = {
\r
239 {"es", "fr", "en_US"},
\r
240 {"zh_CN", "zh_Hans", "zh_Hans_CN"},
\r
243 {"de_DE", "es", "fr_FR"},
\r
246 static String[] ACCEPT_LANGUAGES = {
\r
250 "es,fr;q=0.76,en_US;q=0.75",
\r
251 "zh-CN,zh-Hans;q=0.5,zh-Hans-CN;q=0.1",
\r
253 " es\t; q =0.5 \t, es-US ;q =1",
\r
254 "fr-FR; q=0.5, de-DE, es",
\r
257 static String[][] RESULTS_LOCALEIDS = {
\r
261 {"es", "fr", "en_US", "en"},
\r
262 {"zh_Hans_CN", "zh_CN", "zh_Hans", "zh"},
\r
263 {"en_US_123", "en_US", "en"},
\r
265 {"de_DE", "de", "es", "fr_FR", "fr"},
\r
268 public void TestSetLocales() {
\r
269 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
271 // setLocales(List)
\r
272 for (int i = 0; i < INPUT_LOCALEIDS.length; i++) {
\r
273 String[] localeStrings = INPUT_LOCALEIDS[i];
\r
274 ArrayList locales = new ArrayList();
\r
275 StringBuffer sb = new StringBuffer();
\r
276 for (int j = 0; j < localeStrings.length; j++) {
\r
277 locales.add(new ULocale(localeStrings[j]));
\r
281 sb.append(localeStrings[j]);
\r
283 logln("Input locales: " + sb.toString());
\r
286 gp.setLocales(locales);
\r
288 List resultLocales = gp.getLocales();
\r
289 if (resultLocales.size() != RESULTS_LOCALEIDS[i].length) {
\r
290 errln("FAIL: Number of locales mismatch - GP:" + resultLocales.size()
\r
291 + " Expected:" + RESULTS_LOCALEIDS[i].length);
\r
294 for (int j = 0; j < RESULTS_LOCALEIDS[i].length; j++) {
\r
295 ULocale loc = gp.getLocale(j);
\r
296 logln("Locale[" + j + "]: " + loc.toString());
\r
297 if (!gp.getLocale(j).toString().equals(RESULTS_LOCALEIDS[i][j])) {
\r
298 errln("FAIL: Locale index(" + j + ") does not match - GP:" + loc.toString()
\r
299 + " Expected:" + RESULTS_LOCALEIDS[i][j]);
\r
305 // setLocales(ULocale[])
\r
306 for (int i = 0; i < INPUT_LOCALEIDS.length; i++) {
\r
307 String[] localeStrings = INPUT_LOCALEIDS[i];
\r
308 ULocale[] localeArray = new ULocale[INPUT_LOCALEIDS[i].length];
\r
309 StringBuffer sb = new StringBuffer();
\r
310 for (int j = 0; j < localeStrings.length; j++) {
\r
311 localeArray[j] = new ULocale(localeStrings[j]);
\r
315 sb.append(localeStrings[j]);
\r
317 logln("Input locales: " + sb.toString());
\r
320 gp.setLocales(localeArray);
\r
322 List resultLocales = gp.getLocales();
\r
323 if (resultLocales.size() != RESULTS_LOCALEIDS[i].length) {
\r
324 errln("FAIL: Number of locales mismatch - GP:" + resultLocales.size()
\r
325 + " Expected:" + RESULTS_LOCALEIDS[i].length);
\r
328 for (int j = 0; j < RESULTS_LOCALEIDS[i].length; j++) {
\r
329 ULocale loc = gp.getLocale(j);
\r
330 logln("Locale[" + j + "]: " + loc.toString());
\r
331 if (!gp.getLocale(j).toString().equals(RESULTS_LOCALEIDS[i][j])) {
\r
332 errln("FAIL: Locale index(" + j + ") does not match - GP:" + loc.toString()
\r
333 + " Expected:" + RESULTS_LOCALEIDS[i][j]);
\r
339 // setLocales(String)
\r
340 for (int i = 0; i < ACCEPT_LANGUAGES.length; i++) {
\r
341 String acceptLanguage = ACCEPT_LANGUAGES[i];
\r
342 logln("Accept language: " + acceptLanguage);
\r
345 gp.setLocales(acceptLanguage);
\r
347 List resultLocales = gp.getLocales();
\r
348 if (resultLocales.size() != RESULTS_LOCALEIDS[i].length) {
\r
349 errln("FAIL: Number of locales mismatch - GP:" + resultLocales.size()
\r
350 + " Expected:" + RESULTS_LOCALEIDS[i].length);
\r
353 for (int j = 0; j < RESULTS_LOCALEIDS[i].length; j++) {
\r
354 ULocale loc = gp.getLocale(j);
\r
355 logln("Locale[" + j + "]: " + loc.toString());
\r
356 if (!gp.getLocale(j).toString().equals(RESULTS_LOCALEIDS[i][j])) {
\r
357 errln("FAIL: Locale index(" + j + ") does not match - GP:" + loc.toString()
\r
358 + " Expected:" + RESULTS_LOCALEIDS[i][j]);
\r
365 // accept-language without q-value
\r
366 logln("Set accept-language - de,de-AT");
\r
367 gp.setLocales("de,de-AT");
\r
368 if (!gp.getLocale(0).toString().equals("de_AT")) {
\r
369 errln("FAIL: getLocale(0) returns " + gp.getLocale(0).toString() + " Expected: de_AT");
\r
372 // Invalid accept-language
\r
373 logln("Set locale - ko_KR");
\r
374 gp.setLocale(new ULocale("ko_KR"));
\r
375 boolean bException = false;
\r
377 logln("Set invlaid accept-language - ko=100");
\r
378 gp.setLocales("ko=100");
\r
379 } catch (IllegalArgumentException iae) {
\r
380 logln("IllegalArgumentException was thrown");
\r
384 errln("FAIL: IllegalArgumentException was not thrown for illegal accept-language - ko=100");
\r
386 if (!gp.getLocale(0).toString().equals("ko_KR")) {
\r
387 errln("FAIL: Previous valid locale list had gone");
\r
391 public void TestResourceBundle() {
\r
392 String baseName = "com.ibm.icu.dev.data.resources.TestDataElements";
\r
395 logln("Get a resource bundle " + baseName +
\r
396 " using GlobalizationPreferences initialized by locales - en_GB, en_US");
\r
397 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
398 ULocale[] locales = new ULocale[2];
\r
399 locales[0] = new ULocale("en_GB");
\r
400 locales[1] = new ULocale("en_US");
\r
401 gp.setLocales(locales);
\r
404 rb = gp.getResourceBundle(baseName);
\r
405 String str = rb.getString("from_en_US");
\r
406 if (!str.equals("This data comes from en_US")) {
\r
407 errln("FAIL: from_en_US is not from en_US bundle");
\r
409 } catch (MissingResourceException mre) {
\r
410 errln("FAIL: Missing resouces");
\r
415 logln("Get a resource bundle " + baseName +
\r
416 " using GlobalizationPreferences initialized by locales - ja, en_US_California");
\r
418 locales = new ULocale[2];
\r
419 locales[0] = new ULocale("ja");
\r
420 locales[1] = new ULocale("en_US_California");
\r
421 gp.setLocales(locales);
\r
424 rb = gp.getResourceBundle(baseName, Thread.currentThread().getContextClassLoader());
\r
425 String str = rb.getString("from_en_US");
\r
426 if (!str.equals("This data comes from en_US")) {
\r
427 errln("FAIL: from_en_US is not from en_US bundle");
\r
429 } catch (MissingResourceException mre) {
\r
430 errln("FAIL: Missing resouces");
\r
433 logln("Get a resource bundle which does not exist");
\r
434 boolean bException = false;
\r
436 rb = gp.getResourceBundle("foo.bar.XXX");
\r
437 } catch (MissingResourceException mre) {
\r
438 logln("Missing resource exception for getting resource bundle - foo.bar.XXX");
\r
442 errln("FAIL: MissingResourceException must be thrown for RB - foo.bar.XXX");
\r
446 public void TestTerritory() {
\r
447 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
449 // Territory for unsupported language locale
\r
450 logln("Set locale - ang");
\r
451 gp.setLocale(new ULocale("ang"));
\r
452 String territory = gp.getTerritory();
\r
453 if (!territory.equals("US")) {
\r
454 errln("FAIL: Territory is " + territory + " - Expected: US");
\r
457 // Territory for language only locale "fr"
\r
458 logln("Set locale - fr");
\r
459 gp.setLocale(new ULocale("fr"));
\r
460 territory = gp.getTerritory();
\r
461 if (!territory.equals("FR")) {
\r
462 errln("FAIL: Territory is " + territory + " - Expected: FR");
\r
466 // Set explicity territory
\r
467 logln("Set explicit territory - CA");
\r
468 gp.setTerritory("CA");
\r
469 territory = gp.getTerritory();
\r
470 if (!territory.equals("CA")) {
\r
471 errln("FAIL: Territory is " + territory + " - Expected: CA");
\r
475 logln("Freeze this object");
\r
478 boolean bFrozen = false;
\r
480 gp.setTerritory("FR");
\r
481 } catch (UnsupportedOperationException uoe) {
\r
482 logln("setTerritory is blocked");
\r
486 errln("FAIL: setTerritory must be blocked after frozen");
\r
488 territory = gp.getTerritory();
\r
489 if (!territory.equals("CA")) {
\r
490 errln("FAIL: Territory is not CA");
\r
494 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
495 territory = gp1.getTerritory();
\r
496 if (!territory.equals("CA")) {
\r
497 errln("FAIL: Territory is " + territory + " - Expected: CA");
\r
501 ULocale[] locales = new ULocale[2];
\r
502 locales[0] = new ULocale("ja");
\r
503 locales[1] = new ULocale("zh_Hant_TW");
\r
505 logln("Set locales - ja, zh_Hant_TW");
\r
506 gp1.setLocales(locales);
\r
508 territory = gp1.getTerritory();
\r
509 if (!territory.equals("TW")) {
\r
510 errln("FAIL: Territory is " + territory + " - Expected: TW");
\r
514 public void TestCurrency() {
\r
515 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
517 // Set language only locale - ja
\r
518 logln("Set locale - ja");
\r
519 gp.setLocale(new ULocale("ja"));
\r
520 Currency cur = gp.getCurrency();
\r
521 String code = cur.getCurrencyCode();
\r
522 if (!code.equals("JPY")) {
\r
523 errln("FAIL: Currency is " + code + " - Expected: JPY");
\r
527 // Set locales with territory
\r
528 logln("Set locale - ja_US");
\r
529 gp.setLocale(new ULocale("ja_US"));
\r
530 cur = gp.getCurrency();
\r
531 code = cur.getCurrencyCode();
\r
532 if (!code.equals("USD")) {
\r
533 errln("FAIL: Currency is " + code + " - Expected: USD");
\r
536 // Set locales with territory in the second locale
\r
537 logln("Set locales - it, en_US");
\r
538 ULocale[] locales = new ULocale[2];
\r
539 locales[0] = new ULocale("it");
\r
540 locales[1] = new ULocale("en_US");
\r
541 gp.setLocales(locales);
\r
542 cur = gp.getCurrency();
\r
543 code = cur.getCurrencyCode();
\r
544 if (!code.equals("USD")) {
\r
545 errln("FAIL: Currency is " + code + " - Expected: USD");
\r
548 // Set explicit territory
\r
549 logln("Set territory - DE");
\r
550 gp.setTerritory("DE");
\r
551 cur = gp.getCurrency();
\r
552 code = cur.getCurrencyCode();
\r
553 if (!code.equals("EUR")) {
\r
554 errln("FAIL: Currency is " + code + " - Expected: EUR");
\r
557 // Set explicit currency
\r
558 Currency ecur = Currency.getInstance("BRL");
\r
559 gp.setCurrency(ecur);
\r
560 logln("Set explicit currency - BRL");
\r
561 cur = gp.getCurrency();
\r
562 code = cur.getCurrencyCode();
\r
563 if (!code.equals("BRL")) {
\r
564 errln("FAIL: Currency is " + code + " - Expected: BRL");
\r
567 // Set explicit territory again
\r
568 logln("Set territory - JP");
\r
569 cur = gp.getCurrency();
\r
570 code = cur.getCurrencyCode();
\r
571 if (!code.equals("BRL")) {
\r
572 errln("FAIL: Currency is " + code + " - Expected: BRL");
\r
576 logln("Freeze this object");
\r
577 Currency ecur2 = Currency.getInstance("CHF");
\r
578 boolean bFrozen = false;
\r
581 gp.setCurrency(ecur2);
\r
582 } catch (UnsupportedOperationException uoe) {
\r
583 logln("setCurrency is blocked");
\r
587 errln("FAIL: setCurrency must be blocked");
\r
591 logln("cloneAsThawed");
\r
592 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
593 cur = gp.getCurrency();
\r
594 code = cur.getCurrencyCode();
\r
595 if (!code.equals("BRL")) {
\r
596 errln("FAIL: Currency is " + code + " - Expected: BRL");
\r
599 // Set ecplicit currency
\r
600 gp1.setCurrency(ecur2);
\r
601 cur = gp1.getCurrency();
\r
602 code = cur.getCurrencyCode();
\r
603 if (!code.equals("CHF")) {
\r
604 errln("FAIL: Currency is " + code + " - Expected: CHF");
\r
608 public void TestCalendar() {
\r
609 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
611 // Set locale - pt_BR
\r
612 logln("Set locale - pt");
\r
613 gp.setLocale(new ULocale("pt"));
\r
614 Calendar cal = gp.getCalendar();
\r
615 String calType = cal.getType();
\r
616 if (!calType.equals("gregorian")) {
\r
617 errln("FAIL: Calendar type is " + calType + " Expected: gregorian");
\r
620 // Set a list of locales
\r
621 logln("Set locales - en, en_JP, en_GB");
\r
622 ULocale[] locales = new ULocale[3];
\r
623 locales[0] = new ULocale("en");
\r
624 locales[1] = new ULocale("en_JP");
\r
625 locales[2] = new ULocale("en_GB");
\r
626 gp.setLocales(locales);
\r
628 cal = gp.getCalendar();
\r
629 ULocale calLocale = cal.getLocale(ULocale.VALID_LOCALE);
\r
630 if (!calLocale.equals(locales[2])) {
\r
631 errln("FAIL: Calendar locale is " + calLocale.toString() + " - Expected: en_GB");
\r
634 // Set ecplicit calendar
\r
635 logln("Set Japanese calendar to this object");
\r
636 JapaneseCalendar jcal = new JapaneseCalendar();
\r
637 gp.setCalendar(jcal);
\r
638 cal = gp.getCalendar();
\r
639 calType = cal.getType();
\r
640 if (!calType.equals("japanese")) {
\r
641 errln("FAIL: Calendar type is " + calType + " Expected: japanese");
\r
644 jcal.setFirstDayOfWeek(3);
\r
645 if (cal.getFirstDayOfWeek() == jcal.getFirstDayOfWeek()) {
\r
646 errln("FAIL: Calendar returned by getCalendar must be a safe copy");
\r
648 cal.setFirstDayOfWeek(3);
\r
649 Calendar cal1 = gp.getCalendar();
\r
650 if (cal1.getFirstDayOfWeek() == cal.getFirstDayOfWeek()) {
\r
651 errln("FAIL: Calendar returned by getCalendar must be a safe copy");
\r
655 logln("Freeze this object");
\r
656 IslamicCalendar ical = new IslamicCalendar();
\r
657 boolean bFrozen = false;
\r
660 gp.setCalendar(ical);
\r
661 } catch (UnsupportedOperationException uoe) {
\r
662 logln("setCalendar is blocked");
\r
666 errln("FAIL: setCalendar must be blocked");
\r
670 logln("cloneAsThawed");
\r
671 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
672 cal = gp.getCalendar();
\r
673 calType = cal.getType();
\r
674 if (!calType.equals("japanese")) {
\r
675 errln("FAIL: Calendar type afte clone is " + calType + " Expected: japanese");
\r
678 logln("Set islamic calendar");
\r
679 gp1.setCalendar(ical);
\r
680 cal = gp1.getCalendar();
\r
681 calType = cal.getType();
\r
682 if (!calType.equals("islamic")) {
\r
683 errln("FAIL: Calendar type afte clone is " + calType + " Expected: islamic");
\r
687 public void TestTimeZone() {
\r
688 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
690 // Set locale - zh_CN
\r
691 logln("Set locale - zh_CN");
\r
692 gp.setLocale(new ULocale("zh_CN"));
\r
693 TimeZone tz = gp.getTimeZone();
\r
694 String tzid = tz.getID();
\r
695 if (!tzid.equals("Asia/Shanghai")) {
\r
696 errln("FAIL: Time zone ID is " + tzid + " Expected: Asia/Shanghai");
\r
700 logln("Set locale - en");
\r
701 gp.setLocale(new ULocale("en"));
\r
702 tz = gp.getTimeZone();
\r
704 if (!tzid.equals("America/New_York")) {
\r
705 errln("FAIL: Time zone ID is " + tzid + " Expected: America/New_York");
\r
708 // Set territory - GB
\r
709 logln("Set territory - GB");
\r
710 gp.setTerritory("GB");
\r
711 tz = gp.getTimeZone();
\r
713 if (!tzid.equals("Europe/London")) {
\r
714 errln("FAIL: Time zone ID is " + tzid + " Expected: Europe/London");
\r
717 // Check if getTimeZone returns a safe clone
\r
718 tz.setID("Bad_ID");
\r
719 tz = gp.getTimeZone();
\r
721 if (!tzid.equals("Europe/London")) {
\r
722 errln("FAIL: Time zone ID is " + tzid + " Expected: Europe/London");
\r
725 // Set explicit time zone
\r
726 TimeZone jst = TimeZone.getTimeZone("Asia/Tokyo");
\r
727 String customJstId = "Japan_Standard_Time";
\r
728 jst.setID(customJstId);
\r
729 gp.setTimeZone(jst);
\r
730 tz = gp.getTimeZone();
\r
732 if (!tzid.equals(customJstId)) {
\r
733 errln("FAIL: Time zone ID is " + tzid + " Expected: " + customJstId);
\r
737 logln("Freeze this object");
\r
738 TimeZone cst = TimeZone.getTimeZone("Europe/Paris");
\r
739 boolean bFrozen = false;
\r
742 gp.setTimeZone(cst);
\r
743 } catch (UnsupportedOperationException uoe) {
\r
744 logln("setTimeZone is blocked");
\r
748 errln("FAIL: setTimeZone must be blocked");
\r
751 // Modifiable clone
\r
752 logln("cloneAsThawed");
\r
753 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
754 tz = gp1.getTimeZone();
\r
756 if (!tzid.equals(customJstId)) {
\r
757 errln("FAIL: Time zone ID is " + tzid + " Expected: " + customJstId);
\r
760 // Set explicit time zone
\r
761 gp1.setTimeZone(cst);
\r
762 tz = gp1.getTimeZone();
\r
764 if (!tzid.equals(cst.getID())) {
\r
765 errln("FAIL: Time zone ID is " + tzid + " Expected: " + cst.getID());
\r
769 public void TestCollator() {
\r
770 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
773 logln("Set locale - tr");
\r
774 gp.setLocale(new ULocale("tr"));
\r
775 Collator coll = gp.getCollator();
\r
776 String locStr = coll.getLocale(ULocale.VALID_LOCALE).toString();
\r
777 if (!locStr.equals("tr")) {
\r
778 errln("FAIL: Collator locale is " + locStr + " Expected: tr");
\r
781 // Unsupported collator locale - zun
\r
782 logln("Set locale - zun");
\r
783 gp.setLocale(new ULocale("zun"));
\r
784 coll = gp.getCollator();
\r
785 locStr = coll.getLocale(ULocale.VALID_LOCALE).toString();
\r
786 if (!locStr.equals("")) {
\r
787 errln("FAIL: Collator locale is \"" + locStr + "\" Expected: \"\"(empty)");
\r
790 // Set locales - en_JP, fr, en_US, fr_FR
\r
791 logln("Set locale - en_JP, fr, en_US, fr_FR");
\r
792 ULocale[] locales = new ULocale[4];
\r
793 locales[0] = new ULocale("en_JP");
\r
794 locales[1] = new ULocale("fr");
\r
795 locales[2] = new ULocale("en_US");
\r
796 locales[3] = new ULocale("fr_FR");
\r
797 gp.setLocales(locales);
\r
798 coll = gp.getCollator();
\r
799 locStr = coll.getLocale(ULocale.VALID_LOCALE).toString();
\r
800 if (!locStr.equals("fr_FR")) {
\r
801 errln("FAIL: Collator locale is " + locStr + " Expected: fr_FR");
\r
804 // Set explicit Collator
\r
805 Collator coll1 = Collator.getInstance(new ULocale("it"));
\r
806 coll1.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
\r
807 logln("Set collator for it in canonical deconposition mode");
\r
808 gp.setCollator(coll1);
\r
809 coll1.setStrength(Collator.IDENTICAL);
\r
810 coll = gp.getCollator();
\r
811 locStr = coll.getLocale(ULocale.VALID_LOCALE).toString();
\r
812 if (!locStr.equals("it")) {
\r
813 errln("FAIL: Collator locale is " + locStr + " Expected: it");
\r
815 if (coll1.equals(coll)) {
\r
816 errln("FAIL: setCollator must use a safe copy of a Collator");
\r
820 logln("Freeze this object");
\r
821 boolean isFrozen = false;
\r
824 gp.setCollator(coll1);
\r
825 } catch (UnsupportedOperationException uoe) {
\r
826 logln("setCollator is blocked");
\r
830 errln("FAIL: setCollator must be blocked after freeze");
\r
833 // Modifiable clone
\r
834 logln("cloneAsThawed");
\r
835 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
836 coll = gp1.getCollator();
\r
837 locStr = coll.getLocale(ULocale.VALID_LOCALE).toString();
\r
838 if (!locStr.equals("it")) {
\r
839 errln("FAIL: Collator locale is " + locStr + " Expected: it");
\r
841 if (coll.getDecomposition() != Collator.CANONICAL_DECOMPOSITION) {
\r
842 errln("FAIL: Decomposition mode is not CANONICAL_DECOMPOSITION");
\r
845 // Set custom collator again
\r
846 gp1.setCollator(coll1);
\r
847 coll = gp1.getCollator();
\r
848 if (coll.getStrength() != Collator.IDENTICAL) {
\r
849 errln("FAIL: Strength is not IDENTICAL");
\r
853 public void TestBreakIterator() {
\r
854 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
856 // Unsupported break iterator locale - aar
\r
857 logln("Set locale - aar");
\r
858 gp.setLocale(new ULocale("aar"));
\r
859 BreakIterator brk = gp.getBreakIterator(GlobalizationPreferences.BI_LINE);
\r
860 String locStr = brk.getLocale(ULocale.VALID_LOCALE).toString();
\r
861 if (!locStr.equals("root")) {
\r
862 errln("FAIL: Line break iterator locale is " + locStr + " Expected: root");
\r
866 logln("Set locale - es");
\r
867 gp.setLocale(new ULocale("es"));
\r
868 brk = gp.getBreakIterator(GlobalizationPreferences.BI_CHARACTER);
\r
870 locStr = brk.getLocale(ULocale.VALID_LOCALE).toString();
\r
871 if (!locStr.equals("es")) {
\r
872 errln("FAIL: Character break iterator locale is " + locStr + " Expected: es");
\r
876 // Set explicit break sentence iterator
\r
877 logln("Set break iterator for sentence using locale hu_HU");
\r
878 BreakIterator brk1 = BreakIterator.getSentenceInstance(new ULocale("hu_HU"));
\r
879 gp.setBreakIterator(GlobalizationPreferences.BI_SENTENCE, brk1);
\r
881 brk = gp.getBreakIterator(GlobalizationPreferences.BI_SENTENCE);
\r
883 locStr = brk.getLocale(ULocale.VALID_LOCALE).toString();
\r
884 if (!locStr.equals("hu_HU")) {
\r
885 errln("FAIL: Sentence break locale is " + locStr + " Expected: hu_HU");
\r
888 brk.setText("This is a test case. Is this a new instance?");
\r
890 if (brk1.current() == brk.current()) {
\r
891 errln("FAIL: getBreakIterator must return a new instance");
\r
894 // Illegal argument
\r
895 logln("Get break iterator type 100");
\r
896 boolean illegalArg = false;
\r
898 brk = gp.getBreakIterator(100);
\r
899 } catch (IllegalArgumentException iae) {
\r
900 logln("Break iterator type 100 is illegal");
\r
904 errln("FAIL: getBreakIterator must throw IllegalArgumentException for type 100");
\r
906 logln("Set break iterator type -1");
\r
907 illegalArg = false;
\r
909 gp.setBreakIterator(-1, brk1);
\r
910 } catch (IllegalArgumentException iae) {
\r
911 logln("Break iterator type -1 is illegal");
\r
915 errln("FAIL: getBreakIterator must throw IllegalArgumentException for type -1");
\r
919 logln("Freeze this object");
\r
920 BreakIterator brk2 = BreakIterator.getTitleInstance(new ULocale("es_MX"));
\r
921 boolean isFrozen = false;
\r
924 gp.setBreakIterator(GlobalizationPreferences.BI_TITLE, brk2);
\r
925 } catch (UnsupportedOperationException uoe) {
\r
926 logln("setBreakIterator is blocked");
\r
930 errln("FAIL: setBreakIterator must be blocked after frozen");
\r
933 // Modifiable clone
\r
934 logln("cloneAsThawed");
\r
935 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
936 brk = gp1.getBreakIterator(GlobalizationPreferences.BI_WORD);
\r
938 locStr = brk.getLocale(ULocale.VALID_LOCALE).toString();
\r
939 if (!locStr.equals("es")) {
\r
940 errln("FAIL: Word break iterator locale is " + locStr + " Expected: es");
\r
944 ULocale frFR = new ULocale("fr_FR");
\r
945 BreakIterator brkC = BreakIterator.getCharacterInstance(frFR);
\r
946 BreakIterator brkW = BreakIterator.getWordInstance(frFR);
\r
947 BreakIterator brkL = BreakIterator.getLineInstance(frFR);
\r
948 BreakIterator brkS = BreakIterator.getSentenceInstance(frFR);
\r
949 BreakIterator brkT = BreakIterator.getTitleInstance(frFR);
\r
951 gp1.setBreakIterator(GlobalizationPreferences.BI_CHARACTER, brkC);
\r
952 gp1.setBreakIterator(GlobalizationPreferences.BI_WORD, brkW);
\r
953 gp1.setBreakIterator(GlobalizationPreferences.BI_LINE, brkL);
\r
954 gp1.setBreakIterator(GlobalizationPreferences.BI_SENTENCE, brkS);
\r
955 gp1.setBreakIterator(GlobalizationPreferences.BI_TITLE, brkT);
\r
958 locStr = brkC.getLocale(ULocale.VALID_LOCALE).toString();
\r
959 if (!locStr.equals("ja_JP")) {
\r
960 errln("FAIL: Character break iterator locale is " + locStr + " Expected: fr_FR");
\r
962 locStr = brkW.getLocale(ULocale.VALID_LOCALE).toString();
\r
963 if (!locStr.equals("ja_JP")) {
\r
964 errln("FAIL: Word break iterator locale is " + locStr + " Expected: fr_FR");
\r
966 locStr = brkL.getLocale(ULocale.VALID_LOCALE).toString();
\r
967 if (!locStr.equals("ja_JP")) {
\r
968 errln("FAIL: Line break iterator locale is " + locStr + " Expected: fr_FR");
\r
970 locStr = brkS.getLocale(ULocale.VALID_LOCALE).toString();
\r
971 if (!locStr.equals("ja_JP")) {
\r
972 errln("FAIL: Sentence break iterator locale is " + locStr + " Expected: fr_FR");
\r
974 locStr = brkT.getLocale(ULocale.VALID_LOCALE).toString();
\r
975 if (!locStr.equals("ja_JP")) {
\r
976 errln("FAIL: Title break iterator locale is " + locStr + " Expected: fr_FR");
\r
981 public void TestDisplayName() {
\r
982 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
984 ULocale loc_fr_FR_Paris = new ULocale("fr_FR_Paris");
\r
985 ULocale loc_peo = new ULocale("peo");
\r
987 // Locale list - fr_FR_Paris
\r
988 ArrayList locales1 = new ArrayList(1);
\r
989 locales1.add(loc_fr_FR_Paris);
\r
991 // Locale list - ain, fr_FR_Paris
\r
992 ArrayList locales2 = new ArrayList(2);
\r
993 locales2.add(loc_peo);
\r
994 locales2.add(loc_fr_FR_Paris);
\r
996 logln("Locales: <default> | <fr_FR_Paris> | <ain, fr_FR_Paris>");
\r
999 String id = "zh_Hant_HK";
\r
1000 String name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_LOCALE);
\r
1001 gp.setLocales(locales1);
\r
1002 String name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_LOCALE);
\r
1003 gp.setLocales(locales2);
\r
1004 String name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_LOCALE);
\r
1006 logln("Locale[zh_Hant_HK]: " + name1 + " | " + name2 + " | " + name3);
\r
1007 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1008 errln("FAIL: Locale ID");
\r
1014 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_LANGUAGE);
\r
1015 gp.setLocales(locales1);
\r
1016 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_LANGUAGE);
\r
1017 gp.setLocales(locales2);
\r
1018 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_LANGUAGE);
\r
1020 logln("Language[fr]: " + name1 + " | " + name2 + " | " + name3);
\r
1021 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1022 errln("FAIL: Language ID");
\r
1028 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_SCRIPT);
\r
1029 gp.setLocales(locales1);
\r
1030 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_SCRIPT);
\r
1031 gp.setLocales(locales2);
\r
1032 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_SCRIPT);
\r
1034 logln("Script[cyrl]: " + name1 + " | " + name2 + " | " + name3);
\r
1035 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1036 errln("FAIL: Script ID");
\r
1042 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_TERRITORY);
\r
1043 gp.setLocales(locales1);
\r
1044 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_TERRITORY);
\r
1045 gp.setLocales(locales2);
\r
1046 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_TERRITORY);
\r
1048 logln("Territory[JP]: " + name1 + " | " + name2 + " | " + name3);
\r
1049 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1050 errln("FAIL: Territory ID");
\r
1056 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_VARIANT);
\r
1057 gp.setLocales(locales1);
\r
1058 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_VARIANT);
\r
1059 gp.setLocales(locales2);
\r
1060 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_VARIANT);
\r
1062 logln("Variant[NEDIS]: " + name1 + " | " + name2 + " | " + name3);
\r
1063 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1064 errln("FAIL: Variant ID");
\r
1070 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_KEYWORD);
\r
1071 gp.setLocales(locales1);
\r
1072 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_KEYWORD);
\r
1073 gp.setLocales(locales2);
\r
1074 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_KEYWORD);
\r
1076 logln("Keyword[collation]: " + name1 + " | " + name2 + " | " + name3);
\r
1077 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1078 errln("FAIL: Keyword ID");
\r
1081 // ID_KEYWORD_VALUE
\r
1083 id = "collation=traditional";
\r
1084 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_KEYWORD_VALUE);
\r
1085 gp.setLocales(locales1);
\r
1086 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_KEYWORD_VALUE);
\r
1087 gp.setLocales(locales2);
\r
1088 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_KEYWORD_VALUE);
\r
1090 logln("Keyword value[traditional]: " + name1 + " | " + name2 + " | " + name3);
\r
1091 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1092 errln("FAIL: Keyword value ID");
\r
1095 // ID_CURRENCY_SYMBOL
\r
1098 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_CURRENCY_SYMBOL);
\r
1099 gp.setLocales(locales1);
\r
1100 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_CURRENCY_SYMBOL);
\r
1101 gp.setLocales(locales2);
\r
1102 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_CURRENCY_SYMBOL);
\r
1104 logln("Currency symbol[USD]: " + name1 + " | " + name2 + " | " + name3);
\r
1105 String dollar = "$";
\r
1106 String us_dollar = "$US";
\r
1107 if (!name1.equals(dollar) || !name2.equals(us_dollar) || !name3.equals(us_dollar)) {
\r
1108 errln("FAIL: Currency symbol ID");
\r
1114 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_CURRENCY);
\r
1115 gp.setLocales(locales1);
\r
1116 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_CURRENCY);
\r
1117 gp.setLocales(locales2);
\r
1118 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_CURRENCY);
\r
1120 logln("Currency[USD]: " + name1 + " | " + name2 + " | " + name3);
\r
1121 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1122 errln("FAIL: Currency ID");
\r
1127 id = "Europe/Paris";
\r
1128 name1 = gp.getDisplayName(id, GlobalizationPreferences.ID_TIMEZONE);
\r
1129 gp.setLocales(locales1);
\r
1130 name2 = gp.getDisplayName(id, GlobalizationPreferences.ID_TIMEZONE);
\r
1131 gp.setLocales(locales2);
\r
1132 name3 = gp.getDisplayName(id, GlobalizationPreferences.ID_TIMEZONE);
\r
1134 logln("Timezone[Europe/Paris]: " + name1 + " | " + name2 + " | " + name3);
\r
1135 if (name1.equals(name2) || !name2.equals(name3)) {
\r
1136 errln("FAIL: Timezone ID");
\r
1141 boolean illegalArg = false;
\r
1143 name1 = gp.getDisplayName(id, -1);
\r
1144 } catch (IllegalArgumentException iae) {
\r
1145 logln("Illegal type -1");
\r
1146 illegalArg = true;
\r
1148 if (!illegalArg) {
\r
1149 errln("FAIL: getDisplayName must throw IllegalArgumentException for type -1");
\r
1152 illegalArg = false;
\r
1154 name1 = gp.getDisplayName(id, 100);
\r
1155 } catch (IllegalArgumentException iae) {
\r
1156 logln("Illegal type 100");
\r
1157 illegalArg = true;
\r
1159 if (!illegalArg) {
\r
1160 errln("FAIL: getDisplayName must throw IllegalArgumentException for type 100");
\r
1164 public void TestDateFormat() {
\r
1165 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
1170 // Set unsupported locale - ach
\r
1171 logln("Set locale - ach");
\r
1172 gp.setLocale(new ULocale("ach"));
\r
1175 df = gp.getDateFormat(GlobalizationPreferences.DF_SHORT, GlobalizationPreferences.DF_NONE);
\r
1176 pattern = ((SimpleDateFormat)df).toPattern();
\r
1177 // root pattern must be used
\r
1178 if (!pattern.equals("yyyy-MM-dd")) {
\r
1179 errln("FAIL: SHORT date pattern is " + pattern + " Expected: yyyy-MM-dd");
\r
1182 // Set locale - fr, fr_CA, fr_FR
\r
1183 ArrayList lcls = new ArrayList(3);
\r
1184 lcls.add(new ULocale("fr"));
\r
1185 lcls.add(new ULocale("fr_CA"));
\r
1186 lcls.add(new ULocale("fr_FR"));
\r
1187 logln("Set locales - fr, fr_CA, fr_FR");
\r
1188 gp.setLocales(lcls);
\r
1190 df = gp.getDateFormat(GlobalizationPreferences.DF_SHORT, GlobalizationPreferences.DF_NONE);
\r
1191 pattern = ((SimpleDateFormat)df).toPattern();
\r
1192 // fr_CA pattern must be used
\r
1193 if (!pattern.equals("yy-MM-dd")) {
\r
1194 errln("FAIL: SHORT date pattern is " + pattern + " Expected: yy-MM-dd");
\r
1198 // Set locale - en_GB
\r
1199 logln("Set locale - en_GB");
\r
1200 gp.setLocale(new ULocale("en_GB"));
\r
1203 df = gp.getDateFormat(GlobalizationPreferences.DF_FULL, GlobalizationPreferences.DF_NONE);
\r
1204 pattern = ((SimpleDateFormat)df).toPattern();
\r
1205 if (!pattern.equals("EEEE, d MMMM y")) {
\r
1206 errln("FAIL: FULL date pattern is " + pattern + " Expected: EEEE, d MMMM y");
\r
1210 df = gp.getDateFormat(GlobalizationPreferences.DF_LONG, GlobalizationPreferences.DF_NONE);
\r
1211 pattern = ((SimpleDateFormat)df).toPattern();
\r
1212 if (!pattern.equals("d MMMM y")) {
\r
1213 errln("FAIL: LONG date pattern is " + pattern + " Expected: d MMMM y");
\r
1217 df = gp.getDateFormat(GlobalizationPreferences.DF_MEDIUM, GlobalizationPreferences.DF_NONE);
\r
1218 pattern = ((SimpleDateFormat)df).toPattern();
\r
1219 if (!pattern.equals("d MMM y")) {
\r
1220 errln("FAIL: MEDIUM date pattern is " + pattern + " Expected: d MMM y");
\r
1224 df = gp.getDateFormat(GlobalizationPreferences.DF_SHORT, GlobalizationPreferences.DF_NONE);
\r
1225 pattern = ((SimpleDateFormat)df).toPattern();
\r
1226 if (!pattern.equals("dd/MM/yyyy")) {
\r
1227 errln("FAIL: SHORT date pattern is " + pattern + " Expected: dd/MM/yyyy");
\r
1231 df = gp.getDateFormat(GlobalizationPreferences.DF_NONE, GlobalizationPreferences.DF_FULL);
\r
1232 pattern = ((SimpleDateFormat)df).toPattern();
\r
1233 if (!pattern.equals("HH:mm:ss zzzz")) {
\r
1234 errln("FAIL: FULL time pattern is " + pattern + " Expected: HH:mm:ss zzzz");
\r
1238 df = gp.getDateFormat(GlobalizationPreferences.DF_NONE, GlobalizationPreferences.DF_LONG);
\r
1239 pattern = ((SimpleDateFormat)df).toPattern();
\r
1240 if (!pattern.equals("HH:mm:ss z")) {
\r
1241 errln("FAIL: LONG time pattern is " + pattern + " Expected: HH:mm:ss z");
\r
1245 df = gp.getDateFormat(GlobalizationPreferences.DF_NONE, GlobalizationPreferences.DF_MEDIUM);
\r
1246 pattern = ((SimpleDateFormat)df).toPattern();
\r
1247 if (!pattern.equals("HH:mm:ss")) {
\r
1248 errln("FAIL: MEDIUM time pattern is " + pattern + " Expected: HH:mm:ss");
\r
1252 df = gp.getDateFormat(GlobalizationPreferences.DF_NONE, GlobalizationPreferences.DF_SHORT);
\r
1253 pattern = ((SimpleDateFormat)df).toPattern();
\r
1254 if (!pattern.equals("HH:mm")) {
\r
1255 errln("FAIL: SHORT time pattern is " + pattern + " Expected: HH:mm");
\r
1258 // Date/Time - full
\r
1259 df = gp.getDateFormat(GlobalizationPreferences.DF_FULL, GlobalizationPreferences.DF_FULL);
\r
1260 pattern = ((SimpleDateFormat)df).toPattern();
\r
1261 if (!pattern.equals("EEEE, d MMMM y HH:mm:ss zzzz")) {
\r
1262 errln("FAIL: FULL date/time pattern is " + pattern + " Expected: EEEE, d MMMM y HH:mm:ss zzzz");
\r
1266 boolean illegalArg = false;
\r
1268 df = gp.getDateFormat(-1, GlobalizationPreferences.DF_NONE);
\r
1269 } catch (IllegalArgumentException iae) {
\r
1270 logln("Illegal date style -1");
\r
1271 illegalArg = true;
\r
1273 if (!illegalArg) {
\r
1274 errln("FAIL: getDateFormat() must throw IllegalArgumentException for dateStyle -1");
\r
1277 illegalArg = false;
\r
1279 df = gp.getDateFormat(GlobalizationPreferences.DF_NONE, GlobalizationPreferences.DF_NONE);
\r
1280 } catch (IllegalArgumentException iae) {
\r
1281 logln("Illegal style - dateStyle:DF_NONE / timeStyle:DF_NONE");
\r
1282 illegalArg = true;
\r
1284 if (!illegalArg) {
\r
1285 errln("FAIL: getDateFormat() must throw IllegalArgumentException for dateStyle:DF_NONE/timeStyle:DF_NONE");
\r
1288 // Set explicit time zone
\r
1289 logln("Set timezone - America/Sao_Paulo");
\r
1290 TimeZone tz = TimeZone.getTimeZone("America/Sao_Paulo");
\r
1291 gp.setTimeZone(tz);
\r
1292 df = gp.getDateFormat(GlobalizationPreferences.DF_LONG, GlobalizationPreferences.DF_MEDIUM);
\r
1293 String tzid = df.getTimeZone().getID();
\r
1294 if (!tzid.equals("America/Sao_Paulo")) {
\r
1295 errln("FAIL: The DateFormat instance must use timezone America/Sao_Paulo");
\r
1298 // Set explicit calendar
\r
1299 logln("Set calendar - japanese");
\r
1300 Calendar jcal = new JapaneseCalendar();
\r
1301 jcal.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
\r
1302 gp.setCalendar(jcal);
\r
1303 df = gp.getDateFormat(GlobalizationPreferences.DF_SHORT, GlobalizationPreferences.DF_SHORT);
\r
1304 Calendar dfCal = df.getCalendar();
\r
1305 if (!(dfCal instanceof JapaneseCalendar)) {
\r
1306 errln("FAIL: The DateFormat instance must use Japanese calendar");
\r
1308 // TimeZone must be still America/Sao_Paulo
\r
1309 tzid = df.getTimeZone().getID();
\r
1310 if (!tzid.equals("America/Sao_Paulo")) {
\r
1311 errln("FAIL: The DateFormat instance must use timezone America/Sao_Paulo");
\r
1314 // Set explicit DateFormat
\r
1315 logln("Set explicit date format - full date");
\r
1316 DateFormat customFD = DateFormat.getDateInstance(new IslamicCalendar(), DateFormat.FULL, new ULocale("ar_SA"));
\r
1317 customFD.setTimeZone(TimeZone.getTimeZone("Asia/Riyadh"));
\r
1318 gp.setDateFormat(GlobalizationPreferences.DF_FULL, GlobalizationPreferences.DF_NONE, customFD);
\r
1319 df = gp.getDateFormat(GlobalizationPreferences.DF_FULL, GlobalizationPreferences.DF_NONE);
\r
1320 dfCal = df.getCalendar();
\r
1321 if (!(dfCal instanceof IslamicCalendar)) {
\r
1322 errln("FAIL: The DateFormat instance must use Islamic calendar");
\r
1324 // TimeZone in the custom DateFormat is overridden by GP's timezone setting
\r
1325 tzid = df.getTimeZone().getID();
\r
1326 if (!tzid.equals("America/Sao_Paulo")) {
\r
1327 errln("FAIL: The DateFormat instance must use timezone America/Sao_Paulo");
\r
1331 logln("Freeze this object");
\r
1333 DateFormat customLD = DateFormat.getDateInstance(new BuddhistCalendar(), DateFormat.LONG, new ULocale("th"));
\r
1334 customLD.setTimeZone(TimeZone.getTimeZone("Asia/Bangkok"));
\r
1335 boolean isFrozen = false;
\r
1337 gp.setDateFormat(GlobalizationPreferences.DF_LONG, GlobalizationPreferences.DF_NONE, customLD);
\r
1338 } catch (UnsupportedOperationException uoe) {
\r
1339 logln("setDateFormat is blocked");
\r
1343 errln("FAIL: setDateFormat must be blocked after frozen");
\r
1346 // Modifiable clone
\r
1347 logln("cloneAsThawed");
\r
1348 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
1349 gp1.setDateFormat(GlobalizationPreferences.DF_LONG, GlobalizationPreferences.DF_NONE, customLD);
\r
1351 df = gp1.getDateFormat(GlobalizationPreferences.DF_SHORT, GlobalizationPreferences.DF_SHORT);
\r
1352 dfCal = df.getCalendar();
\r
1353 if (!(dfCal instanceof JapaneseCalendar)) {
\r
1354 errln("FAIL: The DateFormat instance must use Japanese calendar");
\r
1356 // TimeZone must be still America/Sao_Paulo
\r
1357 tzid = df.getTimeZone().getID();
\r
1358 if (!tzid.equals("America/Sao_Paulo")) {
\r
1359 errln("FAIL: The DateFormat instance must use timezone America/Sao_Paulo");
\r
1362 df = gp1.getDateFormat(GlobalizationPreferences.DF_LONG, GlobalizationPreferences.DF_NONE);
\r
1363 dfCal = df.getCalendar();
\r
1364 if (!(dfCal instanceof BuddhistCalendar)) {
\r
1365 errln("FAIL: The DateFormat instance must use Buddhist calendar");
\r
1367 // TimeZone must be still America/Sao_Paulo
\r
1368 tzid = df.getTimeZone().getID();
\r
1369 if (!tzid.equals("America/Sao_Paulo")) {
\r
1370 errln("FAIL: The DateFormat instance must use timezone America/Sao_Paulo");
\r
1375 public void TestNumberFormat() {
\r
1376 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
1380 double num = 123456.789;
\r
1382 // Set unsupported locale with supported territory ang_KR
\r
1383 logln("Set locale - ang_KR");
\r
1384 gp.setLocale(new ULocale("ang_KR"));
\r
1385 nf = gp.getNumberFormat(GlobalizationPreferences.NF_CURRENCY);
\r
1386 numStr = nf.format(num);
\r
1387 if (!numStr.equals("\u20a9\u00a0123,457")) {
\r
1388 errln("FAIL: Number string is " + numStr + " Expected: \u20a9\u00a0123,457");
\r
1391 // Set locale - de_DE
\r
1392 logln("Set locale - de_DE");
\r
1393 gp.setLocale(new ULocale("de_DE"));
\r
1396 logln("NUMBER type");
\r
1397 nf = gp.getNumberFormat(GlobalizationPreferences.NF_NUMBER);
\r
1398 numStr = nf.format(num);
\r
1399 if (!numStr.equals("123.456,789")) {
\r
1400 errln("FAIL: Number string is " + numStr + " Expected: 123.456,789");
\r
1404 logln("CURRENCY type");
\r
1405 nf = gp.getNumberFormat(GlobalizationPreferences.NF_CURRENCY);
\r
1406 numStr = nf.format(num);
\r
1407 if (!numStr.equals("123.456,79\u00a0\u20AC")) {
\r
1408 errln("FAIL: Number string is " + numStr + " Expected: 123.456,79\u00a0\u20AC");
\r
1412 logln("PERCENT type");
\r
1413 nf = gp.getNumberFormat(GlobalizationPreferences.NF_PERCENT);
\r
1414 numStr = nf.format(num);
\r
1415 if (!numStr.equals("12.345.679\u00a0%")) {
\r
1416 errln("FAIL: Number string is " + numStr + " Expected: 12.345.679\u00a0%");
\r
1420 logln("SCIENTIFIC type");
\r
1421 nf = gp.getNumberFormat(GlobalizationPreferences.NF_SCIENTIFIC);
\r
1422 numStr = nf.format(num);
\r
1423 if (!numStr.equals("1,23456789E5")) {
\r
1424 errln("FAIL: Number string is " + numStr + " Expected: 1,23456789E5");
\r
1428 logln("INTEGER type");
\r
1429 nf = gp.getNumberFormat(GlobalizationPreferences.NF_INTEGER);
\r
1430 numStr = nf.format(num);
\r
1431 if (!numStr.equals("123.457")) {
\r
1432 errln("FAIL: Number string is " + numStr + " Expected: 123.457");
\r
1435 // Invalid number type
\r
1436 logln("INVALID type");
\r
1437 boolean illegalArg = false;
\r
1439 nf = gp.getNumberFormat(100);
\r
1440 } catch (IllegalArgumentException iae) {
\r
1441 logln("Illegal number format type 100");
\r
1442 illegalArg = true;
\r
1444 if (!illegalArg) {
\r
1445 errln("FAIL: getNumberFormat must throw IllegalArgumentException for type 100");
\r
1447 illegalArg = false;
\r
1449 nf = gp.getNumberFormat(-1);
\r
1450 } catch (IllegalArgumentException iae) {
\r
1451 logln("Illegal number format type -1");
\r
1452 illegalArg = true;
\r
1454 if (!illegalArg) {
\r
1455 errln("FAIL: getNumberFormat must throw IllegalArgumentException for type -1");
\r
1458 // Set explicit territory
\r
1459 logln("Set territory - US");
\r
1460 gp.setTerritory("US");
\r
1461 nf = gp.getNumberFormat(GlobalizationPreferences.NF_CURRENCY);
\r
1462 numStr = nf.format(num);
\r
1463 if (!numStr.equals("123.456,79\u00a0$")) {
\r
1464 errln("FAIL: Number string is " + numStr + " Expected: 123.456,79\u00a0$");
\r
1467 // Set explicit currency
\r
1468 logln("Set currency - GBP");
\r
1469 gp.setCurrency(Currency.getInstance("GBP"));
\r
1470 nf = gp.getNumberFormat(GlobalizationPreferences.NF_CURRENCY);
\r
1471 numStr = nf.format(num);
\r
1472 if (!numStr.equals("123.456,79\u00a0\u00A3")) {
\r
1473 errln("FAIL: Number string is " + numStr + " Expected: 123.456,79\u00a0\u00A3");
\r
1476 // Set exliplicit NumberFormat
\r
1477 logln("Set explicit NumberFormat objects");
\r
1478 NumberFormat customNum = NumberFormat.getNumberInstance(new ULocale("he_IL"));
\r
1479 gp.setNumberFormat(GlobalizationPreferences.NF_NUMBER, customNum);
\r
1480 NumberFormat customCur = NumberFormat.getCurrencyInstance(new ULocale("zh_CN"));
\r
1481 gp.setNumberFormat(GlobalizationPreferences.NF_CURRENCY, customCur);
\r
1482 NumberFormat customPct = NumberFormat.getPercentInstance(new ULocale("el_GR"));
\r
1483 gp.setNumberFormat(GlobalizationPreferences.NF_PERCENT, customPct);
\r
1484 NumberFormat customSci = NumberFormat.getScientificInstance(new ULocale("ru_RU"));
\r
1485 gp.setNumberFormat(GlobalizationPreferences.NF_SCIENTIFIC, customSci);
\r
1486 NumberFormat customInt = NumberFormat.getIntegerInstance(new ULocale("pt_PT"));
\r
1487 gp.setNumberFormat(GlobalizationPreferences.NF_INTEGER, customInt);
\r
1490 nf = gp.getNumberFormat(GlobalizationPreferences.NF_NUMBER);
\r
1491 if (!nf.getLocale(ULocale.VALID_LOCALE).toString().equals("he_IL")) {
\r
1492 errln("FAIL: The NumberFormat instance must use locale he_IL");
\r
1494 nf = gp.getNumberFormat(GlobalizationPreferences.NF_CURRENCY);
\r
1495 if (!nf.getLocale(ULocale.VALID_LOCALE).toString().equals("zh_CN")) {
\r
1496 errln("FAIL: The NumberFormat instance must use locale zh_CN");
\r
1498 nf = gp.getNumberFormat(GlobalizationPreferences.NF_PERCENT);
\r
1499 if (!nf.getLocale(ULocale.VALID_LOCALE).toString().equals("el_GR")) {
\r
1500 errln("FAIL: The NumberFormat instance must use locale el_GR");
\r
1502 nf = gp.getNumberFormat(GlobalizationPreferences.NF_SCIENTIFIC);
\r
1503 if (!nf.getLocale(ULocale.VALID_LOCALE).toString().equals("ru_RU")) {
\r
1504 errln("FAIL: The NumberFormat instance must use locale ru_RU");
\r
1506 nf = gp.getNumberFormat(GlobalizationPreferences.NF_INTEGER);
\r
1507 if (!nf.getLocale(ULocale.VALID_LOCALE).toString().equals("pt_PT")) {
\r
1508 errln("FAIL: The NumberFormat instance must use locale pt_PT");
\r
1511 NumberFormat customNum1 = NumberFormat.getNumberInstance(new ULocale("hi_IN"));
\r
1514 logln("Freeze this object");
\r
1515 boolean isFrozen = false;
\r
1518 gp.setNumberFormat(GlobalizationPreferences.NF_NUMBER, customNum1);
\r
1519 } catch (UnsupportedOperationException uoe) {
\r
1520 logln("setNumberFormat is blocked");
\r
1524 errln("FAIL: setNumberFormat must be blocked after frozen");
\r
1527 // Create a modifiable clone
\r
1528 GlobalizationPreferences gp1 = (GlobalizationPreferences)gp.cloneAsThawed();
\r
1530 // Number type format's locale is still he_IL
\r
1531 nf = gp1.getNumberFormat(GlobalizationPreferences.NF_NUMBER);
\r
1532 if (!nf.getLocale(ULocale.VALID_LOCALE).toString().equals("he_IL")) {
\r
1533 errln("FAIL: The NumberFormat instance must use locale he_IL");
\r
1536 logln("Set custom number format using locale hi_IN");
\r
1537 gp1.setNumberFormat(GlobalizationPreferences.NF_NUMBER, customNum1);
\r
1538 nf = gp1.getNumberFormat(GlobalizationPreferences.NF_NUMBER);
\r
1539 if (!nf.getLocale(ULocale.VALID_LOCALE).toString().equals("hi_IN")) {
\r
1540 errln("FAIL: The NumberFormat instance must use locale hi_IN");
\r
1545 * JB#5380 GlobalizationPreferences#getCalendar() should return a Calendar object
\r
1546 * initialized with the current time
\r
1548 public void TestJB5380() {
\r
1549 GlobalizationPreferences gp = new GlobalizationPreferences();
\r
1550 GregorianCalendar gcal = new GregorianCalendar();
\r
1552 // set way old date
\r
1553 gcal.set(Calendar.YEAR, 1950);
\r
1555 // set calendar to GP
\r
1556 gp.setCalendar(gcal);
\r
1558 Calendar cal = gp.getCalendar();
\r
1559 // Calendar instance returned from GP should be initialized
\r
1560 // by the current time
\r
1561 long timeDiff = System.currentTimeMillis() - cal.getTimeInMillis();
\r
1562 if (Math.abs(timeDiff) > 1000) {
\r
1563 // if difference is more than 1 second..
\r
1564 errln("FAIL: The Calendar was not initialized by current time - difference:" + timeDiff);
\r