OLD | NEW |
| (Empty) |
1 /* | |
2 ******************************************************************************* | |
3 * Copyright (C) 2014, International Business Machines Corporation and * | |
4 * others. All Rights Reserved. * | |
5 ******************************************************************************* | |
6 * | |
7 * File SCINUMBERFORMATTERTEST.CPP | |
8 * | |
9 ******************************************************************************* | |
10 */ | |
11 #include "unicode/utypes.h" | |
12 | |
13 #include "intltest.h" | |
14 | |
15 #if !UCONFIG_NO_FORMATTING | |
16 | |
17 #include "unicode/scientificnumberformatter.h" | |
18 #include "unicode/numfmt.h" | |
19 #include "unicode/decimfmt.h" | |
20 #include "unicode/localpointer.h" | |
21 | |
22 class ScientificNumberFormatterTest : public IntlTest { | |
23 public: | |
24 void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=
0); | |
25 private: | |
26 void TestBasic(); | |
27 void TestFarsi(); | |
28 void TestPlusSignInExponentMarkup(); | |
29 void TestPlusSignInExponentSuperscript(); | |
30 void TestFixedDecimalMarkup(); | |
31 void TestFixedDecimalSuperscript(); | |
32 }; | |
33 | |
34 void ScientificNumberFormatterTest::runIndexedTest( | |
35 int32_t index, UBool exec, const char *&name, char *) { | |
36 if (exec) { | |
37 logln("TestSuite ScientificNumberFormatterTest: "); | |
38 } | |
39 TESTCASE_AUTO_BEGIN; | |
40 TESTCASE_AUTO(TestBasic); | |
41 TESTCASE_AUTO(TestFarsi); | |
42 TESTCASE_AUTO(TestPlusSignInExponentMarkup); | |
43 TESTCASE_AUTO(TestPlusSignInExponentSuperscript); | |
44 TESTCASE_AUTO(TestFixedDecimalMarkup); | |
45 TESTCASE_AUTO(TestFixedDecimalSuperscript); | |
46 TESTCASE_AUTO_END; | |
47 } | |
48 | |
49 void ScientificNumberFormatterTest::TestBasic() { | |
50 UErrorCode status = U_ZERO_ERROR; | |
51 UnicodeString prefix("String: "); | |
52 UnicodeString appendTo(prefix); | |
53 LocalPointer<ScientificNumberFormatter> fmt( | |
54 ScientificNumberFormatter::createMarkupInstance( | |
55 "en" , "<sup>", "</sup>", status)); | |
56 if (!assertSuccess("Can't create ScientificNumberFormatter", status)) { | |
57 return; | |
58 } | |
59 fmt->format(1.23456e-78, appendTo, status); | |
60 const char *expected = "String: 1.23456\\u00d710<sup>-78</sup>"; | |
61 assertEquals( | |
62 "markup style", | |
63 UnicodeString(expected).unescape(), | |
64 appendTo); | |
65 | |
66 // Test superscript style | |
67 fmt.adoptInstead( | |
68 ScientificNumberFormatter::createSuperscriptInstance( | |
69 "en", status)); | |
70 if (!assertSuccess("Can't create ScientificNumberFormatter2", status)) { | |
71 return; | |
72 } | |
73 appendTo = prefix; | |
74 fmt->format(1.23456e-78, appendTo, status); | |
75 expected = "String: 1.23456\\u00d710\\u207b\\u2077\\u2078"; | |
76 assertEquals( | |
77 "superscript style", | |
78 UnicodeString(expected).unescape(), | |
79 appendTo); | |
80 | |
81 // Test clone | |
82 LocalPointer<ScientificNumberFormatter> fmt3(fmt->clone()); | |
83 if (fmt3.isNull()) { | |
84 errln("Allocating clone failed."); | |
85 return; | |
86 } | |
87 appendTo = prefix; | |
88 fmt3->format(1.23456e-78, appendTo, status); | |
89 expected = "String: 1.23456\\u00d710\\u207b\\u2077\\u2078"; | |
90 assertEquals( | |
91 "superscript style", | |
92 UnicodeString(expected).unescape(), | |
93 appendTo); | |
94 assertSuccess("", status); | |
95 } | |
96 | |
97 void ScientificNumberFormatterTest::TestFarsi() { | |
98 UErrorCode status = U_ZERO_ERROR; | |
99 UnicodeString prefix("String: "); | |
100 UnicodeString appendTo(prefix); | |
101 LocalPointer<ScientificNumberFormatter> fmt( | |
102 ScientificNumberFormatter::createMarkupInstance( | |
103 "fa", "<sup>", "</sup>", status)); | |
104 if (!assertSuccess("Can't create ScientificNumberFormatter", status)) { | |
105 return; | |
106 } | |
107 fmt->format(1.23456e-78, appendTo, status); | |
108 const char *expected = "String: \\u06F1\\u066B\\u06F2\\u06F3\\u06F4\\u06F5\\
u06F6\\u00d7\\u06F1\\u06F0<sup>\\u200E\\u2212\\u06F7\\u06F8</sup>"; | |
109 assertEquals( | |
110 "", | |
111 UnicodeString(expected).unescape(), | |
112 appendTo); | |
113 assertSuccess("", status); | |
114 } | |
115 | |
116 void ScientificNumberFormatterTest::TestPlusSignInExponentMarkup() { | |
117 UErrorCode status = U_ZERO_ERROR; | |
118 LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createSci
entificInstance("en", status)); | |
119 if (U_FAILURE(status)) { | |
120 dataerrln("Failed call NumberFormat::createScientificInstance(\"en\", st
atus) - %s", u_errorName(status)); | |
121 return; | |
122 } | |
123 decfmt->applyPattern("0.00E+0", status); | |
124 if (!assertSuccess("", status)) { | |
125 return; | |
126 } | |
127 UnicodeString appendTo; | |
128 LocalPointer<ScientificNumberFormatter> fmt( | |
129 ScientificNumberFormatter::createMarkupInstance( | |
130 new DecimalFormat(*decfmt), "<sup>", "</sup>", status)); | |
131 if (!assertSuccess("Can't create ScientificNumberFormatter", status)) { | |
132 return; | |
133 } | |
134 fmt->format(6.02e23, appendTo, status); | |
135 const char *expected = "6.02\\u00d710<sup>+23</sup>"; | |
136 assertEquals( | |
137 "", | |
138 UnicodeString(expected).unescape(), | |
139 appendTo); | |
140 assertSuccess("", status); | |
141 } | |
142 | |
143 void ScientificNumberFormatterTest::TestPlusSignInExponentSuperscript() { | |
144 UErrorCode status = U_ZERO_ERROR; | |
145 LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createSci
entificInstance("en", status)); | |
146 if (U_FAILURE(status)) { | |
147 dataerrln("Failed call NumberFormat::createScientificInstance(\"en\", st
atus) - %s", u_errorName(status)); | |
148 return; | |
149 } | |
150 decfmt->applyPattern("0.00E+0", status); | |
151 if (!assertSuccess("", status)) { | |
152 return; | |
153 } | |
154 UnicodeString appendTo; | |
155 LocalPointer<ScientificNumberFormatter> fmt( | |
156 ScientificNumberFormatter::createSuperscriptInstance( | |
157 new DecimalFormat(*decfmt), status)); | |
158 if (!assertSuccess("Can't create ScientificNumberFormatter", status)) { | |
159 return; | |
160 } | |
161 fmt->format(6.02e23, appendTo, status); | |
162 const char *expected = "6.02\\u00d710\\u207a\\u00b2\\u00b3"; | |
163 assertEquals( | |
164 "", | |
165 UnicodeString(expected).unescape(), | |
166 appendTo); | |
167 assertSuccess("", status); | |
168 } | |
169 | |
170 void ScientificNumberFormatterTest::TestFixedDecimalMarkup() { | |
171 UErrorCode status = U_ZERO_ERROR; | |
172 LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createIns
tance("en", status)); | |
173 if (assertSuccess("NumberFormat::createInstance", status, TRUE) == FALSE) { | |
174 return; | |
175 } | |
176 LocalPointer<ScientificNumberFormatter> fmt( | |
177 ScientificNumberFormatter::createMarkupInstance( | |
178 new DecimalFormat(*decfmt), "<sup>", "</sup>", status)); | |
179 if (!assertSuccess("Can't create ScientificNumberFormatter", status)) { | |
180 return; | |
181 } | |
182 UnicodeString appendTo; | |
183 fmt->format(123456.0, appendTo, status); | |
184 const char *expected = "123,456"; | |
185 assertEquals( | |
186 "", | |
187 UnicodeString(expected).unescape(), | |
188 appendTo); | |
189 assertSuccess("", status); | |
190 } | |
191 | |
192 void ScientificNumberFormatterTest::TestFixedDecimalSuperscript() { | |
193 UErrorCode status = U_ZERO_ERROR; | |
194 LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createIns
tance("en", status)); | |
195 if (assertSuccess("NumberFormat::createInstance", status, TRUE) == FALSE) { | |
196 return; | |
197 } | |
198 LocalPointer<ScientificNumberFormatter> fmt( | |
199 ScientificNumberFormatter::createSuperscriptInstance( | |
200 new DecimalFormat(*decfmt), status)); | |
201 if (!assertSuccess("Can't create ScientificNumberFormatter", status)) { | |
202 return; | |
203 } | |
204 UnicodeString appendTo; | |
205 fmt->format(123456.0, appendTo, status); | |
206 const char *expected = "123,456"; | |
207 assertEquals( | |
208 "", | |
209 UnicodeString(expected).unescape(), | |
210 appendTo); | |
211 assertSuccess("", status); | |
212 } | |
213 | |
214 extern IntlTest *createScientificNumberFormatterTest() { | |
215 return new ScientificNumberFormatterTest(); | |
216 } | |
217 | |
218 #endif /* !UCONFIG_NO_FORMATTING */ | |
OLD | NEW |