|  | // © 2016 and later: Unicode, Inc. and others. | 
|  | // License & terms of use: http://www.unicode.org/copyright.html | 
|  | /* | 
|  | ******************************************************************************* | 
|  | * 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("", (int32_t)PluralMapBase::OTHER, PluralMapBase::toCategory("other")); | 
|  | assertEquals("", (int32_t)PluralMapBase::ZERO, PluralMapBase::toCategory("zero")); | 
|  | assertEquals("", (int32_t)PluralMapBase::ONE, PluralMapBase::toCategory("one")); | 
|  | assertEquals("", (int32_t)PluralMapBase::TWO, PluralMapBase::toCategory("two")); | 
|  | assertEquals("", (int32_t)PluralMapBase::FEW, PluralMapBase::toCategory("few")); | 
|  | assertEquals("", (int32_t)PluralMapBase::MANY, PluralMapBase::toCategory("many")); | 
|  | assertEquals("", (int32_t)PluralMapBase::NONE, PluralMapBase::toCategory("Many")); | 
|  | assertEquals( | 
|  | "", | 
|  | (int32_t)PluralMapBase::FEW, | 
|  | PluralMapBase::toCategory(UnicodeString("few"))); | 
|  | assertEquals( | 
|  | "", | 
|  | (int32_t)PluralMapBase::MANY, | 
|  | PluralMapBase::toCategory(UnicodeString("many"))); | 
|  | assertEquals( | 
|  | "", | 
|  | (int32_t)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("", (int32_t)PluralMapBase::OTHER, index); | 
|  | current = map.next(index); | 
|  | assertEquals("", "pickle", *current); | 
|  | assertEquals("", (int32_t)PluralMapBase::ONE, index); | 
|  | current = map.next(index); | 
|  | assertEquals("", "picklefew", *current); | 
|  | assertEquals("", (int32_t)PluralMapBase::FEW, index); | 
|  | current = map.next(index); | 
|  | assertEquals("", (int32_t)PluralMapBase::CATEGORY_COUNT, index); | 
|  | assertTrue("", current == NULL); | 
|  |  | 
|  | PluralMapForPluralMapTest map2; | 
|  | index = PluralMapBase::NONE; | 
|  | current = map2.next(index); | 
|  | assertEquals("", "", *current); | 
|  | assertEquals("", (int32_t)PluralMapBase::OTHER, index); | 
|  | current = map2.next(index); | 
|  | assertEquals("", (int32_t)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(); | 
|  | } |