]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/duration/LanguageTestRoot.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / duration / LanguageTestRoot.java
1 /*\r
2 ******************************************************************************\r
3 * Copyright (C) 2007-2010, International Business Machines Corporation and   *\r
4 * others. All Rights Reserved.                                               *\r
5 ******************************************************************************\r
6 */\r
7 \r
8 // Copyright 2006 Google Inc.  All Rights Reserved.\r
9 \r
10 package com.ibm.icu.dev.test.duration;\r
11 \r
12 import java.io.BufferedReader;\r
13 import java.io.InputStream;\r
14 import java.io.InputStreamReader;\r
15 import java.io.PrintWriter;\r
16 import java.util.ArrayList;\r
17 import java.util.HashMap;\r
18 import java.util.List;\r
19 import java.util.Map;\r
20 \r
21 import com.ibm.icu.dev.test.TestFmwk;\r
22 import com.ibm.icu.impl.duration.BasicPeriodFormatterService;\r
23 import com.ibm.icu.impl.duration.Period;\r
24 import com.ibm.icu.impl.duration.PeriodBuilder;\r
25 import com.ibm.icu.impl.duration.PeriodBuilderFactory;\r
26 import com.ibm.icu.impl.duration.PeriodFormatter;\r
27 import com.ibm.icu.impl.duration.PeriodFormatterFactory;\r
28 import com.ibm.icu.impl.duration.TimeUnit;\r
29 import com.ibm.icu.impl.duration.TimeUnitConstants;\r
30 import com.ibm.icu.impl.duration.impl.DataRecord.ECountVariant;\r
31 import com.ibm.icu.impl.duration.impl.DataRecord.EUnitVariant;\r
32 \r
33 /**\r
34  * Test cases for en\r
35  */\r
36 public class LanguageTestRoot extends TestFmwk implements TimeUnitConstants {\r
37 \r
38     private static final TimeUnit[] units = {\r
39         TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.WEEK, TimeUnit.DAY, TimeUnit.HOUR, \r
40         TimeUnit.MINUTE, TimeUnit.SECOND, TimeUnit.MILLISECOND\r
41     };\r
42 \r
43     protected boolean inheritTargets() {\r
44         return true;\r
45     }\r
46 \r
47     private static final BasicPeriodFormatterService pfs = BasicPeriodFormatterService\r
48             .getInstance();\r
49 \r
50     private TestData data;\r
51     private String locale;\r
52 \r
53     //private DurationFormatterFactory dfFactory;\r
54     private PeriodFormatterFactory pfFactory;\r
55     private PeriodBuilderFactory pbFactory;\r
56 \r
57     private PrintWriter pw;\r
58 \r
59     private static final Map datacache = new HashMap(); // String->TestData\r
60 \r
61     private static final long[] approxDurations = {\r
62         36525L*24*60*60*10, 3045*24*60*60*10L, 7*24*60*60*1000L, 24*60*60*1000L, \r
63         60*60*1000L, 60*1000L, 1000L, 1L\r
64     };\r
65 \r
66     private static long approximateDuration(TimeUnit unit) {\r
67         return approxDurations[unit.ordinal()];\r
68     }\r
69 \r
70     private static TestData getTestData(String locale) {\r
71         // debug\r
72         if (locale.equals("testFullPluralizedForms")) {\r
73             Thread.dumpStack();\r
74         }\r
75         TestData data = (TestData) datacache.get(locale);\r
76         if (data == null) {\r
77             try {\r
78                 InputStream is = LanguageTestRoot.class\r
79                         .getResourceAsStream("testdata/testdata_" + locale\r
80                                 + ".txt");\r
81                 // debug\r
82                 if (is == null) {\r
83                     System.out.println("test data for locale '" + locale\r
84                             + "' is null");\r
85                 }\r
86                 InputStreamReader isr = new InputStreamReader(is, "UTF-8");\r
87                 data = new FileTestData(isr);\r
88             } catch (Exception e) {\r
89                 System.err.println(e.getMessage());\r
90                 // swallow any exception\r
91             }\r
92         }\r
93         return data;\r
94     }\r
95 \r
96     public LanguageTestRoot(String locale, boolean ignore) {\r
97         this(getTestData(locale), locale);\r
98     }\r
99 \r
100     public LanguageTestRoot(TestData data, String locale) {\r
101         if (data == null) {\r
102             data = DefaultData.getInstance();\r
103         }\r
104         this.data = data;\r
105         this.locale = locale;\r
106     }\r
107 \r
108     public static void writeData(PrintWriter pw, String locale)\r
109             throws Exception {\r
110         LanguageTestRoot test = new LanguageTestRoot(DefaultData.getInstance(),\r
111                 locale);\r
112         test.writeData(pw);\r
113     }\r
114 \r
115     private void writeData(PrintWriter writer) throws Exception {\r
116 /*\r
117       pw = writer;\r
118       setUp();\r
119       testFullPluralizedForms();\r
120       tearDown();\r
121       setUp();\r
122       testMediumForms();\r
123       tearDown();\r
124       setUp();\r
125       testShortForms();\r
126       tearDown();\r
127       setUp();\r
128       testCustomMinutes();\r
129       tearDown();\r
130       setUp();\r
131       testLimitedUnits();\r
132       tearDown();\r
133       setUp();\r
134       testHalfUnits();\r
135       tearDown();\r
136       setUp();\r
137       testFractionalUnits();\r
138       tearDown();\r
139       setUp();\r
140       testMultipleUnits();\r
141       tearDown();\r
142       pw = null;\r
143       writer.flush();\r
144 */\r
145     }\r
146 \r
147     protected void xAssertEquals(String msg, String[] expected, int n,\r
148             String actual) {\r
149         if (pw != null) {\r
150             pw.println(actual);\r
151         } else {\r
152             // java doesn't dump enough context to be useful, so do it myself\r
153             if (actual == null) {\r
154                 assertEquals(msg, expected[n], actual);\r
155             } else {\r
156                 if (!actual.equals(expected[n])) {\r
157                     fail("\n(!!"\r
158                             + msg\r
159                             + ") "\r
160                             + asciify("expected '" + expected[n]\r
161                                     + "' but got '" + actual + "'"));\r
162                 }\r
163             }\r
164         }\r
165     }\r
166 \r
167     protected static String timestring(Period ts) {\r
168         StringBuffer buf = new StringBuffer();\r
169         if (ts.isMoreThan()) {\r
170             buf.append("mt");\r
171         } else if (ts.isLessThan()) {\r
172             buf.append("lt");\r
173         }\r
174         for (int i = 0; i < units.length; ++i) {\r
175             TimeUnit p = units[i];\r
176             if (ts.isSet(p)) {\r
177                 buf.append(Float.toString(ts.getCount(p)));\r
178                 buf.append(p.toString().charAt(0));\r
179             }\r
180         }\r
181         buf.append(ts.isInPast() ? "p" : "f");\r
182         return buf.toString();\r
183     }\r
184 \r
185     protected static String asciify(String s) {\r
186         StringBuffer sb = null;\r
187         for (int i = 0, e = s.length(); i < e; ++i) {\r
188             char c = s.charAt(i);\r
189             if (c < 0x20 || c > 0x7e) {\r
190                 if (sb == null) {\r
191                     sb = new StringBuffer();\r
192                     sb.append(s.substring(0, i));\r
193                 }\r
194                 sb.append("\\u");\r
195                 if (c < 0x10) {\r
196                     sb.append("000");\r
197                 } else if (c < 0x100) {\r
198                     sb.append("00");\r
199                 } else if (c < 0x1000) {\r
200                     sb.append("0");\r
201                 }\r
202                 sb.append(Integer.toHexString(c));\r
203             } else {\r
204                 if (sb != null) {\r
205                     sb.append(c);\r
206                 }\r
207             }\r
208         }\r
209         if (sb != null) {\r
210             System.out.println("asciify '" + s + "' --> '" + sb.toString()\r
211                     + "'");\r
212         }\r
213         return sb == null ? s : sb.toString();\r
214     }\r
215 \r
216     private void xAssertEquals(String[] expected, int n, String actual) {\r
217         xAssertEquals(null, expected, n, actual);\r
218     }\r
219 \r
220     protected void setUp() throws Exception {\r
221         pfFactory = pfs.newPeriodFormatterFactory().setLocale(locale);\r
222         pbFactory = pfs.newPeriodBuilderFactory().setLocale(locale);\r
223     }\r
224 \r
225     public void testFullPluralizedForms() throws Exception {\r
226         setUp();\r
227         int[] counts = data.getFullPluralizedFormCounts();\r
228         String[] targets = data.getFullPluralizedFormTargets();\r
229         if (pw != null) {\r
230             pw.println("=fullPluralizedFormCounts");\r
231             for (int i = 0; i < counts.length; ++i) {\r
232                 int c = counts[i];\r
233                 pw.println(String.valueOf(c));\r
234             }\r
235             pw.println("=fullPluralizedFormTargets");\r
236         }\r
237 \r
238         int n = 0;\r
239         PeriodFormatter pf = pfFactory.getFormatter();\r
240         for (int i = 0; i < units.length; ++i) {\r
241             TimeUnit u = units[i];\r
242             // System.err.print("\nunit: " + u);\r
243             PeriodBuilder pb = pbFactory.getFixedUnitBuilder(u);\r
244             for (int j = 0; j < counts.length; ++j) {\r
245                 int c = counts[j];\r
246                 // System.err.println("\ncount[" + j + "]: " + c);\r
247                 Period p = pb.create(approximateDuration(u) * c);\r
248                 String string = pf.format(p);\r
249                 xAssertEquals(u.toString() + c, targets, n++, string);\r
250             }\r
251         }\r
252     }\r
253 \r
254     public void testMediumForms() throws Exception {\r
255         setUp();\r
256         String[] targets = data.getMediumFormTargets();\r
257 \r
258         if (pw != null) {\r
259             pw.println("=mediumFormTargets");\r
260         }\r
261 \r
262         pfFactory.setUnitVariant(EUnitVariant.MEDIUM);\r
263         pfFactory.setDisplayPastFuture(false);\r
264         PeriodFormatter pf = pfFactory.getFormatter();\r
265         int n = 0;\r
266         for (int i = 0; i < units.length; ++i) {\r
267             TimeUnit u = units[i];\r
268             PeriodBuilder pb = pbFactory.getFixedUnitBuilder(u);\r
269             Period p = pb.create(approximateDuration(u) * 3);\r
270             String string = pf.format(p);\r
271             xAssertEquals(u.toString(), targets, n++, string);\r
272         }\r
273     }\r
274 \r
275     public void testShortForms() throws Exception {\r
276         setUp();\r
277         String[] targets = data.getShortFormTargets();\r
278 \r
279         if (pw != null) {\r
280             pw.println("=shortFormTargets");\r
281         }\r
282 \r
283         pfFactory.setUnitVariant(EUnitVariant.SHORT);\r
284         pfFactory.setDisplayPastFuture(false);\r
285         PeriodFormatter pf = pfFactory.getFormatter();\r
286         int n = 0;\r
287         for (int i = 0; i < units.length; ++i) {\r
288             TimeUnit u = units[i];\r
289             PeriodBuilder pb = pbFactory.getFixedUnitBuilder(u);\r
290             Period p = pb.create(approximateDuration(u) * 3);\r
291             String string = pf.format(p);\r
292             xAssertEquals(u.toString(), targets, n++, string);\r
293         }\r
294     }\r
295 \r
296     public void testCustomMinutes() throws Exception {\r
297         setUp();\r
298         String[] targets = data.getCustomMinuteTargets();\r
299 \r
300         if (pw != null) {\r
301             pw.println("=customMinuteTargets");\r
302         }\r
303 \r
304         pfFactory.setCountVariant(ECountVariant.INTEGER_CUSTOM);\r
305         pfFactory.setDisplayPastFuture(false);\r
306         PeriodFormatter pf = pfFactory.getFormatter();\r
307 \r
308         Period p = Period.at(1, HOUR);\r
309         int n = 0;\r
310         for (int i = 1; i < 12; ++i) {\r
311             p = p.and(i * 5, MINUTE).omit(HOUR);\r
312             xAssertEquals(targets, n++, pf.format(p));\r
313             p = p.and(1, HOUR);\r
314             xAssertEquals(targets, n++, pf.format(p));\r
315         }\r
316     }\r
317 \r
318     public void testLimitedUnits() throws Exception {\r
319         setUp();\r
320         String[] targets = data.getLimitedUnitTargets();\r
321 \r
322         if (pw != null) {\r
323             pw.println("=limitedPeriodTargets");\r
324         }\r
325 \r
326         Period p = Period.at(1, MONTH);\r
327         int n = 0;\r
328         for (int i = 0; i < 3; ++i) {\r
329             switch (i) {\r
330             case 0:\r
331                 p = p.at();\r
332                 break;\r
333             case 1:\r
334                 p = p.lessThan();\r
335                 break;\r
336             case 2:\r
337                 p = p.moreThan();\r
338                 break;\r
339             }\r
340             for (int j = 0; j < 3; ++j) {\r
341                 pfFactory.setDisplayPastFuture(true);\r
342                 switch (j) {\r
343                 case 0:\r
344                     pfFactory.setDisplayPastFuture(false);\r
345                     break;\r
346                 case 1:\r
347                     p = p.inPast();\r
348                     break;\r
349                 case 2:\r
350                     p = p.inFuture();\r
351                     break;\r
352                 }\r
353 \r
354                 PeriodFormatter pf = pfFactory.getFormatter();\r
355 \r
356                 p = p.omit(WEEK).omit(DAY);\r
357                 xAssertEquals(targets, n++, pf.format(p));\r
358 \r
359                 p = p.and(2, WEEK);\r
360                 xAssertEquals(targets, n++, pf.format(p));\r
361 \r
362                 p = p.and(3, DAY);\r
363                 xAssertEquals(targets, n++, pf.format(p));\r
364             }\r
365         }\r
366 \r
367         p = p.omit(MONTH).omit(WEEK).omit(DAY).and(1, HOUR);\r
368         for (int i = 0; i < 3; ++i) {\r
369             switch (i) {\r
370             case 0:\r
371                 p = p.at();\r
372                 break;\r
373             case 1:\r
374                 p = p.lessThan();\r
375                 break;\r
376             case 2:\r
377                 p = p.moreThan();\r
378                 break;\r
379             }\r
380             for (int j = 0; j < 3; ++j) {\r
381                 pfFactory.setDisplayPastFuture(true);\r
382                 switch (j) {\r
383                 case 0:\r
384                     pfFactory.setDisplayPastFuture(false);\r
385                     break;\r
386                 case 1:\r
387                     p = p.inPast();\r
388                     break;\r
389                 case 2:\r
390                     p = p.inFuture();\r
391                     break;\r
392                 }\r
393 \r
394                 PeriodFormatter pf = pfFactory.getFormatter();\r
395 \r
396                 p = p.omit(MINUTE).omit(SECOND);\r
397                 xAssertEquals(targets, n++, pf.format(p));\r
398 \r
399                 p = p.and(2, MINUTE);\r
400                 xAssertEquals(targets, n++, pf.format(p));\r
401 \r
402                 p = p.and(3, SECOND);\r
403                 xAssertEquals(targets, n++, pf.format(p));\r
404             }\r
405         }\r
406     }\r
407 \r
408     public void testHalfUnits() throws Exception {\r
409         setUp();\r
410         int[] counts = data.getHalfUnitCounts();\r
411         String[] targets = data.getHalfUnitTargets();\r
412 \r
413         if (pw != null) {\r
414             pw.println("=halfPeriodCounts");\r
415             for (int i = 0; i < counts.length; ++i) {\r
416                 int c = counts[i];\r
417                 pw.println(String.valueOf(c));\r
418             }\r
419             pw.println("=halfPeriodTargets");\r
420         }\r
421 \r
422         pfFactory.setCountVariant(ECountVariant.HALF_FRACTION);\r
423         pfFactory.setDisplayPastFuture(false);\r
424         PeriodFormatter pf = pfFactory.getFormatter();\r
425 \r
426         int n = 0;\r
427         for (int i = 0; i < units.length; ++i) {\r
428             TimeUnit u = units[i];\r
429             for (int j = 0; j < counts.length; ++j) {\r
430                 int c = counts[j];\r
431                 Period p = Period.at(c + .5f, u);\r
432                 String string = pf.format(p);\r
433                 xAssertEquals(u.toString(), targets, n++, string);\r
434             }\r
435         }\r
436     }\r
437 \r
438     public void testFractionalUnits() throws Exception {\r
439         setUp();\r
440         float[] counts = data.getFractionalUnitCounts();\r
441         String[] targets = data.getFractionalUnitTargets();\r
442 \r
443         if (pw != null) {\r
444             pw.println("=fractionalPeriodCounts");\r
445             for (int i = 0; i < counts.length; ++i) {\r
446                 float c = counts[i];\r
447                 pw.println(String.valueOf(c));\r
448             }\r
449             pw.println("=fractionalPeriodTargets");\r
450         }\r
451 \r
452         pfFactory.setCountVariant(ECountVariant.DECIMAL2);\r
453         pfFactory.setDisplayPastFuture(false);\r
454         PeriodFormatter pf = pfFactory.getFormatter();\r
455 \r
456         int n = 0;\r
457         for (int i = 0; i < units.length; ++i) {\r
458             TimeUnit u = units[i];\r
459             for (int j = 0; j < counts.length; ++j) {\r
460                 float c = counts[j];\r
461                 Period p = Period.at(c, u);\r
462                 String string = pf.format(p);\r
463                 xAssertEquals(u.toString(), targets, n++, string);\r
464             }\r
465         }\r
466     }\r
467 \r
468     public void testMultipleUnits() throws Exception {\r
469         setUp();\r
470         String[] targets = data.getMultipleUnitTargets();\r
471 \r
472         if (pw != null) {\r
473             pw.println("=multiplePeriodTargets");\r
474         }\r
475 \r
476         pfFactory.setCountVariant(ECountVariant.INTEGER);\r
477         pfFactory.setDisplayPastFuture(false);\r
478         PeriodFormatter pf = pfFactory.getFormatter();\r
479 \r
480         int n = 0;\r
481         for (int i = 0; i < units.length - 1; ++i) {\r
482             Period p = Period.at(1, units[i]).and(2, units[i + 1]);\r
483             xAssertEquals(targets, n++, pf.format(p));\r
484             if (i < units.length - 2) {\r
485                 p = Period.at(1, units[i]).and(3, units[i + 2]);\r
486                 xAssertEquals(targets, n++, pf.format(p));\r
487                 p = Period.at(1, units[i]).and(2, units[i + 1]).and(3,\r
488                         units[i + 2]);\r
489                 xAssertEquals(targets, n++, pf.format(p));\r
490             }\r
491         }\r
492     }\r
493 \r
494     public static abstract class TestData {\r
495         abstract int[] getFullPluralizedFormCounts();\r
496         abstract String[] getFullPluralizedFormTargets();\r
497         abstract String[] getMediumFormTargets();\r
498         abstract String[] getShortFormTargets();\r
499         abstract String[] getCustomMinuteTargets();\r
500         abstract String[] getLimitedUnitTargets();\r
501         abstract int[] getHalfUnitCounts();\r
502         abstract String[] getHalfUnitTargets();\r
503         abstract float[] getFractionalUnitCounts();\r
504         abstract String[] getFractionalUnitTargets();\r
505         abstract String[] getMultipleUnitTargets();\r
506     }\r
507 \r
508 }\r
509 \r
510 class FileTestData extends LanguageTestRoot.TestData {\r
511     private int[] fullPluralizedFormCounts;\r
512     private String[] fullPluralizedFormTargets;\r
513     private String[] mediumFormTargets;\r
514     private String[] shortFormTargets;\r
515     private String[] customMinuteTargets;\r
516     private String[] limitedUnitTargets;\r
517     private int[] halfUnitCounts;\r
518     private String[] halfUnitTargets;\r
519     private float[] fractionalUnitCounts;\r
520     private String[] fractionalUnitTargets;\r
521     private String[] multipleUnitTargets;\r
522 \r
523     int[] getFullPluralizedFormCounts() {\r
524         return fullPluralizedFormCounts;\r
525     }\r
526 \r
527     String[] getFullPluralizedFormTargets() {\r
528         return fullPluralizedFormTargets;\r
529     }\r
530 \r
531     String[] getMediumFormTargets() {\r
532         return mediumFormTargets;\r
533     }\r
534 \r
535     String[] getShortFormTargets() {\r
536         return shortFormTargets;\r
537     }\r
538 \r
539     String[] getCustomMinuteTargets() {\r
540         return customMinuteTargets;\r
541     }\r
542 \r
543     String[] getLimitedUnitTargets() {\r
544         return limitedUnitTargets;\r
545     }\r
546 \r
547     int[] getHalfUnitCounts() {\r
548         return halfUnitCounts;\r
549     }\r
550 \r
551     String[] getHalfUnitTargets() {\r
552         return halfUnitTargets;\r
553     }\r
554 \r
555     float[] getFractionalUnitCounts() {\r
556         return fractionalUnitCounts;\r
557     }\r
558 \r
559     String[] getFractionalUnitTargets() {\r
560         return fractionalUnitTargets;\r
561     }\r
562 \r
563     String[] getMultipleUnitTargets() {\r
564         return multipleUnitTargets;\r
565     }\r
566 \r
567     public FileTestData(InputStreamReader isr) throws Exception {\r
568         BufferedReader br = new BufferedReader(isr);\r
569 \r
570         class Wrapup {\r
571             int[] intArray;\r
572 \r
573             float[] floatArray;\r
574 \r
575             String[] stringArray;\r
576 \r
577             void wrapup(List /* of String */list, Element element) {\r
578                 if (list == null)\r
579                     return;\r
580 \r
581                 switch (element.mode) {\r
582                 case EMode.mString:\r
583                     stringArray = (String[]) list.toArray(new String[list\r
584                             .size()]);\r
585                     break;\r
586 \r
587                 case EMode.mInt:\r
588                     intArray = new int[list.size()];\r
589                     for (int i = 0, e = intArray.length; i < e; ++i) {\r
590                         intArray[i] = Integer.parseInt((String) list.get(i));\r
591                     }\r
592                     break;\r
593 \r
594                 case EMode.mFloat:\r
595                     floatArray = new float[list.size()];\r
596                     for (int i = 0, e = floatArray.length; i < e; ++i) {\r
597                         floatArray[i] = Float.parseFloat((String) list.get(i));\r
598                     }\r
599                     break;\r
600                 }\r
601 \r
602                 switch (element.which) {\r
603                 case Element.XfullPluralizedFormCounts:\r
604                     FileTestData.this.fullPluralizedFormCounts = intArray;\r
605                     break;\r
606                 case Element.XfullPluralizedFormTargets:\r
607                     FileTestData.this.fullPluralizedFormTargets = stringArray;\r
608                     break;\r
609                 case Element.XmediumFormTargets:\r
610                     FileTestData.this.mediumFormTargets = stringArray;\r
611                     break;\r
612                 case Element.XshortFormTargets:\r
613                     FileTestData.this.shortFormTargets = stringArray;\r
614                     break;\r
615                 case Element.XcustomMinuteTargets:\r
616                     FileTestData.this.customMinuteTargets = stringArray;\r
617                     break;\r
618                 case Element.XlimitedUnitTargets:\r
619                     FileTestData.this.limitedUnitTargets = stringArray;\r
620                     break;\r
621                 case Element.XhalfUnitCounts:\r
622                     FileTestData.this.halfUnitCounts = intArray;\r
623                     break;\r
624                 case Element.XhalfUnitTargets:\r
625                     FileTestData.this.halfUnitTargets = stringArray;\r
626                     break;\r
627                 case Element.XfractionalUnitCounts:\r
628                     FileTestData.this.fractionalUnitCounts = floatArray;\r
629                     break;\r
630                 case Element.XfractionalUnitTargets:\r
631                     FileTestData.this.fractionalUnitTargets = stringArray;\r
632                     break;\r
633                 case Element.XmultipleUnitTargets:\r
634                     FileTestData.this.multipleUnitTargets = stringArray;\r
635                     break;\r
636                 }\r
637             }\r
638         }\r
639         Wrapup w = new Wrapup();\r
640 \r
641         List /* of String */list = null;\r
642         Element element = null;\r
643         String line = null;\r
644         while (null != (line = br.readLine())) {\r
645             line = line.trim();\r
646             if (line.length() == 0 || line.charAt(0) == '#')\r
647                 continue;\r
648             if (line.charAt(0) == '=') {\r
649                 w.wrapup(list, element);\r
650 \r
651                 list = new ArrayList();\r
652                 element = Element.forString(line.substring(1));\r
653             } else if (line.equals("null")) {\r
654                 list.add(null);\r
655             } else {\r
656                 list.add(line);\r
657             }\r
658         }\r
659         w.wrapup(list, element);\r
660     }\r
661 }\r
662 \r
663 class DefaultData extends LanguageTestRoot.TestData {\r
664     private static final int[] fullPluralizedFormCounts = { -3, -2, -1, 0, 1,\r
665             2, 3, 5, 10, 11, 12, 20, 21, 22, 23, 25 };\r
666 \r
667     private static final int[] halfUnitCounts = { 0, 1, 2, 5, 10, 11, 12, 20,\r
668             21, 22 };\r
669 \r
670     private static final float[] fractionalUnitCounts = { 0.025f, 1.0f, 1.205f,\r
671             2.125f, 12.05f };\r
672 \r
673     private static final DefaultData instance = new DefaultData();\r
674 \r
675     private DefaultData() {\r
676     }\r
677 \r
678     public static DefaultData getInstance() {\r
679         return instance;\r
680     }\r
681 \r
682     int[] getFullPluralizedFormCounts() {\r
683         return fullPluralizedFormCounts;\r
684     }\r
685 \r
686     String[] getFullPluralizedFormTargets() {\r
687         return null;\r
688     }\r
689 \r
690     String[] getMediumFormTargets() {\r
691         return null;\r
692     }\r
693 \r
694     String[] getShortFormTargets() {\r
695         return null;\r
696     }\r
697 \r
698     String[] getCustomMinuteTargets() {\r
699         return null;\r
700     }\r
701 \r
702     String[] getLimitedUnitTargets() {\r
703         return null;\r
704     }\r
705 \r
706     int[] getHalfUnitCounts() {\r
707         return halfUnitCounts;\r
708     }\r
709 \r
710     String[] getHalfUnitTargets() {\r
711         return null;\r
712     }\r
713 \r
714     float[] getFractionalUnitCounts() {\r
715         return fractionalUnitCounts;\r
716     }\r
717 \r
718     String[] getFractionalUnitTargets() {\r
719         return null;\r
720     }\r
721 \r
722     String[] getMultipleUnitTargets() {\r
723         return null;\r
724     }\r
725 }\r
726 \r
727 class EMode {\r
728     static final int mString = 0;\r
729     static final int mInt = 1;\r
730     static final int mFloat = 2;\r
731 }\r
732 \r
733 class Element {\r
734     final String name;\r
735     final int mode;\r
736     final int which;\r
737 \r
738     static int counter = 0;\r
739     static Element[] list = new Element[11];\r
740 \r
741     Element(String name) {\r
742         this.name = name;\r
743         mode = EMode.mString;\r
744         this.which = counter++;\r
745         list[this.which] = this;\r
746     }\r
747 \r
748     Element(String name, int mode) {\r
749         this.name = name;\r
750         this.mode = mode;\r
751         this.which = counter++;\r
752         list[this.which] = this;\r
753     }\r
754 \r
755     static final int XfullPluralizedFormCounts = 0;\r
756     static final int XfullPluralizedFormTargets = 1;\r
757     static final int XmediumFormTargets = 2;\r
758     static final int XshortFormTargets = 3;\r
759     static final int XcustomMinuteTargets = 4;\r
760     static final int XlimitedUnitTargets = 5;\r
761     static final int XhalfUnitCounts = 6;\r
762     static final int XhalfUnitTargets = 7;\r
763     static final int XfractionalUnitCounts = 8;\r
764     static final int XfractionalUnitTargets = 9;\r
765     static final int XmultipleUnitTargets = 10;\r
766 \r
767     static final Element fullPluralizedFormCounts = new Element(\r
768             "fullPluralizedFormCounts", EMode.mInt);\r
769 \r
770     static final Element fullPluralizedFormTargets = new Element(\r
771             "fullPluralizedFormTargets");\r
772 \r
773     static final Element mediumFormTargets = new Element("mediumFormTargets");\r
774 \r
775     static final Element shortFormTargets = new Element("shortFormTargets");\r
776 \r
777     static final Element customMinuteTargets = new Element(\r
778             "customMinuteTargets");\r
779 \r
780     static final Element limitedUnitTargets = new Element("limitedUnitTargets");\r
781 \r
782     static final Element halfUnitCounts = new Element("halfUnitCounts",\r
783             EMode.mInt);\r
784 \r
785     static final Element halfUnitTargets = new Element("halfUnitTargets");\r
786 \r
787     static final Element fractionalUnitCounts = new Element(\r
788             "fractionalUnitCounts", EMode.mFloat);\r
789 \r
790     static final Element fractionalUnitTargets = new Element(\r
791             "fractionalUnitTargets");\r
792 \r
793     static final Element multipleUnitTargets = new Element(\r
794             "multipleUnitTargets");\r
795 \r
796     static Element forString(String s) {\r
797         for (int i = 0; i < list.length; ++i) {\r
798             if (list[i].name.equals(s)) {\r
799                 return list[i];\r
800             }\r
801         }\r
802         return null;\r
803     }\r
804 }\r
805       \r