2 *******************************************************************************
3 * Copyright (C) 2014, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
7 * File SCINUMBERFORMATTERTEST.CPP
9 *******************************************************************************
11 #include "unicode/utypes.h"
15 #if !UCONFIG_NO_FORMATTING
17 #include "unicode/scientificnumberformatter.h"
18 #include "unicode/numfmt.h"
19 #include "unicode/decimfmt.h"
20 #include "unicode/localpointer.h"
22 class ScientificNumberFormatterTest
: public IntlTest
{
24 void runIndexedTest(int32_t index
, UBool exec
, const char *&name
, char *par
=0);
28 void TestPlusSignInExponentMarkup();
29 void TestPlusSignInExponentSuperscript();
30 void TestFixedDecimalMarkup();
31 void TestFixedDecimalSuperscript();
34 void ScientificNumberFormatterTest::runIndexedTest(
35 int32_t index
, UBool exec
, const char *&name
, char *) {
37 logln("TestSuite ScientificNumberFormatterTest: ");
40 TESTCASE_AUTO(TestBasic
);
41 TESTCASE_AUTO(TestFarsi
);
42 TESTCASE_AUTO(TestPlusSignInExponentMarkup
);
43 TESTCASE_AUTO(TestPlusSignInExponentSuperscript
);
44 TESTCASE_AUTO(TestFixedDecimalMarkup
);
45 TESTCASE_AUTO(TestFixedDecimalSuperscript
);
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
)) {
59 fmt
->format(1.23456e-78, appendTo
, status
);
60 const char *expected
= "String: 1.23456\\u00d710<sup>-78</sup>";
63 UnicodeString(expected
).unescape(),
66 // Test superscript style
68 ScientificNumberFormatter::createSuperscriptInstance(
70 if (!assertSuccess("Can't create ScientificNumberFormatter2", status
)) {
74 fmt
->format(1.23456e-78, appendTo
, status
);
75 expected
= "String: 1.23456\\u00d710\\u207b\\u2077\\u2078";
78 UnicodeString(expected
).unescape(),
82 LocalPointer
<ScientificNumberFormatter
> fmt3(fmt
->clone());
84 errln("Allocating clone failed.");
88 fmt3
->format(1.23456e-78, appendTo
, status
);
89 expected
= "String: 1.23456\\u00d710\\u207b\\u2077\\u2078";
92 UnicodeString(expected
).unescape(),
94 assertSuccess("", status
);
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
)) {
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>";
111 UnicodeString(expected
).unescape(),
113 assertSuccess("", status
);
116 void ScientificNumberFormatterTest::TestPlusSignInExponentMarkup() {
117 UErrorCode status
= U_ZERO_ERROR
;
118 LocalPointer
<DecimalFormat
> decfmt((DecimalFormat
*) NumberFormat::createScientificInstance("en", status
));
119 if (U_FAILURE(status
)) {
120 dataerrln("Failed call NumberFormat::createScientificInstance(\"en\", status) - %s", u_errorName(status
));
123 decfmt
->applyPattern("0.00E+0", status
);
124 if (!assertSuccess("", status
)) {
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
)) {
134 fmt
->format(6.02e23
, appendTo
, status
);
135 const char *expected
= "6.02\\u00d710<sup>+23</sup>";
138 UnicodeString(expected
).unescape(),
140 assertSuccess("", status
);
143 void ScientificNumberFormatterTest::TestPlusSignInExponentSuperscript() {
144 UErrorCode status
= U_ZERO_ERROR
;
145 LocalPointer
<DecimalFormat
> decfmt((DecimalFormat
*) NumberFormat::createScientificInstance("en", status
));
146 if (U_FAILURE(status
)) {
147 dataerrln("Failed call NumberFormat::createScientificInstance(\"en\", status) - %s", u_errorName(status
));
150 decfmt
->applyPattern("0.00E+0", status
);
151 if (!assertSuccess("", status
)) {
154 UnicodeString appendTo
;
155 LocalPointer
<ScientificNumberFormatter
> fmt(
156 ScientificNumberFormatter::createSuperscriptInstance(
157 new DecimalFormat(*decfmt
), status
));
158 if (!assertSuccess("Can't create ScientificNumberFormatter", status
)) {
161 fmt
->format(6.02e23
, appendTo
, status
);
162 const char *expected
= "6.02\\u00d710\\u207a\\u00b2\\u00b3";
165 UnicodeString(expected
).unescape(),
167 assertSuccess("", status
);
170 void ScientificNumberFormatterTest::TestFixedDecimalMarkup() {
171 UErrorCode status
= U_ZERO_ERROR
;
172 LocalPointer
<DecimalFormat
> decfmt((DecimalFormat
*) NumberFormat::createInstance("en", status
));
173 if (assertSuccess("NumberFormat::createInstance", status
, TRUE
) == FALSE
) {
176 LocalPointer
<ScientificNumberFormatter
> fmt(
177 ScientificNumberFormatter::createMarkupInstance(
178 new DecimalFormat(*decfmt
), "<sup>", "</sup>", status
));
179 if (!assertSuccess("Can't create ScientificNumberFormatter", status
)) {
182 UnicodeString appendTo
;
183 fmt
->format(123456.0, appendTo
, status
);
184 const char *expected
= "123,456";
187 UnicodeString(expected
).unescape(),
189 assertSuccess("", status
);
192 void ScientificNumberFormatterTest::TestFixedDecimalSuperscript() {
193 UErrorCode status
= U_ZERO_ERROR
;
194 LocalPointer
<DecimalFormat
> decfmt((DecimalFormat
*) NumberFormat::createInstance("en", status
));
195 if (assertSuccess("NumberFormat::createInstance", status
, TRUE
) == FALSE
) {
198 LocalPointer
<ScientificNumberFormatter
> fmt(
199 ScientificNumberFormatter::createSuperscriptInstance(
200 new DecimalFormat(*decfmt
), status
));
201 if (!assertSuccess("Can't create ScientificNumberFormatter", status
)) {
204 UnicodeString appendTo
;
205 fmt
->format(123456.0, appendTo
, status
);
206 const char *expected
= "123,456";
209 UnicodeString(expected
).unescape(),
211 assertSuccess("", status
);
214 extern IntlTest
*createScientificNumberFormatterTest() {
215 return new ScientificNumberFormatterTest();
218 #endif /* !UCONFIG_NO_FORMATTING */