]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/util/LocaleBuilderTest.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / util / LocaleBuilderTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2009, International Business Machines Corporation and         *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.dev.test.util;\r
8 \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
14 \r
15 /**\r
16  * Test cases for ULocale.LocaleBuilder\r
17  */\r
18 public class LocaleBuilderTest extends TestFmwk {\r
19 \r
20     public static void main(String[] args) throws Exception {\r
21         new LocaleBuilderTest().run(args);\r
22     }\r
23 \r
24     public void TestLocaleBuilder() {\r
25         // "L": +1 = language\r
26         // "S": +1 = script\r
27         // "R": +1 = region\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
37             {"L", "123", "X"},\r
38             {"R", "us", "T", "und-us", "_US"},\r
39             {"R", "usa", "X"},\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
53         };\r
54 \r
55         Builder bld = new Builder();\r
56         for (int tidx = 0; tidx < TESTCASE.length; tidx++) {\r
57             bld.clear();\r
58             int i = 0;\r
59             String[] expected = null;\r
60             while (true) {\r
61                 String method = TESTCASE[tidx][i++];\r
62                 try {\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
88                         break;\r
89                     }\r
90                 } catch (IllformedLocaleException e) {\r
91                     if (TESTCASE[tidx][i].equals("X")) {\r
92                         // This exception is expected\r
93                         break;\r
94                     } else {\r
95                         errln("FAIL: IllformedLocaleException at offset " + i\r
96                                 + " in test case: " + Utility.arrayToString(TESTCASE[tidx]));\r
97                     }\r
98                 }\r
99             }\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
105                 }\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
110                 }\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
114                 }\r
115             }\r
116         }\r
117     }\r
118 \r
119     public void TestSetLocale() {\r
120         ULocale loc = new ULocale("th_TH@calendar=gregorian");\r
121         Builder bld = new Builder();\r
122         try {\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
127             }\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
133             }            \r
134         } catch (IllformedLocaleException e) {\r
135             errln("FAIL: IllformedLocaleException: " + e.getMessage());\r
136         }\r
137     }\r
138 }\r