2 *******************************************************************************
\r
3 * Copyright (C) 2009-2010, 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 java.util.Arrays;
\r
11 import com.ibm.icu.dev.test.TestFmwk;
\r
12 import com.ibm.icu.util.IllformedLocaleException;
\r
13 import com.ibm.icu.util.ULocale;
\r
14 import com.ibm.icu.util.ULocale.Builder;
\r
17 * Test cases for ULocale.LocaleBuilder
\r
19 public class LocaleBuilderTest extends TestFmwk {
\r
21 public static void main(String[] args) throws Exception {
\r
22 new LocaleBuilderTest().run(args);
\r
25 public void TestLocaleBuilder() {
\r
26 // First String "st": strict (default) / "lv": lenient variant
\r
27 // "L": +1 = language
\r
30 // "V": +1 = variant
\r
31 // "K": +1 = LDML key / +2 = LDML type
\r
32 // "E": +1 = extension letter / +2 = extension value
\r
33 // "P": +1 = private use
\r
34 // "X": indicates an exception must be thrown
\r
35 // "T": +1 = expected language tag
\r
36 String[][] TESTCASE = {
\r
37 {"st", "L", "en", "R", "us", "T", "en-US", "en_US"},
\r
38 {"st", "L", "en", "R", "FR", "L", "fr", "T", "fr-FR", "fr_FR"},
\r
39 {"st", "L", "123", "X"},
\r
40 {"st", "R", "us", "T", "und-US", "_US"},
\r
41 {"st", "R", "usa", "X"},
\r
42 {"st", "R", "123", "L", "en", "T", "en-123", "en_123"},
\r
43 {"st", "S", "LATN", "L", "DE", "T", "de-Latn", "de_Latn"},
\r
44 {"st", "S", "latin", "X"},
\r
45 {"st", "L", "th", "R", "th", "K", "nu", "thai", "T", "th-TH-u-nu-thai", "th_TH@numbers=thai"},
\r
46 {"st", "E", "z", "ExtZ", "L", "en", "T", "en-z-extz", "en@z=extz"},
\r
47 {"st", "L", "fr", "R", "FR", "P", "Yoshito-ICU", "T", "fr-FR-x-yoshito-icu", "fr_FR@x=yoshito-icu"},
\r
48 {"st", "L", "ja", "R", "jp", "K", "ca", "japanese", "T", "ja-JP-u-ca-japanese", "ja_JP@calendar=japanese"},
\r
49 {"st", "K", "co", "PHONEBK", "K", "ca", "gregory", "L", "De", "T", "de-u-ca-gregory-co-phonebk", "de@calendar=gregorian;collation=phonebook"},
\r
50 {"st", "E", "o", "OPQR", "E", "a", "aBcD", "T", "und-a-abcd-o-opqr", "@a=abcd;o=opqr"},
\r
51 {"st", "E", "u", "nu-thai-ca-gregory", "L", "TH", "T", "th-u-ca-gregory-nu-thai", "th@calendar=gregorian;numbers=thai"},
\r
52 {"st", "L", "en", "K", "tz", "usnyc", "R", "US", "T", "en-US-u-tz-usnyc", "en_US@timezone=America/New_York"},
\r
53 {"st", "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
54 {"lv", "L", "en", "R", "us", "V", "Windows_XP", "T", "en-US-windows-x-variant-xp", "en_US_WINDOWS_XP"},
\r
57 Builder bld_st = new Builder();
\r
58 Builder bld_lv = new Builder(true);
\r
60 for (int tidx = 0; tidx < TESTCASE.length; tidx++) {
\r
62 String[] expected = null;
\r
64 Builder bld = bld_st;
\r
65 String bldType = TESTCASE[tidx][i++];
\r
67 if (bldType.equals("lv")) {
\r
74 String method = TESTCASE[tidx][i++];
\r
76 if (method.equals("L")) {
\r
77 bld.setLanguage(TESTCASE[tidx][i++]);
\r
78 } else if (method.equals("S")) {
\r
79 bld.setScript(TESTCASE[tidx][i++]);
\r
80 } else if (method.equals("R")) {
\r
81 bld.setRegion(TESTCASE[tidx][i++]);
\r
82 } else if (method.equals("V")) {
\r
83 bld.setVariant(TESTCASE[tidx][i++]);
\r
84 } else if (method.equals("K")) {
\r
85 String key = TESTCASE[tidx][i++];
\r
86 String type = TESTCASE[tidx][i++];
\r
87 bld.setUnicodeLocaleKeyword(key, type);
\r
88 } else if (method.equals("E")) {
\r
89 String key = TESTCASE[tidx][i++];
\r
90 String value = TESTCASE[tidx][i++];
\r
91 bld.setExtension(key.charAt(0), value);
\r
92 } else if (method.equals("P")) {
\r
93 bld.setExtension(ULocale.PRIVATE_USE_EXTENSION, TESTCASE[tidx][i++]);
\r
94 } else if (method.equals("X")) {
\r
95 errln("FAIL: No excetion was thrown - test csae: "
\r
96 + Arrays.toString(TESTCASE[tidx]));
\r
97 } else if (method.equals("T")) {
\r
98 expected = new String[2];
\r
99 expected[0] = TESTCASE[tidx][i];
\r
100 expected[1] = TESTCASE[tidx][i + 1];
\r
103 } catch (IllformedLocaleException e) {
\r
104 if (TESTCASE[tidx][i].equals("X")) {
\r
105 // This exception is expected
\r
108 errln("FAIL: IllformedLocaleException at offset " + i
\r
109 + " in test case: " + Arrays.toString(TESTCASE[tidx]));
\r
113 if (expected != null) {
\r
114 ULocale loc = bld.build();
\r
115 if (!expected[1].equals(loc.toString())) {
\r
116 errln("FAIL: Wrong locale ID - " + loc +
\r
117 " for test case: " + Arrays.toString(TESTCASE[tidx]));
\r
119 String langtag = loc.toLanguageTag();
\r
120 if (!expected[0].equals(langtag)) {
\r
121 errln("FAIL: Wrong language tag - " + langtag +
\r
122 " for test case: " + Arrays.toString(TESTCASE[tidx]));
\r
124 ULocale loc1 = ULocale.forLanguageTag(langtag);
\r
125 if (!loc.equals(loc1)) {
\r
126 errln("FAIL: Language tag round trip failed for " + loc);
\r
132 public void TestSetLocale() {
\r
133 ULocale loc = new ULocale("th_TH@calendar=gregorian");
\r
134 Builder bld = new Builder();
\r
136 bld.setLocale(loc);
\r
137 ULocale loc1 = bld.build();
\r
138 if (!loc.equals(loc1)) {
\r
139 errln("FAIL: Locale loc1 " + loc1 + " was returned by the builder. Expected " + loc);
\r
141 bld.setLanguage("").setUnicodeLocaleKeyword("ca", "buddhist")
\r
142 .setLanguage("TH").setUnicodeLocaleKeyword("ca", "gregory");
\r
143 ULocale loc2 = bld.build();
\r
144 if (!loc.equals(loc2)) {
\r
145 errln("FAIL: Locale loc2 " + loc2 + " was returned by the builder. Expected " + loc);
\r
147 } catch (IllformedLocaleException e) {
\r
148 errln("FAIL: IllformedLocaleException: " + e.getMessage());
\r