]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/util/LocaleBuilderTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / util / LocaleBuilderTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2009-2010, 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 java.util.Arrays;\r
10 \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
15 \r
16 /**\r
17  * Test cases for ULocale.LocaleBuilder\r
18  */\r
19 public class LocaleBuilderTest extends TestFmwk {\r
20 \r
21     public static void main(String[] args) throws Exception {\r
22         new LocaleBuilderTest().run(args);\r
23     }\r
24 \r
25     public void TestLocaleBuilder() {\r
26         // First String "st": strict (default) / "lv": lenient variant\r
27         // "L": +1 = language\r
28         // "S": +1 = script\r
29         // "R": +1 = region\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
55         };\r
56 \r
57         Builder bld_st = new Builder();\r
58         Builder bld_lv = new Builder(true);\r
59 \r
60         for (int tidx = 0; tidx < TESTCASE.length; tidx++) {\r
61             int i = 0;\r
62             String[] expected = null;\r
63 \r
64             Builder bld = bld_st;\r
65             String bldType = TESTCASE[tidx][i++];\r
66 \r
67             if (bldType.equals("lv")) {\r
68                 bld = bld_lv;\r
69             }\r
70 \r
71             bld.clear();\r
72 \r
73             while (true) {\r
74                 String method = TESTCASE[tidx][i++];\r
75                 try {\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
101                         break;\r
102                     }\r
103                 } catch (IllformedLocaleException e) {\r
104                     if (TESTCASE[tidx][i].equals("X")) {\r
105                         // This exception is expected\r
106                         break;\r
107                     } else {\r
108                         errln("FAIL: IllformedLocaleException at offset " + i\r
109                                 + " in test case: " + Arrays.toString(TESTCASE[tidx]));\r
110                     }\r
111                 }\r
112             }\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
118                 }\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
123                 }\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
127                 }\r
128             }\r
129         }\r
130     }\r
131 \r
132     public void TestSetLocale() {\r
133         ULocale loc = new ULocale("th_TH@calendar=gregorian");\r
134         Builder bld = new Builder();\r
135         try {\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
140             }\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
146             }            \r
147         } catch (IllformedLocaleException e) {\r
148             errln("FAIL: IllformedLocaleException: " + e.getMessage());\r
149         }\r
150     }\r
151 }\r