Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(696)

Side by Side Diff: source/test/intltest/simplepatternformattertest.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/test/intltest/sdtfmtts.cpp ('k') | source/test/intltest/simplethread.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ******************************************************************************* 2 *******************************************************************************
3 * Copyright (C) 2014, International Business Machines Corporation and * 3 * Copyright (C) 2014, International Business Machines Corporation and *
4 * others. All Rights Reserved. * 4 * others. All Rights Reserved. *
5 ******************************************************************************* 5 *******************************************************************************
6 * 6 *
7 * File SIMPLEPATTERNFORMATTERTEST.CPP 7 * File SIMPLEPATTERNFORMATTERTEST.CPP
8 * 8 *
9 ******************************************************************************** 9 ********************************************************************************
10 */ 10 */
11 #include "cstring.h" 11 #include "cstring.h"
12 #include "intltest.h" 12 #include "intltest.h"
13 #include "simplepatternformatter.h" 13 #include "simplepatternformatter.h"
14 14
15 class SimplePatternFormatterTest : public IntlTest { 15 class SimplePatternFormatterTest : public IntlTest {
16 public: 16 public:
17 SimplePatternFormatterTest() { 17 SimplePatternFormatterTest() {
18 } 18 }
19 void TestNoPlaceholders(); 19 void TestNoPlaceholders();
20 void TestOnePlaceholder(); 20 void TestOnePlaceholder();
21 void TestManyPlaceholders(); 21 void TestManyPlaceholders();
22 void TestTooFewPlaceholderValues();
23 void TestBadArguments();
22 void TestGetPatternWithNoPlaceholders(); 24 void TestGetPatternWithNoPlaceholders();
23 void TestOptimization(); 25 void TestFormatReplaceNoOptimization();
26 void TestFormatReplaceNoOptimizationLeadingText();
27 void TestFormatReplaceOptimization();
28 void TestFormatReplaceNoOptimizationLeadingPlaceholderUsedTwice();
29 void TestFormatReplaceOptimizationNoOffsets();
30 void TestFormatReplaceNoOptimizationNoOffsets();
24 void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par= 0); 31 void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par= 0);
25 private: 32 private:
33 void verifyOffsets(
34 const int32_t *expected,
35 const int32_t *actual,
36 int32_t count);
26 }; 37 };
27 38
28 void SimplePatternFormatterTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) { 39 void SimplePatternFormatterTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
29 TESTCASE_AUTO_BEGIN; 40 TESTCASE_AUTO_BEGIN;
30 TESTCASE_AUTO(TestNoPlaceholders); 41 TESTCASE_AUTO(TestNoPlaceholders);
31 TESTCASE_AUTO(TestOnePlaceholder); 42 TESTCASE_AUTO(TestOnePlaceholder);
32 TESTCASE_AUTO(TestManyPlaceholders); 43 TESTCASE_AUTO(TestManyPlaceholders);
44 TESTCASE_AUTO(TestTooFewPlaceholderValues);
45 TESTCASE_AUTO(TestBadArguments);
33 TESTCASE_AUTO(TestGetPatternWithNoPlaceholders); 46 TESTCASE_AUTO(TestGetPatternWithNoPlaceholders);
34 TESTCASE_AUTO(TestOptimization); 47 TESTCASE_AUTO(TestFormatReplaceNoOptimization);
48 TESTCASE_AUTO(TestFormatReplaceNoOptimizationLeadingText);
49 TESTCASE_AUTO(TestFormatReplaceOptimization);
50 TESTCASE_AUTO(TestFormatReplaceNoOptimizationLeadingPlaceholderUsedTwice);
51 TESTCASE_AUTO(TestFormatReplaceOptimizationNoOffsets);
52 TESTCASE_AUTO(TestFormatReplaceNoOptimizationNoOffsets);
35 TESTCASE_AUTO_END; 53 TESTCASE_AUTO_END;
36 } 54 }
37 55
38 void SimplePatternFormatterTest::TestNoPlaceholders() { 56 void SimplePatternFormatterTest::TestNoPlaceholders() {
39 UErrorCode status = U_ZERO_ERROR; 57 UErrorCode status = U_ZERO_ERROR;
40 SimplePatternFormatter fmt("This doesn''t have templates '{0}"); 58 SimplePatternFormatter fmt("This doesn''t have templates '{0}");
41 assertEquals("PlaceholderCount", 0, fmt.getPlaceholderCount()); 59 assertEquals("PlaceholderCount", 0, fmt.getPlaceholderCount());
42 UnicodeString appendTo; 60 UnicodeString appendTo;
43 assertEquals( 61 assertEquals(
44 "format", 62 "format",
45 "This doesn't have templates {0}", 63 "This doesn't have templates {0}",
46 fmt.format("unused", appendTo, status)); 64 fmt.format("unused", appendTo, status));
47 fmt.compile("This has {} bad {012d placeholders", status); 65 fmt.compile("This has {} bad {012d placeholders", status);
48 assertEquals("PlaceholderCount", 0, fmt.getPlaceholderCount()); 66 assertEquals("PlaceholderCount", 0, fmt.getPlaceholderCount());
49 appendTo.remove(); 67 appendTo.remove();
50 assertEquals( 68 assertEquals(
51 "format", 69 "format",
52 "This has {} bad {012d placeholders", 70 "This has {} bad {012d placeholders",
53 fmt.format("unused", appendTo, status)); 71 fmt.format("unused", appendTo, status));
54 assertSuccess("Status", status); 72 assertSuccess("Status", status);
55 } 73 }
56 74
57 void SimplePatternFormatterTest::TestOnePlaceholder() { 75 void SimplePatternFormatterTest::TestOnePlaceholder() {
58 UErrorCode status = U_ZERO_ERROR; 76 UErrorCode status = U_ZERO_ERROR;
59 SimplePatternFormatter fmt; 77 SimplePatternFormatter fmt;
60 fmt.compile("{0} meter", status); 78 fmt.compile("{0} meter", status);
79 if (!assertSuccess("Status", status)) {
80 return;
81 }
61 assertEquals("PlaceholderCount", 1, fmt.getPlaceholderCount()); 82 assertEquals("PlaceholderCount", 1, fmt.getPlaceholderCount());
62 UnicodeString appendTo; 83 UnicodeString appendTo;
63 assertEquals( 84 assertEquals(
64 "format", 85 "format",
65 "1 meter", 86 "1 meter",
66 fmt.format("1", appendTo, status)); 87 fmt.format("1", appendTo, status));
67 assertSuccess("Status", status);
68 88
69 // assignment 89 // assignment
70 SimplePatternFormatter s; 90 SimplePatternFormatter s;
71 s = fmt; 91 s = fmt;
72 appendTo.remove(); 92 appendTo.remove();
73 assertEquals( 93 assertEquals(
74 "Assignment", 94 "Assignment",
75 "1 meter", 95 "1 meter",
76 s.format("1", appendTo, status)); 96 s.format("1", appendTo, status));
77 97
78 // Copy constructor 98 // Copy constructor
79 SimplePatternFormatter r(fmt); 99 SimplePatternFormatter r(fmt);
80 appendTo.remove(); 100 appendTo.remove();
81 assertEquals( 101 assertEquals(
82 "Copy constructor", 102 "Copy constructor",
83 "1 meter", 103 "1 meter",
84 r.format("1", appendTo, status)); 104 r.format("1", appendTo, status));
85 assertSuccess("Status", status); 105 assertSuccess("Status", status);
86 } 106 }
87 107
88 void SimplePatternFormatterTest::TestManyPlaceholders() { 108 void SimplePatternFormatterTest::TestManyPlaceholders() {
89 UErrorCode status = U_ZERO_ERROR; 109 UErrorCode status = U_ZERO_ERROR;
90 SimplePatternFormatter fmt; 110 SimplePatternFormatter fmt;
91 fmt.compile( 111 fmt.compile(
92 "Templates {2}{1}{5} and {4} are out of order.", status); 112 "Templates {2}{1}{5} and {4} are out of order.", status);
93 assertSuccess("Status", status); 113 if (!assertSuccess("Status", status)) {
94 assertFalse("startsWithPlaceholder", fmt.startsWithPlaceholder(2)); 114 return;
115 }
95 assertEquals("PlaceholderCount", 6, fmt.getPlaceholderCount()); 116 assertEquals("PlaceholderCount", 6, fmt.getPlaceholderCount());
96 UnicodeString values[] = { 117 UnicodeString values[] = {
97 "freddy", "tommy", "frog", "billy", "leg", "{0}"}; 118 "freddy", "tommy", "frog", "billy", "leg", "{0}"};
98 UnicodeString *params[] = { 119 UnicodeString *params[] = {
99 &values[0], &values[1], &values[2], &values[3], &values[4], &values[5 ]}; 120 &values[0], &values[1], &values[2], &values[3], &values[4], &values[5 ]};
100 int32_t offsets[6]; 121 int32_t offsets[6];
101 int32_t expectedOffsets[6] = {-1, 22, 18, -1, 35, 27}; 122 int32_t expectedOffsets[6] = {-1, 22, 18, -1, 35, 27};
102 UnicodeString appendTo("Prefix: "); 123 UnicodeString appendTo("Prefix: ");
103 assertEquals( 124 assertEquals(
104 "format", 125 "format",
105 "Prefix: Templates frogtommy{0} and leg are out of order.", 126 "Prefix: Templates frogtommy{0} and leg are out of order.",
106 fmt.format( 127 fmt.formatAndAppend(
107 params, 128 params,
108 UPRV_LENGTHOF(params), 129 UPRV_LENGTHOF(params),
109 appendTo, 130 appendTo,
110 offsets, 131 offsets,
111 UPRV_LENGTHOF(offsets), 132 UPRV_LENGTHOF(offsets),
112 status)); 133 status));
113 assertSuccess("Status", status); 134 if (!assertSuccess("Status", status)) {
114 for (int32_t i = 0; i < UPRV_LENGTHOF(expectedOffsets); ++i) { 135 return;
115 if (expectedOffsets[i] != offsets[i]) {
116 errln("Expected %d, got %d", expectedOffsets[i], offsets[i]);
117 }
118 } 136 }
137 verifyOffsets(expectedOffsets, offsets, UPRV_LENGTHOF(expectedOffsets));
119 appendTo.remove(); 138 appendTo.remove();
120 139
121 // Not having enough placeholder params results in error.
122 fmt.format(
123 params,
124 UPRV_LENGTHOF(params) - 1,
125 appendTo,
126 offsets,
127 UPRV_LENGTHOF(offsets),
128 status);
129 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
130 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
131 }
132
133 // Ensure we don't write to offsets array beyond its length. 140 // Ensure we don't write to offsets array beyond its length.
134 status = U_ZERO_ERROR; 141 status = U_ZERO_ERROR;
135 offsets[UPRV_LENGTHOF(offsets) - 1] = 289; 142 offsets[UPRV_LENGTHOF(offsets) - 1] = 289;
136 appendTo.remove(); 143 appendTo.remove();
137 fmt.format( 144 fmt.formatAndAppend(
138 params, 145 params,
139 UPRV_LENGTHOF(params), 146 UPRV_LENGTHOF(params),
140 appendTo, 147 appendTo,
141 offsets, 148 offsets,
142 UPRV_LENGTHOF(offsets) - 1, 149 UPRV_LENGTHOF(offsets) - 1,
143 status); 150 status);
144 assertEquals("Offsets buffer length", 289, offsets[UPRV_LENGTHOF(offsets) - 1]); 151 assertEquals("Offsets buffer length", 289, offsets[UPRV_LENGTHOF(offsets) - 1]);
145 152
146 // Test assignment 153 // Test assignment
147 SimplePatternFormatter s; 154 SimplePatternFormatter s;
148 s = fmt; 155 s = fmt;
149 appendTo.remove(); 156 appendTo.remove();
150 assertEquals( 157 assertEquals(
151 "Assignment", 158 "Assignment",
152 "Templates frogtommy{0} and leg are out of order.", 159 "Templates frogtommy{0} and leg are out of order.",
153 s.format( 160 s.formatAndAppend(
154 params, 161 params,
155 UPRV_LENGTHOF(params), 162 UPRV_LENGTHOF(params),
156 appendTo, 163 appendTo,
157 NULL, 164 NULL,
158 0, 165 0,
159 status)); 166 status));
160 167
161 // Copy constructor 168 // Copy constructor
162 SimplePatternFormatter r(fmt); 169 SimplePatternFormatter r(fmt);
163 appendTo.remove(); 170 appendTo.remove();
164 assertEquals( 171 assertEquals(
165 "Copy constructor", 172 "Copy constructor",
166 "Templates frogtommy{0} and leg are out of order.", 173 "Templates frogtommy{0} and leg are out of order.",
167 r.format( 174 r.formatAndAppend(
168 params, 175 params,
169 UPRV_LENGTHOF(params), 176 UPRV_LENGTHOF(params),
170 appendTo, 177 appendTo,
171 NULL, 178 NULL,
172 0, 179 0,
173 status)); 180 status));
174 r.compile("{0} meter", status); 181 r.compile("{0} meter", status);
175 assertEquals("PlaceholderCount", 1, r.getPlaceholderCount()); 182 assertEquals("PlaceholderCount", 1, r.getPlaceholderCount());
176 appendTo.remove(); 183 appendTo.remove();
177 assertEquals( 184 assertEquals(
(...skipping 10 matching lines...) Expand all
188 r.compile("{0}, {1} and {2}", status); 195 r.compile("{0}, {1} and {2}", status);
189 assertEquals("PlaceholderCount", 3, r.getPlaceholderCount()); 196 assertEquals("PlaceholderCount", 3, r.getPlaceholderCount());
190 appendTo.remove(); 197 appendTo.remove();
191 assertEquals( 198 assertEquals(
192 "3 arg", 199 "3 arg",
193 "foo, bar and baz", 200 "foo, bar and baz",
194 r.format("foo", "bar", "baz", appendTo, status)); 201 r.format("foo", "bar", "baz", appendTo, status));
195 assertSuccess("Status", status); 202 assertSuccess("Status", status);
196 } 203 }
197 204
205 void SimplePatternFormatterTest::TestTooFewPlaceholderValues() {
206 SimplePatternFormatter fmt("{0} and {1}");
207 UnicodeString appendTo;
208 UnicodeString firstValue;
209 UnicodeString *params[] = {&firstValue};
210
211 UErrorCode status = U_ZERO_ERROR;
212 fmt.format(
213 firstValue, appendTo, status);
214 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
215 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
216 }
217
218 status = U_ZERO_ERROR;
219 fmt.formatAndAppend(
220 params, UPRV_LENGTHOF(params), appendTo, NULL, 0, status);
221 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
222 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
223 }
224
225 status = U_ZERO_ERROR;
226 fmt.formatAndReplace(
227 params, UPRV_LENGTHOF(params), appendTo, NULL, 0, status);
228 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
229 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
230 }
231 }
232
233 void SimplePatternFormatterTest::TestBadArguments() {
234 SimplePatternFormatter fmt("pickle");
235 UnicodeString appendTo;
236 UErrorCode status = U_ZERO_ERROR;
237
238 // These succeed
239 fmt.formatAndAppend(
240 NULL, 0, appendTo, NULL, 0, status);
241 fmt.formatAndReplace(
242 NULL, 0, appendTo, NULL, 0, status);
243 assertSuccess("", status);
244 status = U_ZERO_ERROR;
245
246 // fails
247 fmt.formatAndAppend(
248 NULL, 1, appendTo, NULL, 0, status);
249 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
250 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
251 }
252 status = U_ZERO_ERROR;
253
254 // fails
255 fmt.formatAndAppend(
256 NULL, 0, appendTo, NULL, 1, status);
257 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
258 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
259 }
260 status = U_ZERO_ERROR;
261
262 // fails because appendTo used as a parameter value
263 const UnicodeString *params[] = {&appendTo};
264 fmt.formatAndAppend(
265 params, UPRV_LENGTHOF(params), appendTo, NULL, 0, status);
266 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
267 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
268 }
269 status = U_ZERO_ERROR;
270
271
272 // fails
273 fmt.formatAndReplace(
274 NULL, 1, appendTo, NULL, 0, status);
275 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
276 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
277 }
278 status = U_ZERO_ERROR;
279
280 // fails
281 fmt.formatAndReplace(
282 NULL, 0, appendTo, NULL, 1, status);
283 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
284 errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
285 }
286 }
287
198 void SimplePatternFormatterTest::TestGetPatternWithNoPlaceholders() { 288 void SimplePatternFormatterTest::TestGetPatternWithNoPlaceholders() {
199 SimplePatternFormatter fmt("{0} has no {1} placeholders."); 289 SimplePatternFormatter fmt("{0} has no {1} placeholders.");
200 assertEquals( 290 assertEquals(
201 "", " has no placeholders.", fmt.getPatternWithNoPlaceholders()); 291 "", " has no placeholders.", fmt.getPatternWithNoPlaceholders());
202 } 292 }
203 293
204 void SimplePatternFormatterTest::TestOptimization() { 294 void SimplePatternFormatterTest::TestFormatReplaceNoOptimization() {
205 UErrorCode status = U_ZERO_ERROR; 295 UErrorCode status = U_ZERO_ERROR;
206 SimplePatternFormatter fmt; 296 SimplePatternFormatter fmt;
207 fmt.compile("{2}, {0}, {1} and {3}", status); 297 fmt.compile("{2}, {0}, {1} and {3}", status);
298 if (!assertSuccess("Status", status)) {
299 return;
300 }
301 UnicodeString result("original");
302 int offsets[4];
303 UnicodeString freddy("freddy");
304 UnicodeString frog("frog");
305 UnicodeString by("by");
306 const UnicodeString *params[] = {&result, &freddy, &frog, &by};
307 assertEquals(
308 "",
309 "frog, original, freddy and by",
310 fmt.formatAndReplace(
311 params,
312 UPRV_LENGTHOF(params),
313 result,
314 offsets,
315 UPRV_LENGTHOF(offsets),
316 status));
317 if (!assertSuccess("Status", status)) {
318 return;
319 }
320 int32_t expectedOffsets[] = {6, 16, 0, 27};
321 verifyOffsets(expectedOffsets, offsets, UPRV_LENGTHOF(expectedOffsets));
322 }
323
324 void SimplePatternFormatterTest::TestFormatReplaceNoOptimizationLeadingText() {
325 UErrorCode status = U_ZERO_ERROR;
326 SimplePatternFormatter fmt;
327 fmt.compile("boo {2}, {0}, {1} and {3}", status);
328 if (!assertSuccess("Status", status)) {
329 return;
330 }
331 UnicodeString result("original");
332 int offsets[4];
333 UnicodeString freddy("freddy");
334 UnicodeString frog("frog");
335 UnicodeString by("by");
336 const UnicodeString *params[] = {&freddy, &frog, &result, &by};
337 assertEquals(
338 "",
339 "boo original, freddy, frog and by",
340 fmt.formatAndReplace(
341 params,
342 UPRV_LENGTHOF(params),
343 result,
344 offsets,
345 UPRV_LENGTHOF(offsets),
346 status));
347 if (!assertSuccess("Status", status)) {
348 return;
349 }
350 int32_t expectedOffsets[] = {14, 22, 4, 31};
351 verifyOffsets(expectedOffsets, offsets, UPRV_LENGTHOF(expectedOffsets));
352 }
353
354 void SimplePatternFormatterTest::TestFormatReplaceOptimization() {
355 UErrorCode status = U_ZERO_ERROR;
356 SimplePatternFormatter fmt;
357 fmt.compile("{2}, {0}, {1} and {3}", status);
358 if (!assertSuccess("Status", status)) {
359 return;
360 }
361 UnicodeString result("original");
362 int offsets[4];
363 UnicodeString freddy("freddy");
364 UnicodeString frog("frog");
365 UnicodeString by("by");
366 const UnicodeString *params[] = {&freddy, &frog, &result, &by};
367 assertEquals(
368 "",
369 "original, freddy, frog and by",
370 fmt.formatAndReplace(
371 params,
372 UPRV_LENGTHOF(params),
373 result,
374 offsets,
375 UPRV_LENGTHOF(offsets),
376 status));
377 if (!assertSuccess("Status", status)) {
378 return;
379 }
380 int32_t expectedOffsets[] = {10, 18, 0, 27};
381 verifyOffsets(expectedOffsets, offsets, UPRV_LENGTHOF(expectedOffsets));
382 }
383
384 void SimplePatternFormatterTest::TestFormatReplaceNoOptimizationLeadingPlacehold erUsedTwice() {
385 UErrorCode status = U_ZERO_ERROR;
386 SimplePatternFormatter fmt;
387 fmt.compile("{2}, {0}, {1} and {3} {2}", status);
388 if (!assertSuccess("Status", status)) {
389 return;
390 }
391 UnicodeString result("original");
392 int offsets[4];
393 UnicodeString freddy("freddy");
394 UnicodeString frog("frog");
395 UnicodeString by("by");
396 const UnicodeString *params[] = {&freddy, &frog, &result, &by};
397 assertEquals(
398 "",
399 "original, freddy, frog and by original",
400 fmt.formatAndReplace(
401 params,
402 UPRV_LENGTHOF(params),
403 result,
404 offsets,
405 UPRV_LENGTHOF(offsets),
406 status));
407 if (!assertSuccess("Status", status)) {
408 return;
409 }
410 int32_t expectedOffsets[] = {10, 18, 30, 27};
411 verifyOffsets(expectedOffsets, offsets, UPRV_LENGTHOF(expectedOffsets));
412 }
413
414 void SimplePatternFormatterTest::TestFormatReplaceOptimizationNoOffsets() {
415 UErrorCode status = U_ZERO_ERROR;
416 SimplePatternFormatter fmt;
417 fmt.compile("{2}, {0}, {1} and {3}", status);
418 if (!assertSuccess("Status", status)) {
419 return;
420 }
421 UnicodeString result("original");
422 UnicodeString freddy("freddy");
423 UnicodeString frog("frog");
424 UnicodeString by("by");
425 const UnicodeString *params[] = {&freddy, &frog, &result, &by};
426 assertEquals(
427 "",
428 "original, freddy, frog and by",
429 fmt.formatAndReplace(
430 params,
431 UPRV_LENGTHOF(params),
432 result,
433 NULL,
434 0,
435 status));
208 assertSuccess("Status", status); 436 assertSuccess("Status", status);
209 assertTrue("startsWithPlaceholder", fmt.startsWithPlaceholder(2)); 437 }
210 assertFalse("startsWithPlaceholder", fmt.startsWithPlaceholder(0)); 438
211 UnicodeString values[] = { 439 void SimplePatternFormatterTest::TestFormatReplaceNoOptimizationNoOffsets() {
212 "freddy", "frog", "leg", "by"}; 440 UErrorCode status = U_ZERO_ERROR;
213 UnicodeString *params[] = { 441 SimplePatternFormatter fmt("Placeholders {0} and {1}");
214 &values[0], &values[1], &values[2], &values[3]}; 442 UnicodeString result("previous:");
215 int32_t offsets[4]; 443 UnicodeString frog("frog");
216 int32_t expectedOffsets[4] = {5, 13, 0, 22}; 444 const UnicodeString *params[] = {&result, &frog};
217 445 assertEquals(
218 // The pattern starts with {2}, so format should append the result of 446 "",
219 // the rest of the pattern to values[2], the value for {2}. 447 "Placeholders previous: and frog",
220 assertEquals( 448 fmt.formatAndReplace(
221 "format", 449 params,
222 "leg, freddy, frog and by", 450 UPRV_LENGTHOF(params),
223 fmt.format( 451 result,
224 params, 452 NULL,
225 UPRV_LENGTHOF(params), 453 0,
226 values[2],
227 offsets,
228 UPRV_LENGTHOF(offsets),
229 status)); 454 status));
230 assertSuccess("Status", status); 455 assertSuccess("Status", status);
231 for (int32_t i = 0; i < UPRV_LENGTHOF(expectedOffsets); ++i) { 456 }
232 if (expectedOffsets[i] != offsets[i]) { 457
233 errln("Expected %d, got %d", expectedOffsets[i], offsets[i]); 458 void SimplePatternFormatterTest::verifyOffsets(
459 const int32_t *expected, const int32_t *actual, int32_t count) {
460 for (int32_t i = 0; i < count; ++i) {
461 if (expected[i] != actual[i]) {
462 errln("Expected %d, got %d", expected[i], actual[i]);
234 } 463 }
235 } 464 }
236 } 465 }
237 466
238 extern IntlTest *createSimplePatternFormatterTest() { 467 extern IntlTest *createSimplePatternFormatterTest() {
239 return new SimplePatternFormatterTest(); 468 return new SimplePatternFormatterTest();
240 } 469 }
470
OLDNEW
« no previous file with comments | « source/test/intltest/sdtfmtts.cpp ('k') | source/test/intltest/simplethread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698