Home | History | Annotate | Download | only in intltest
      1 /*
      2 *******************************************************************************
      3 * Copyright (C) 2014-2015, International Business Machines Corporation and    *
      4 * others. All Rights Reserved.                                                *
      5 *******************************************************************************
      6 *
      7 * File PLURALMAPTEST.CPP
      8 *
      9 ********************************************************************************
     10 */
     11 #include "unicode/unistr.h"
     12 
     13 #include "intltest.h"
     14 #include "pluralmap.h"
     15 
     16 class PluralMapForPluralMapTest : public PluralMap<UnicodeString> {
     17 public:
     18     UBool operator==(const PluralMapForPluralMapTest &other) {
     19         return equals(other, strEqual);
     20     }
     21 private:
     22     static UBool strEqual(const UnicodeString &lhs, const UnicodeString &rhs) {
     23         return lhs == rhs;
     24     }
     25 };
     26 
     27 class PluralMapTest : public IntlTest {
     28 public:
     29     PluralMapTest() {
     30     }
     31     void TestToCategory();
     32     void TestGetCategoryName();
     33     void TestGet();
     34     void TestIterate();
     35     void TestEqual();
     36     void TestCopyAndAssign();
     37     void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
     38     void addVariant(
     39             PluralMapBase::Category v,
     40             const UnicodeString &value,
     41             PluralMapForPluralMapTest &map);
     42 private:
     43 };
     44 
     45 void PluralMapTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
     46   TESTCASE_AUTO_BEGIN;
     47   TESTCASE_AUTO(TestToCategory);
     48   TESTCASE_AUTO(TestGetCategoryName);
     49   TESTCASE_AUTO(TestGet);
     50   TESTCASE_AUTO(TestIterate);
     51   TESTCASE_AUTO(TestEqual);
     52   TESTCASE_AUTO(TestCopyAndAssign);
     53   TESTCASE_AUTO_END;
     54 }
     55 
     56 void PluralMapTest::TestToCategory() {
     57     assertEquals("", PluralMapBase::OTHER, PluralMapBase::toCategory("other"));
     58     assertEquals("", PluralMapBase::ZERO, PluralMapBase::toCategory("zero"));
     59     assertEquals("", PluralMapBase::ONE, PluralMapBase::toCategory("one"));
     60     assertEquals("", PluralMapBase::TWO, PluralMapBase::toCategory("two"));
     61     assertEquals("", PluralMapBase::FEW, PluralMapBase::toCategory("few"));
     62     assertEquals("", PluralMapBase::MANY, PluralMapBase::toCategory("many"));
     63     assertEquals("", PluralMapBase::NONE, PluralMapBase::toCategory("Many"));
     64     assertEquals(
     65             "",
     66             PluralMapBase::FEW,
     67             PluralMapBase::toCategory(UnicodeString("few")));
     68     assertEquals(
     69             "",
     70             PluralMapBase::MANY,
     71             PluralMapBase::toCategory(UnicodeString("many")));
     72     assertEquals(
     73             "",
     74             PluralMapBase::NONE,
     75             PluralMapBase::toCategory(UnicodeString("Many")));
     76 }
     77 
     78 void PluralMapTest::TestGetCategoryName() {
     79     assertTrue("", PluralMapBase::getCategoryName(PluralMapBase::NONE) == NULL);
     80     assertTrue("", PluralMapBase::getCategoryName(PluralMapBase::CATEGORY_COUNT) == NULL);
     81     assertEquals("", "other", PluralMapBase::getCategoryName(PluralMapBase::OTHER));
     82     assertEquals("", "zero", PluralMapBase::getCategoryName(PluralMapBase::ZERO));
     83     assertEquals("", "one", PluralMapBase::getCategoryName(PluralMapBase::ONE));
     84     assertEquals("", "two", PluralMapBase::getCategoryName(PluralMapBase::TWO));
     85     assertEquals("", "few", PluralMapBase::getCategoryName(PluralMapBase::FEW));
     86     assertEquals("", "many", PluralMapBase::getCategoryName(PluralMapBase::MANY));
     87 }
     88 
     89 void PluralMapTest::TestGet() {
     90     PluralMapForPluralMapTest map;
     91     addVariant(PluralMapBase::OTHER, "pickles", map);
     92     addVariant(PluralMapBase::ONE, "pickle", map);
     93     addVariant(PluralMapBase::FEW, "picklefew", map);
     94     assertEquals("", "pickles", map.get(PluralMapBase::OTHER));
     95     assertEquals("", "pickle", map.get(PluralMapBase::ONE));
     96     assertEquals("", "picklefew", map.get(PluralMapBase::FEW));
     97     assertEquals("", "pickles", map.get(PluralMapBase::MANY));
     98     assertEquals("", "pickles", map.get(PluralMapBase::NONE));
     99     assertEquals("", "pickles", map.get(PluralMapBase::CATEGORY_COUNT));
    100     assertEquals("", "picklefew", map.get("few"));
    101     assertEquals("", "pickles", map.get("many"));
    102     assertEquals("", "pickles", map.get("somebadform"));
    103     assertEquals("", "pickle", map.get(UnicodeString("one")));
    104     assertEquals("", "pickles", map.get(UnicodeString("many")));
    105     assertEquals("", "pickles", map.get(UnicodeString("somebadform")));
    106     assertEquals("", "pickles", map.getOther());
    107 }
    108 
    109 void PluralMapTest::TestIterate() {
    110     PluralMapForPluralMapTest map;
    111     addVariant(PluralMapBase::OTHER, "pickles", map);
    112     addVariant(PluralMapBase::ONE, "pickle", map);
    113     addVariant(PluralMapBase::FEW, "pickleops", map);
    114     addVariant(PluralMapBase::FEW, "picklefew", map);
    115     PluralMapBase::Category index = PluralMapBase::NONE;
    116     const UnicodeString *current = map.next(index);
    117     assertEquals("", "pickles", *current);
    118     assertEquals("", PluralMapBase::OTHER, index);
    119     current = map.next(index);
    120     assertEquals("", "pickle", *current);
    121     assertEquals("", PluralMapBase::ONE, index);
    122     current = map.next(index);
    123     assertEquals("", "picklefew", *current);
    124     assertEquals("", PluralMapBase::FEW, index);
    125     current = map.next(index);
    126     assertEquals("", PluralMapBase::CATEGORY_COUNT, index);
    127     assertTrue("", current == NULL);
    128 
    129     PluralMapForPluralMapTest map2;
    130     index = PluralMapBase::NONE;
    131     current = map2.next(index);
    132     assertEquals("", "", *current);
    133     assertEquals("", PluralMapBase::OTHER, index);
    134     current = map2.next(index);
    135     assertEquals("", PluralMapBase::CATEGORY_COUNT, index);
    136     assertTrue("", current == NULL);
    137 }
    138 
    139 void PluralMapTest::TestEqual() {
    140     PluralMapForPluralMapTest control;
    141     addVariant(PluralMapBase::OTHER, "pickles", control);
    142     addVariant(PluralMapBase::ONE, "pickle", control);
    143     addVariant(PluralMapBase::FEW, "picklefew", control);
    144 
    145     {
    146         PluralMapForPluralMapTest map;
    147         addVariant(PluralMapBase::FEW, "picklefew", map);
    148         addVariant(PluralMapBase::OTHER, "pickles", map);
    149         addVariant(PluralMapBase::ONE, "pickle", map);
    150         assertTrue("", control == map);
    151         addVariant(PluralMapBase::ONE, "pickl", map);
    152         assertFalse("", control == map);
    153     }
    154     {
    155         PluralMapForPluralMapTest map;
    156         addVariant(PluralMapBase::MANY, "picklemany", map);
    157         addVariant(PluralMapBase::OTHER, "pickles", map);
    158         addVariant(PluralMapBase::ONE, "pickle", map);
    159         assertFalse("", control == map);
    160     }
    161 }
    162 
    163 void PluralMapTest::TestCopyAndAssign() {
    164     PluralMapForPluralMapTest control;
    165     addVariant(PluralMapBase::OTHER, "pickles", control);
    166     addVariant(PluralMapBase::ONE, "pickle", control);
    167     addVariant(PluralMapBase::FEW, "picklefew", control);
    168     {
    169         PluralMapForPluralMapTest *rhs = new PluralMapForPluralMapTest();
    170         if (rhs == NULL) {
    171             errln("Memory allocation error.");
    172             return;
    173         }
    174         addVariant(PluralMapBase::OTHER, "pickles", *rhs);
    175         addVariant(PluralMapBase::ONE, "pickle", *rhs);
    176         addVariant(PluralMapBase::FEW, "picklefew", *rhs);
    177         PluralMapForPluralMapTest lhs(*rhs);
    178         delete rhs;
    179         assertTrue("", lhs == control);
    180     }
    181     {
    182         PluralMapForPluralMapTest *rhs = new PluralMapForPluralMapTest();
    183         if (rhs == NULL) {
    184             errln("Memory allocation error.");
    185             return;
    186         }
    187         addVariant(PluralMapBase::OTHER, "pickles", *rhs);
    188         addVariant(PluralMapBase::ONE, "pickle", *rhs);
    189         addVariant(PluralMapBase::FEW, "picklefew", *rhs);
    190         PluralMapForPluralMapTest lhs;
    191         addVariant(PluralMapBase::OTHER, "pickles", lhs);
    192         addVariant(PluralMapBase::TWO, "pickletwo", lhs);
    193         addVariant(PluralMapBase::MANY, "picklemany", lhs);
    194         addVariant(PluralMapBase::FEW, "picklefew", lhs);
    195         lhs = *rhs;
    196         delete rhs;
    197         assertTrue("", lhs == control);
    198     }
    199 
    200 }
    201 
    202 
    203 
    204 void PluralMapTest::addVariant(
    205         PluralMapBase::Category v,
    206         const UnicodeString &value,
    207         PluralMapForPluralMapTest &map) {
    208     UErrorCode status = U_ZERO_ERROR;
    209     UnicodeString *current = map.getMutable(v, status);
    210     if (!assertSuccess("", status)) {
    211         return;
    212     }
    213     (*current) = value;
    214 }
    215 
    216 extern IntlTest *createPluralMapTest() {
    217     return new PluralMapTest();
    218 }
    219