2 *******************************************************************************
3 * Copyright (C) 2012-2013, Google, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 *******************************************************************************
7 package com.ibm.icu.dev.test.format;
9 import java.util.ArrayList;
10 import java.util.Locale;
12 import com.ibm.icu.dev.test.TestFmwk;
13 import com.ibm.icu.text.ListFormatter;
14 import com.ibm.icu.util.ULocale;
16 public class ListFormatterTest extends TestFmwk {
17 public static void main(String[] args) {
18 new ListFormatterTest().run(args);
21 String[] HardcodedTestData = {
30 public void TestBasic() {
31 ListFormatter formatter = new ListFormatter("{0} and {1}", "{0}; {1}", "{0}, {1}", "{0}, and {1}");
32 checkData(formatter, HardcodedTestData);
35 String[] EnglishTestData = {
44 public void TestEnglish() {
45 checkData(ListFormatter.getInstance(ULocale.ENGLISH), EnglishTestData);
46 checkData(ListFormatter.getInstance(ULocale.US), EnglishTestData);
47 // Redundant tests for code coverage.
48 checkData(ListFormatter.getInstance(Locale.ENGLISH), EnglishTestData);
49 if (isDefaultLocaleEnglishLike()) {
50 checkData(ListFormatter.getInstance(), EnglishTestData);
54 String[] JapaneseTestData = {
63 public void TestJapanese() {
64 checkData(ListFormatter.getInstance(ULocale.JAPANESE), JapaneseTestData);
67 String[] outOfOrderTestData = {
71 "C in the last after B after the first A",
72 "D in the last after C after B after the first A",
73 "E in the last after D after C after B after the first A"
75 public void TestPatternOutOfOrder() {
76 ListFormatter formatter = new ListFormatter("{1} after {0}", "{1} after the first {0}", "{1} after {0}",
77 "{1} in the last after {0}");
78 checkData(formatter, outOfOrderTestData);
81 String[] RootTestData = {
90 public void TestSpecial() {
91 checkData(ListFormatter.getInstance(ULocale.ROOT), RootTestData);
92 if (isDefaultLocaleEnglishLike()) {
93 checkData(ListFormatter.getInstance(new ULocale("xxx")), EnglishTestData);
97 public void checkData(ListFormatter listFormat, String[] strings) {
98 assertEquals("0", strings[0], listFormat.format());
99 assertEquals("1", strings[1], listFormat.format("A"));
100 assertEquals("2", strings[2], listFormat.format("A", "B"));
101 assertEquals("3", strings[3], listFormat.format("A", "B", "C"));
102 assertEquals("4", strings[4], listFormat.format("A", "B", "C", "D"));
103 assertEquals("5", strings[5], listFormat.format("A", "B", "C", "D", "E"));
106 public void TestFromList() {
107 ListFormatter listFormatter = ListFormatter.getInstance(ULocale.ENGLISH);
108 ArrayList<String> list = new ArrayList<String>();
112 assertEquals("list", "A, B, and C", listFormatter.format(list));
115 public void TestCreatePatternForNumItems() {
116 ListFormatter listFormatter = ListFormatter.getInstance(ULocale.ENGLISH);
118 "createPatternForNumItems",
120 listFormatter.getPatternForNumItems(3));
123 public void TestGetPatternForNumItemsException() {
124 ListFormatter listFormatter = ListFormatter.getInstance(ULocale.ENGLISH);
126 listFormatter.getPatternForNumItems(0);
127 fail("IllegalArgumentException expected.");
128 } catch (IllegalArgumentException expected) {
133 public void TestGetLocale() {
135 "getLocale", ULocale.ENGLISH, ListFormatter.getInstance(ULocale.ENGLISH).getLocale());
138 public void Test9946() {
139 ListFormatter listFormatter = ListFormatter.getInstance(ULocale.ENGLISH);
140 assertEquals("bug 9946", "{0}, {1}, and {2}", listFormatter.format("{0}", "{1}", "{2}"));
143 private boolean isDefaultLocaleEnglishLike() {
144 ULocale defaultLocale = ULocale.getDefault(ULocale.Category.FORMAT);
145 return defaultLocale.equals(ULocale.ENGLISH) || defaultLocale.equals(ULocale.US);