2 *******************************************************************************
\r
3 * Copyright (C) 2007-2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.test.format;
\r
9 import com.ibm.icu.dev.test.TestFmwk;
\r
10 import com.ibm.icu.impl.Utility;
\r
11 import com.ibm.icu.text.PluralFormat;
\r
12 import com.ibm.icu.util.ULocale;
\r
14 import java.util.HashMap;
\r
15 import java.util.Map;
\r
18 * @author tschumann (Tim Schumann)
\r
21 public class PluralFormatTest extends TestFmwk {
\r
23 public static void main(String[] args) throws Exception {
\r
24 new PluralFormatTest().run(args);
\r
27 private void helperTestRules(String localeIDs, String testPattern, Map changes) {
\r
28 String[] locales = Utility.split(localeIDs, ',');
\r
30 // Create example outputs for all supported locales.
\r
32 System.out.println("\n" + localeIDs);
\r
33 String lastValue = (String) changes.get(new Integer(0));
\r
34 int lastNumber = 0;
\r
36 for (int i = 1; i < 199; ++i) {
\r
37 if (changes.get(new Integer(i)) != null) {
\r
38 if (lastNumber == i-1) {
\r
39 System.out.println(lastNumber + ": " + lastValue);
\r
41 System.out.println(lastNumber + "... " + (i-1) + ": " + lastValue);
\r
44 lastValue = (String) changes.get(new Integer(i));
\r
47 System.out.println(lastNumber + "..." + 199 + ": " + lastValue);
\r
49 log("test pattern: '" + testPattern + "'");
\r
50 for (int i = 0; i < locales.length; ++i) {
\r
52 PluralFormat plf = new PluralFormat(new ULocale(locales[i]), testPattern);
\r
54 String expected = (String) changes.get(new Integer(0));
\r
55 for (int n = 0; n < 200; ++n) {
\r
56 if (changes.get(new Integer(n)) != null) {
\r
57 expected = (String) changes.get(new Integer(n));
\r
59 assertEquals("Locale: " + locales[i] + ", number: " + n,
\r
60 expected, plf.format(n));
\r
62 } catch (IllegalArgumentException e) {
\r
63 errln(e.getMessage() + " locale: " + locales[i] + " pattern: '" + testPattern + "' " + System.currentTimeMillis());
\r
68 public void TestOneFormLocales() {
\r
69 String localeIDs = "ja,ko,tr,vi";
\r
70 String testPattern = "other{other}";
\r
71 Map changes = new HashMap();
\r
72 changes.put(new Integer(0), "other");
\r
73 helperTestRules(localeIDs, testPattern, changes);
\r
76 public void TestSingular1Locales() {
\r
77 String localeIDs = "da,de,el,en,eo,es,et,fi,fo,he,it,nb,nl,nn,no,pt_PT,sv";
\r
78 String testPattern = "one{one} other{other}";
\r
79 Map changes = new HashMap();
\r
80 changes.put(new Integer(0), "other");
\r
81 changes.put(new Integer(1), "one");
\r
82 changes.put(new Integer(2), "other");
\r
83 helperTestRules(localeIDs, testPattern, changes);
\r
86 public void TestSingular01Locales() {
\r
87 String localeIDs = "fr,pt_BR";
\r
88 String testPattern = "one{one} other{other}";
\r
89 Map changes = new HashMap();
\r
90 changes.put(new Integer(0), "one");
\r
91 changes.put(new Integer(2), "other");
\r
92 helperTestRules(localeIDs, testPattern, changes);
\r
95 public void TestZeroSingularLocales() {
\r
96 String localeIDs = "lv";
\r
97 String testPattern = "zero{zero} one{one} other{other}";
\r
98 Map changes = new HashMap();
\r
99 changes.put(new Integer(0), "zero");
\r
100 changes.put(new Integer(1), "one");
\r
101 changes.put(new Integer(2), "other");
\r
102 for (int i = 2; i < 20; ++i) {
\r
106 changes.put(new Integer(i*10 + 1), "one");
\r
107 changes.put(new Integer(i*10 + 2), "other");
\r
109 helperTestRules(localeIDs, testPattern, changes);
\r
112 public void TestSingularDual() {
\r
113 String localeIDs = "ga";
\r
114 String testPattern = "one{one} two{two} other{other}";
\r
115 Map changes = new HashMap();
\r
116 changes.put(new Integer(0), "other");
\r
117 changes.put(new Integer(1), "one");
\r
118 changes.put(new Integer(2), "two");
\r
119 changes.put(new Integer(3), "other");
\r
120 helperTestRules(localeIDs, testPattern, changes);
\r
123 public void TestSingularZeroSome() {
\r
124 String localeIDs = "ro";
\r
125 String testPattern = "few{few} one{one} other{other}";
\r
126 Map changes = new HashMap();
\r
127 changes.put(new Integer(0), "few");
\r
128 changes.put(new Integer(1), "one");
\r
129 changes.put(new Integer(2), "few");
\r
130 changes.put(new Integer(20), "other");
\r
131 changes.put(new Integer(101), "few");
\r
132 changes.put(new Integer(120), "other");
\r
133 helperTestRules(localeIDs, testPattern, changes);
\r
136 public void TestSpecial12_19() {
\r
137 String localeIDs = "lt";
\r
138 String testPattern = "one{one} few{few} other{other}";
\r
139 Map changes = new HashMap();
\r
140 changes.put(new Integer(0), "other");
\r
141 changes.put(new Integer(1), "one");
\r
142 changes.put(new Integer(2), "few");
\r
143 changes.put(new Integer(10), "other");
\r
144 for (int i = 2; i < 20; ++i) {
\r
148 changes.put(new Integer(i*10 + 1), "one");
\r
149 changes.put(new Integer(i*10 + 2), "few");
\r
150 changes.put(new Integer((i+1)*10), "other");
\r
152 helperTestRules(localeIDs, testPattern, changes);
\r
155 public void TestPaucalExcept11_14() {
\r
156 String localeIDs = "hr,ru,sr,uk";
\r
157 String testPattern = "one{one} few{few} other{other}";
\r
158 Map changes = new HashMap();
\r
159 changes.put(new Integer(0), "other");
\r
160 changes.put(new Integer(1), "one");
\r
161 changes.put(new Integer(2), "few");
\r
162 changes.put(new Integer(5), "other");
\r
163 for (int i = 2; i < 20; ++i) {
\r
167 changes.put(new Integer(i*10 + 1), "one");
\r
168 changes.put(new Integer(i*10 + 2), "few");
\r
169 changes.put(new Integer(i*10 + 5), "other");
\r
171 helperTestRules(localeIDs, testPattern, changes);
\r
174 public void TestSingularPaucal() {
\r
175 String localeIDs = "cs,sk";
\r
176 String testPattern = "one{one} few{few} other{other}";
\r
177 Map changes = new HashMap();
\r
178 changes.put(new Integer(0), "other");
\r
179 changes.put(new Integer(1), "one");
\r
180 changes.put(new Integer(2), "few");
\r
181 changes.put(new Integer(5), "other");
\r
182 helperTestRules(localeIDs, testPattern, changes);
\r
185 public void TestPaucal1_234() {
\r
186 String localeIDs = "pl";
\r
187 String testPattern = "one{one} few{few} other{other}";
\r
188 Map changes = new HashMap();
\r
189 changes.put(new Integer(0), "other");
\r
190 changes.put(new Integer(1), "one");
\r
191 changes.put(new Integer(2), "few");
\r
192 changes.put(new Integer(5), "other");
\r
193 for (int i = 2; i < 20; ++i) {
\r
194 if (i == 2 || i == 11 || i == 12) {
\r
197 changes.put(new Integer(i*10 + 2), "few");
\r
198 changes.put(new Integer(i*10 + 5), "other");
\r
200 helperTestRules(localeIDs, testPattern, changes);
\r
203 public void TestPaucal1_2_34() {
\r
204 String localeIDs = "sl";
\r
205 String testPattern = "one{one} two{two} few{few} other{other}";
\r
206 Map changes = new HashMap();
\r
207 changes.put(new Integer(0), "other");
\r
208 changes.put(new Integer(1), "one");
\r
209 changes.put(new Integer(2), "two");
\r
210 changes.put(new Integer(3), "few");
\r
211 changes.put(new Integer(5), "other");
\r
212 changes.put(new Integer(101), "one");
\r
213 changes.put(new Integer(102), "two");
\r
214 changes.put(new Integer(103), "few");
\r
215 changes.put(new Integer(105), "other");
\r
216 helperTestRules(localeIDs, testPattern, changes);
\r