| // © 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(); |
| } |