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