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