2 *******************************************************************************
\r
3 * Copyright (C) 2009, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.test.util;
\r
9 import com.ibm.icu.dev.test.TestFmwk;
\r
10 import com.ibm.icu.impl.Utility;
\r
11 import com.ibm.icu.util.IllformedLocaleException;
\r
12 import com.ibm.icu.util.ULocale;
\r
13 import com.ibm.icu.util.ULocale.Builder;
\r
16 * Test cases for ULocale.LocaleBuilder
\r
18 public class LocaleBuilderTest extends TestFmwk {
\r
20 public static void main(String[] args) throws Exception {
\r
21 new LocaleBuilderTest().run(args);
\r
24 public void TestLocaleBuilder() {
\r
25 // "L": +1 = language
\r
28 // "V": +1 = variant
\r
29 // "K": +1 = LDML key / +2 = LDML type
\r
30 // "E": +1 = extension letter / +2 = extension value
\r
31 // "P": +1 = private use
\r
32 // "X": indicates an exception must be thrown
\r
33 // "T": +1 = expected language tag
\r
34 String[][] TESTCASE = {
\r
35 {"L", "en", "R", "us", "T", "en-us", "en_US"},
\r
36 {"L", "en", "R", "FR", "L", "fr", "T", "fr-fr", "fr_FR"},
\r
38 {"R", "us", "T", "und-us", "_US"},
\r
40 {"R", "123", "L", "en", "T", "en-123", "en_123"},
\r
41 {"S", "LATN", "L", "DE", "T", "de-latn", "de_Latn"},
\r
42 {"S", "latin", "X"},
\r
43 {"L", "th", "R", "th", "K", "nu", "thai", "T", "th-th-u-nu-thai", "th_TH@numbers=thai"},
\r
44 {"E", "z", "ExtZ", "L", "en", "T", "en-z-extz", "en@z=extz"},
\r
45 {"L", "fr", "R", "FR", "P", "Yoshito-ICU", "T", "fr-fr-x-yoshito-icu", "fr_FR@x=yoshito-icu"},
\r
46 {"L", "ja", "R", "jp", "K", "ca", "japanese", "T", "ja-jp-u-ca-japanese", "ja_JP@calendar=japanese"},
\r
47 {"K", "co", "PHONEBK", "K", "ca", "gregory", "L", "De", "T", "de-u-ca-gregory-co-phonebk", "de@calendar=gregorian;collation=phonebook"},
\r
48 {"E", "o", "OPQR", "E", "a", "aBcD", "T", "und-a-abcd-o-opqr", "@a=abcd;o=opqr"},
\r
49 {"E", "u", "nu-thai-ca-gregory", "L", "TH", "T", "th-u-ca-gregory-nu-thai", "th@calendar=gregorian;numbers=thai"},
\r
50 {"L", "en", "K", "tz", "usnyc", "R", "US", "T", "en-us-u-tz-usnyc", "en_US@timezone=america/new_york"},
\r
51 {"L", "de", "K", "co", "phonebk", "K", "ks", "level1", "K", "kk", "true", "T", "de-u-co-phonebk-kk-true-ks-level1", "de@collation=phonebook;colnormalization=yes;colstrength=primary"},
\r
52 // {"L", "en", "V", "foooo_barrr", "T", "en-foooo-barrr", "en__FOOOO_BARRR"},
\r
55 Builder bld = new Builder();
\r
56 for (int tidx = 0; tidx < TESTCASE.length; tidx++) {
\r
59 String[] expected = null;
\r
61 String method = TESTCASE[tidx][i++];
\r
63 if (method.equals("L")) {
\r
64 bld.setLanguage(TESTCASE[tidx][i++]);
\r
65 } else if (method.equals("S")) {
\r
66 bld.setScript(TESTCASE[tidx][i++]);
\r
67 } else if (method.equals("R")) {
\r
68 bld.setRegion(TESTCASE[tidx][i++]);
\r
69 } else if (method.equals("V")) {
\r
70 bld.setVariant(TESTCASE[tidx][i++]);
\r
71 } else if (method.equals("K")) {
\r
72 String key = TESTCASE[tidx][i++];
\r
73 String type = TESTCASE[tidx][i++];
\r
74 bld.setLDMLExtensionValue(key, type);
\r
75 } else if (method.equals("E")) {
\r
76 String key = TESTCASE[tidx][i++];
\r
77 String value = TESTCASE[tidx][i++];
\r
78 bld.setExtension(key.charAt(0), value);
\r
79 } else if (method.equals("P")) {
\r
80 bld.setExtension(ULocale.PRIVATE_USE_EXTENSION, TESTCASE[tidx][i++]);
\r
81 } else if (method.equals("X")) {
\r
82 errln("FAIL: No excetion was thrown - test csae: "
\r
83 + Utility.arrayToString(TESTCASE[tidx]));
\r
84 } else if (method.equals("T")) {
\r
85 expected = new String[2];
\r
86 expected[0] = TESTCASE[tidx][i];
\r
87 expected[1] = TESTCASE[tidx][i + 1];
\r
90 } catch (IllformedLocaleException e) {
\r
91 if (TESTCASE[tidx][i].equals("X")) {
\r
92 // This exception is expected
\r
95 errln("FAIL: IllformedLocaleException at offset " + i
\r
96 + " in test case: " + Utility.arrayToString(TESTCASE[tidx]));
\r
100 if (expected != null) {
\r
101 ULocale loc = bld.create();
\r
102 if (!expected[1].equals(loc.toString())) {
\r
103 errln("FAIL: Wrong locale ID - " + loc +
\r
104 " for test case: " + Utility.arrayToString(TESTCASE[tidx]));
\r
106 String langtag = loc.toLanguageTag();
\r
107 if (!expected[0].equals(langtag)) {
\r
108 errln("FAIL: Wrong language tag - " + langtag +
\r
109 " for test case: " + Utility.arrayToString(TESTCASE[tidx]));
\r
111 ULocale loc1 = ULocale.forLanguageTag(langtag);
\r
112 if (!loc.equals(loc1)) {
\r
113 errln("FAIL: Language tag round trip failed for " + loc);
\r
119 public void TestSetLocale() {
\r
120 ULocale loc = new ULocale("th_TH@calendar=gregorian");
\r
121 Builder bld = new Builder();
\r
123 bld.setLocale(loc);
\r
124 ULocale loc1 = bld.create();
\r
125 if (!loc.equals(loc1)) {
\r
126 errln("FAIL: Locale loc1 " + loc1 + " was returned by the builder. Expected " + loc);
\r
128 bld.setLanguage("").setLDMLExtensionValue("ca", "buddhist")
\r
129 .setLanguage("TH").setLDMLExtensionValue("ca", "gregory");
\r
130 ULocale loc2 = bld.create();
\r
131 if (!loc.equals(loc2)) {
\r
132 errln("FAIL: Locale loc2 " + loc2 + " was returned by the builder. Expected " + loc);
\r
134 } catch (IllformedLocaleException e) {
\r
135 errln("FAIL: IllformedLocaleException: " + e.getMessage());
\r