1 /*
2 *******************************************************************************
3 * Copyright (C) 2014-2016, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 *******************************************************************************
6 *
7 * File QUANTITYFORMATTERTEST.CPP
8 *
9 ********************************************************************************
10 */
11 #include "cstring.h"
12 #include "intltest.h"
13 #include "quantityformatter.h"
14 #include "simplepatternformatter.h"
15 #include "unicode/numfmt.h"
16 #include "unicode/plurrule.h"
17 
18 
19 class QuantityFormatterTest : public IntlTest {
20 public:
QuantityFormatterTest()21     QuantityFormatterTest() {
22     }
23     void TestBasic();
24     void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
25 private:
26 };
27 
runIndexedTest(int32_t index,UBool exec,const char * & name,char *)28 void QuantityFormatterTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
29   TESTCASE_AUTO_BEGIN;
30   TESTCASE_AUTO(TestBasic);
31   TESTCASE_AUTO_END;
32 }
33 
TestBasic()34 void QuantityFormatterTest::TestBasic() {
35     UErrorCode status = U_ZERO_ERROR;
36 #if !UCONFIG_NO_FORMATTING
37     QuantityFormatter fmt;
38     assertFalse(
39             "adding bad variant",
40             fmt.addIfAbsent("a bad variant", "{0} pounds", status));
41     assertEquals("adding bad variant status", U_ILLEGAL_ARGUMENT_ERROR, status);
42     status = U_ZERO_ERROR;
43     assertFalse(
44             "Adding bad pattern",
45             fmt.addIfAbsent("other", "{0} {1} too many placeholders", status));
46     assertEquals("adding bad pattern status", U_ILLEGAL_ARGUMENT_ERROR, status);
47     status = U_ZERO_ERROR;
48     assertFalse("isValid with no patterns", fmt.isValid());
49     assertTrue(
50             "Adding good pattern with no placeholders",
51             fmt.addIfAbsent("zero", "no placeholder", status));
52     assertTrue(
53             "Adding good pattern",
54             fmt.addIfAbsent("other", "{0} pounds", status));
55     assertTrue("isValid with other", fmt.isValid());
56     assertTrue(
57             "Adding good pattern",
58             fmt.addIfAbsent("one", "{0} pound", status));
59 
60     assertEquals(
61             "getByVariant",
62             fmt.getByVariant("bad variant")->getTextWithNoPlaceholders(),
63             " pounds");
64     assertEquals(
65             "getByVariant",
66             fmt.getByVariant("other")->getTextWithNoPlaceholders(),
67             " pounds");
68     assertEquals(
69             "getByVariant",
70             fmt.getByVariant("one")->getTextWithNoPlaceholders(),
71             " pound");
72     assertEquals(
73             "getByVariant",
74             fmt.getByVariant("few")->getTextWithNoPlaceholders(),
75             " pounds");
76 
77     // Test copy constructor
78     {
79         QuantityFormatter copied(fmt);
80         assertEquals(
81                 "copied getByVariant",
82                 copied.getByVariant("other")->getTextWithNoPlaceholders(),
83                 " pounds");
84         assertEquals(
85                 "copied getByVariant",
86                 copied.getByVariant("one")->getTextWithNoPlaceholders(),
87                 " pound");
88         assertEquals(
89                 "copied getByVariant",
90                 copied.getByVariant("few")->getTextWithNoPlaceholders(),
91                 " pounds");
92     }
93 
94     // Test assignment
95     {
96         QuantityFormatter assigned;
97         assigned = fmt;
98         assertEquals(
99                 "assigned getByVariant",
100                 assigned.getByVariant("other")->getTextWithNoPlaceholders(),
101                 " pounds");
102         assertEquals(
103                 "assigned getByVariant",
104                 assigned.getByVariant("one")->getTextWithNoPlaceholders(),
105                 " pound");
106         assertEquals(
107                 "assigned getByVariant",
108                 assigned.getByVariant("few")->getTextWithNoPlaceholders(),
109                 " pounds");
110     }
111 
112     // Test format.
113     {
114         LocalPointer<NumberFormat> numfmt(
115                 NumberFormat::createInstance(Locale::getEnglish(), status));
116         LocalPointer<PluralRules> plurrule(
117                 PluralRules::forLocale("en", status));
118         FieldPosition pos(FieldPosition::DONT_CARE);
119         UnicodeString appendTo;
120         assertEquals(
121                 "format singular",
122                 "1 pound",
123                 fmt.format(
124                         1,
125                         *numfmt,
126                         *plurrule,
127                         appendTo,
128                         pos,
129                         status), TRUE);
130         appendTo.remove();
131         assertEquals(
132                 "format plural",
133                 "2 pounds",
134                 fmt.format(
135                         2,
136                         *numfmt,
137                         *plurrule,
138                         appendTo,
139                         pos,
140                         status), TRUE);
141     }
142     fmt.reset();
143     assertFalse("isValid after reset", fmt.isValid());
144 #endif
145     assertSuccess("", status);
146 }
147 
createQuantityFormatterTest()148 extern IntlTest *createQuantityFormatterTest() {
149     return new QuantityFormatterTest();
150 }
151