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