| Index: source/test/intltest/pluralmaptest.cpp
 | 
| diff --git a/source/test/intltest/pluralmaptest.cpp b/source/test/intltest/pluralmaptest.cpp
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..49246834c8075a7366f66aac351d06598ad55464
 | 
| --- /dev/null
 | 
| +++ b/source/test/intltest/pluralmaptest.cpp
 | 
| @@ -0,0 +1,218 @@
 | 
| +/*
 | 
| +*******************************************************************************
 | 
| +* Copyright (C) 2014-2015, International Business Machines Corporation and    *
 | 
| +* others. All Rights Reserved.                                                *
 | 
| +*******************************************************************************
 | 
| +*
 | 
| +* File PLURALMAPTEST.CPP
 | 
| +*
 | 
| +********************************************************************************
 | 
| +*/
 | 
| +#include "unicode/unistr.h"
 | 
| +
 | 
| +#include "intltest.h"
 | 
| +#include "pluralmap.h"
 | 
| +
 | 
| +class PluralMapForPluralMapTest : public PluralMap<UnicodeString> {
 | 
| +public:
 | 
| +    UBool operator==(const PluralMapForPluralMapTest &other) {
 | 
| +        return equals(other, strEqual);
 | 
| +    }
 | 
| +private:
 | 
| +    static UBool strEqual(const UnicodeString &lhs, const UnicodeString &rhs) {
 | 
| +        return lhs == rhs;
 | 
| +    }
 | 
| +};
 | 
| +
 | 
| +class PluralMapTest : public IntlTest {
 | 
| +public:
 | 
| +    PluralMapTest() {
 | 
| +    }
 | 
| +    void TestToCategory();
 | 
| +    void TestGetCategoryName();
 | 
| +    void TestGet();
 | 
| +    void TestIterate();
 | 
| +    void TestEqual();
 | 
| +    void TestCopyAndAssign();
 | 
| +    void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
 | 
| +    void addVariant(
 | 
| +            PluralMapBase::Category v,
 | 
| +            const UnicodeString &value,
 | 
| +            PluralMapForPluralMapTest &map);
 | 
| +private:
 | 
| +};
 | 
| +
 | 
| +void PluralMapTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
 | 
| +  TESTCASE_AUTO_BEGIN;
 | 
| +  TESTCASE_AUTO(TestToCategory);
 | 
| +  TESTCASE_AUTO(TestGetCategoryName);
 | 
| +  TESTCASE_AUTO(TestGet);
 | 
| +  TESTCASE_AUTO(TestIterate);
 | 
| +  TESTCASE_AUTO(TestEqual);
 | 
| +  TESTCASE_AUTO(TestCopyAndAssign);
 | 
| +  TESTCASE_AUTO_END;
 | 
| +}
 | 
| +
 | 
| +void PluralMapTest::TestToCategory() {
 | 
| +    assertEquals("", PluralMapBase::OTHER, PluralMapBase::toCategory("other"));
 | 
| +    assertEquals("", PluralMapBase::ZERO, PluralMapBase::toCategory("zero"));
 | 
| +    assertEquals("", PluralMapBase::ONE, PluralMapBase::toCategory("one"));
 | 
| +    assertEquals("", PluralMapBase::TWO, PluralMapBase::toCategory("two"));
 | 
| +    assertEquals("", PluralMapBase::FEW, PluralMapBase::toCategory("few"));
 | 
| +    assertEquals("", PluralMapBase::MANY, PluralMapBase::toCategory("many"));
 | 
| +    assertEquals("", PluralMapBase::NONE, PluralMapBase::toCategory("Many"));
 | 
| +    assertEquals(
 | 
| +            "",
 | 
| +            PluralMapBase::FEW,
 | 
| +            PluralMapBase::toCategory(UnicodeString("few")));
 | 
| +    assertEquals(
 | 
| +            "",
 | 
| +            PluralMapBase::MANY,
 | 
| +            PluralMapBase::toCategory(UnicodeString("many")));
 | 
| +    assertEquals(
 | 
| +            "",
 | 
| +            PluralMapBase::NONE,
 | 
| +            PluralMapBase::toCategory(UnicodeString("Many")));
 | 
| +}
 | 
| +
 | 
| +void PluralMapTest::TestGetCategoryName() {
 | 
| +    assertTrue("", PluralMapBase::getCategoryName(PluralMapBase::NONE) == NULL);
 | 
| +    assertTrue("", PluralMapBase::getCategoryName(PluralMapBase::CATEGORY_COUNT) == NULL);
 | 
| +    assertEquals("", "other", PluralMapBase::getCategoryName(PluralMapBase::OTHER));
 | 
| +    assertEquals("", "zero", PluralMapBase::getCategoryName(PluralMapBase::ZERO));
 | 
| +    assertEquals("", "one", PluralMapBase::getCategoryName(PluralMapBase::ONE));
 | 
| +    assertEquals("", "two", PluralMapBase::getCategoryName(PluralMapBase::TWO));
 | 
| +    assertEquals("", "few", PluralMapBase::getCategoryName(PluralMapBase::FEW));
 | 
| +    assertEquals("", "many", PluralMapBase::getCategoryName(PluralMapBase::MANY));
 | 
| +}
 | 
| +
 | 
| +void PluralMapTest::TestGet() {
 | 
| +    PluralMapForPluralMapTest map;
 | 
| +    addVariant(PluralMapBase::OTHER, "pickles", map);
 | 
| +    addVariant(PluralMapBase::ONE, "pickle", map);
 | 
| +    addVariant(PluralMapBase::FEW, "picklefew", map);
 | 
| +    assertEquals("", "pickles", map.get(PluralMapBase::OTHER));
 | 
| +    assertEquals("", "pickle", map.get(PluralMapBase::ONE));
 | 
| +    assertEquals("", "picklefew", map.get(PluralMapBase::FEW));
 | 
| +    assertEquals("", "pickles", map.get(PluralMapBase::MANY));
 | 
| +    assertEquals("", "pickles", map.get(PluralMapBase::NONE));
 | 
| +    assertEquals("", "pickles", map.get(PluralMapBase::CATEGORY_COUNT));
 | 
| +    assertEquals("", "picklefew", map.get("few"));
 | 
| +    assertEquals("", "pickles", map.get("many"));
 | 
| +    assertEquals("", "pickles", map.get("somebadform"));
 | 
| +    assertEquals("", "pickle", map.get(UnicodeString("one")));
 | 
| +    assertEquals("", "pickles", map.get(UnicodeString("many")));
 | 
| +    assertEquals("", "pickles", map.get(UnicodeString("somebadform")));
 | 
| +    assertEquals("", "pickles", map.getOther());
 | 
| +}
 | 
| +
 | 
| +void PluralMapTest::TestIterate() {
 | 
| +    PluralMapForPluralMapTest map;
 | 
| +    addVariant(PluralMapBase::OTHER, "pickles", map);
 | 
| +    addVariant(PluralMapBase::ONE, "pickle", map);
 | 
| +    addVariant(PluralMapBase::FEW, "pickleops", map);
 | 
| +    addVariant(PluralMapBase::FEW, "picklefew", map);
 | 
| +    PluralMapBase::Category index = PluralMapBase::NONE;
 | 
| +    const UnicodeString *current = map.next(index);
 | 
| +    assertEquals("", "pickles", *current);
 | 
| +    assertEquals("", PluralMapBase::OTHER, index);
 | 
| +    current = map.next(index);
 | 
| +    assertEquals("", "pickle", *current);
 | 
| +    assertEquals("", PluralMapBase::ONE, index);
 | 
| +    current = map.next(index);
 | 
| +    assertEquals("", "picklefew", *current);
 | 
| +    assertEquals("", PluralMapBase::FEW, index);
 | 
| +    current = map.next(index);
 | 
| +    assertEquals("", PluralMapBase::CATEGORY_COUNT, index);
 | 
| +    assertTrue("", current == NULL);
 | 
| +
 | 
| +    PluralMapForPluralMapTest map2;
 | 
| +    index = PluralMapBase::NONE;
 | 
| +    current = map2.next(index);
 | 
| +    assertEquals("", "", *current);
 | 
| +    assertEquals("", PluralMapBase::OTHER, index);
 | 
| +    current = map2.next(index);
 | 
| +    assertEquals("", PluralMapBase::CATEGORY_COUNT, index);
 | 
| +    assertTrue("", current == NULL);
 | 
| +}
 | 
| +
 | 
| +void PluralMapTest::TestEqual() {
 | 
| +    PluralMapForPluralMapTest control;
 | 
| +    addVariant(PluralMapBase::OTHER, "pickles", control);
 | 
| +    addVariant(PluralMapBase::ONE, "pickle", control);
 | 
| +    addVariant(PluralMapBase::FEW, "picklefew", control);
 | 
| +
 | 
| +    {
 | 
| +        PluralMapForPluralMapTest map;
 | 
| +        addVariant(PluralMapBase::FEW, "picklefew", map);
 | 
| +        addVariant(PluralMapBase::OTHER, "pickles", map);
 | 
| +        addVariant(PluralMapBase::ONE, "pickle", map);
 | 
| +        assertTrue("", control == map);
 | 
| +        addVariant(PluralMapBase::ONE, "pickl", map);
 | 
| +        assertFalse("", control == map);
 | 
| +    }
 | 
| +    {
 | 
| +        PluralMapForPluralMapTest map;
 | 
| +        addVariant(PluralMapBase::MANY, "picklemany", map);
 | 
| +        addVariant(PluralMapBase::OTHER, "pickles", map);
 | 
| +        addVariant(PluralMapBase::ONE, "pickle", map);
 | 
| +        assertFalse("", control == map);
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| +void PluralMapTest::TestCopyAndAssign() {
 | 
| +    PluralMapForPluralMapTest control;
 | 
| +    addVariant(PluralMapBase::OTHER, "pickles", control);
 | 
| +    addVariant(PluralMapBase::ONE, "pickle", control);
 | 
| +    addVariant(PluralMapBase::FEW, "picklefew", control);
 | 
| +    {
 | 
| +        PluralMapForPluralMapTest *rhs = new PluralMapForPluralMapTest();
 | 
| +        if (rhs == NULL) {
 | 
| +            errln("Memory allocation error.");
 | 
| +            return;
 | 
| +        }
 | 
| +        addVariant(PluralMapBase::OTHER, "pickles", *rhs);
 | 
| +        addVariant(PluralMapBase::ONE, "pickle", *rhs);
 | 
| +        addVariant(PluralMapBase::FEW, "picklefew", *rhs);
 | 
| +        PluralMapForPluralMapTest lhs(*rhs);
 | 
| +        delete rhs;
 | 
| +        assertTrue("", lhs == control);
 | 
| +    }
 | 
| +    {
 | 
| +        PluralMapForPluralMapTest *rhs = new PluralMapForPluralMapTest();
 | 
| +        if (rhs == NULL) {
 | 
| +            errln("Memory allocation error.");
 | 
| +            return;
 | 
| +        }
 | 
| +        addVariant(PluralMapBase::OTHER, "pickles", *rhs);
 | 
| +        addVariant(PluralMapBase::ONE, "pickle", *rhs);
 | 
| +        addVariant(PluralMapBase::FEW, "picklefew", *rhs);
 | 
| +        PluralMapForPluralMapTest lhs;
 | 
| +        addVariant(PluralMapBase::OTHER, "pickles", lhs);
 | 
| +        addVariant(PluralMapBase::TWO, "pickletwo", lhs);
 | 
| +        addVariant(PluralMapBase::MANY, "picklemany", lhs);
 | 
| +        addVariant(PluralMapBase::FEW, "picklefew", lhs);
 | 
| +        lhs = *rhs;
 | 
| +        delete rhs;
 | 
| +        assertTrue("", lhs == control);
 | 
| +    }
 | 
| +
 | 
| +}
 | 
| +
 | 
| +
 | 
| +
 | 
| +void PluralMapTest::addVariant(
 | 
| +        PluralMapBase::Category v,
 | 
| +        const UnicodeString &value,
 | 
| +        PluralMapForPluralMapTest &map) {
 | 
| +    UErrorCode status = U_ZERO_ERROR;
 | 
| +    UnicodeString *current = map.getMutable(v, status);
 | 
| +    if (!assertSuccess("", status)) {
 | 
| +        return;
 | 
| +    }
 | 
| +    (*current) = value;
 | 
| +}
 | 
| +
 | 
| +extern IntlTest *createPluralMapTest() {
 | 
| +    return new PluralMapTest();
 | 
| +}
 | 
| 
 |