16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 2012-2013, International Business Machines
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   file name:  listformattertest.cpp
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   encoding:   US-ASCII
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   tab size:   8 (not used)
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   indentation:4
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   created on: 2012aug27
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   created by: Umesh P. Nair
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "listformattertest.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <string.h>
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgListFormatterTest::ListFormatterTest() :
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        prefix("Prefix: ", -1, US_INV),
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one("Alice", -1, US_INV), two("Bob", -1, US_INV),
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        three("Charlie", -1, US_INV), four("Delta", -1, US_INV) {
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::CheckFormatting(const ListFormatter* formatter, UnicodeString data[], int32_t dataSize,
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                        const UnicodeString& expected_result) {
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString actualResult(prefix);
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode errorCode = U_ZERO_ERROR;
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    formatter->format(data, dataSize, actualResult, errorCode);
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString expectedStringWithPrefix = prefix + expected_result;
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (expectedStringWithPrefix != actualResult) {
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln(UnicodeString("Expected: |") + expectedStringWithPrefix +  "|, Actual: |" + actualResult + "|");
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::CheckFourCases(const char* locale_string, UnicodeString one, UnicodeString two,
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString three, UnicodeString four, UnicodeString results[4]) {
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode errorCode = U_ZERO_ERROR;
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    LocalPointer<ListFormatter> formatter(ListFormatter::createInstance(Locale(locale_string), errorCode));
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(errorCode)) {
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("ListFormatter::createInstance(Locale(\"%s\"), errorCode) failed in CheckFourCases: %s", locale_string, u_errorName(errorCode));
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input1[] = {one};
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(formatter.getAlias(), input1, 1, results[0]);
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input2[] = {one, two};
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(formatter.getAlias(), input2, 2, results[1]);
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input3[] = {one, two, three};
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(formatter.getAlias(), input3, 3, results[2]);
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input4[] = {one, two, three, four};
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(formatter.getAlias(), input4, 4, results[3]);
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool ListFormatterTest::RecordFourCases(const Locale& locale, UnicodeString one, UnicodeString two,
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString three, UnicodeString four, UnicodeString results[4])  {
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode errorCode = U_ZERO_ERROR;
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    LocalPointer<ListFormatter> formatter(ListFormatter::createInstance(locale, errorCode));
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(errorCode)) {
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("ListFormatter::createInstance(\"%s\", errorCode) failed in RecordFourCases: %s", locale.getName(), u_errorName(errorCode));
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return FALSE;
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input1[] = {one};
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    formatter->format(input1, 1, results[0], errorCode);
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input2[] = {one, two};
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    formatter->format(input2, 2, results[1], errorCode);
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input3[] = {one, two, three};
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    formatter->format(input3, 3, results[2], errorCode);
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input4[] = {one, two, three, four};
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    formatter->format(input4, 4, results[3], errorCode);
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(errorCode)) {
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("RecordFourCases failed: %s", u_errorName(errorCode));
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return FALSE;
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return TRUE;
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestRoot() {
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4] = {
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one,
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two,
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three,
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three + ", " + four
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFourCases("", one, two, three, four, results);
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Bogus locale should fallback to root.
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestBogus() {
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4];
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (RecordFourCases(Locale::getDefault(), one, two, three, four, results)) {
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      CheckFourCases("ex_PY", one, two, three, four, results);
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Formatting in English.
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// "and" is used before the last element, and all elements up to (and including) the penultimate are followed by a comma.
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestEnglish() {
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4] = {
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one,
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + " and " + two,
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", and " + three,
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three + ", and " + four
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFourCases("en", one, two, three, four, results);
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::Test9946() {
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode errorCode = U_ZERO_ERROR;
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    LocalPointer<ListFormatter> formatter(ListFormatter::createInstance(Locale("en"), errorCode));
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(errorCode)) {
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln(
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            "ListFormatter::createInstance(Locale(\"en\"), errorCode) failed in Test9946: %s",
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            u_errorName(errorCode));
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString data[3] = {"{0}", "{1}", "{2}"};
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString actualResult;
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    formatter->format(data, 3, actualResult, errorCode);
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(errorCode)) {
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln(
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            "ListFormatter::createInstance(Locale(\"en\"), errorCode) failed in Test9946: %s",
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            u_errorName(errorCode));
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString expected("{0}, {1}, and {2}");
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (expected != actualResult) {
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Expected " + expected + ", got " + actualResult);
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestEnglishUS() {
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4] = {
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one,
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + " and " + two,
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", and " + three,
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three + ", and " + four
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFourCases("en_US", one, two, three, four, results);
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Formatting in Russian.
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// "\\u0438" is used before the last element, and all elements up to (but not including) the penultimate are followed by a comma.
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestRussian() {
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString and_string = UnicodeString(" \\u0438 ", -1, US_INV).unescape();
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4] = {
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one,
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + and_string + two,
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + and_string + three,
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three + and_string + four
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFourCases("ru", one, two, three, four, results);
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Formatting in Malayalam.
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// For two elements, "\\u0d15\\u0d42\\u0d1f\\u0d3e\\u0d24\\u0d46" is inserted in between.
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// For more than two elements, comma is inserted between all elements up to (and including) the penultimate,
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// and the word \\u0d0e\\u0d28\\u0d4d\\u0d28\\u0d3f\\u0d35 is inserted in the end.
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestMalayalam() {
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString pair_string = UnicodeString(" \\u0d15\\u0d42\\u0d1f\\u0d3e\\u0d24\\u0d46 ", -1, US_INV).unescape();
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString total_string = UnicodeString(" \\u0d0e\\u0d28\\u0d4d\\u0d28\\u0d3f\\u0d35", -1, US_INV).unescape();
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4] = {
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one,
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + pair_string + two,
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three + total_string,
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three + ", " + four + total_string
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFourCases("ml", one, two, three, four, results);
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Formatting in Zulu.
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// "and" is used before the last element, and all elements up to (and including) the penultimate are followed by a comma.
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestZulu() {
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4] = {
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one,
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "I-" + one + " ne-" + two,
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", no-" + three,
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one + ", " + two + ", " + three + ", no-" + four
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFourCases("zu", one, two, three, four, results);
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::TestOutOfOrderPatterns() {
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString results[4] = {
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        one,
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        two + " after " + one,
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        three + " in the last after " + two + " after the first " + one,
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        four + " in the last after " + three + " after " + two + " after the first " + one
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ListFormatData data("{1} after {0}", "{1} after the first {0}",
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        "{1} after {0}", "{1} in the last after {0}");
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ListFormatter formatter(&data);
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input1[] = {one};
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(&formatter, input1, 1, results[0]);
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input2[] = {one, two};
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(&formatter, input2, 2, results[1]);
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input3[] = {one, two, three};
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(&formatter, input3, 3, results[2]);
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString input4[] = {one, two, three, four};
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CheckFormatting(&formatter, input4, 4, results[3]);
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ListFormatterTest::runIndexedTest(int32_t index, UBool exec,
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                       const char* &name, char* /*par */) {
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    switch(index) {
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 0: name = "TestRoot"; if (exec) TestRoot(); break;
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 1: name = "TestBogus"; if (exec) TestBogus(); break;
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 2: name = "TestEnglish"; if (exec) TestEnglish(); break;
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 3: name = "TestEnglishUS"; if (exec) TestEnglishUS(); break;
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 4: name = "TestRussian"; if (exec) TestRussian(); break;
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 5: name = "TestMalayalam"; if (exec) TestMalayalam(); break;
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 6: name = "TestZulu"; if (exec) TestZulu(); break;
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 7: name = "TestOutOfOrderPatterns"; if (exec) TestOutOfOrderPatterns(); break;
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 8: name = "Test9946"; if (exec) Test9946(); break;
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        default: name = ""; break;
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
233