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