OLD | NEW |
1 /******************************************************************** | 1 /******************************************************************** |
2 * COPYRIGHT: | 2 * COPYRIGHT: |
3 * Copyright (c) 1997-2009, International Business Machines Corporation and | 3 * Copyright (c) 1997-2014, International Business Machines Corporation and |
4 * others. All Rights Reserved. | 4 * others. All Rights Reserved. |
5 ********************************************************************/ | 5 ********************************************************************/ |
6 | 6 |
7 #include "unicode/utypes.h" | 7 #include "unicode/utypes.h" |
8 | 8 |
9 #if !UCONFIG_NO_COLLATION | 9 #if !UCONFIG_NO_COLLATION |
10 | 10 |
11 #include "unicode/coll.h" | 11 #include "unicode/coll.h" |
12 #include "unicode/tblcoll.h" | 12 #include "unicode/tblcoll.h" |
13 #include "unicode/unistr.h" | 13 #include "unicode/unistr.h" |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 | 169 |
170 /** | 170 /** |
171 * Test for getOffset() and setOffset() | 171 * Test for getOffset() and setOffset() |
172 */ | 172 */ |
173 void CollationIteratorTest::TestOffset(/* char* par */) | 173 void CollationIteratorTest::TestOffset(/* char* par */) |
174 { | 174 { |
175 CollationElementIterator *iter = en_us->createCollationElementIterator(test1
); | 175 CollationElementIterator *iter = en_us->createCollationElementIterator(test1
); |
176 UErrorCode status = U_ZERO_ERROR; | 176 UErrorCode status = U_ZERO_ERROR; |
177 // testing boundaries | 177 // testing boundaries |
178 iter->setOffset(0, status); | 178 iter->setOffset(0, status); |
179 if (U_FAILURE(status) || iter->previous(status) != UCOL_NULLORDER) { | 179 if (U_FAILURE(status) || iter->previous(status) != CollationElementIterator:
:NULLORDER) { |
180 errln("Error: After setting offset to 0, we should be at the end " | 180 errln("Error: After setting offset to 0, we should be at the end " |
181 "of the backwards iteration"); | 181 "of the backwards iteration"); |
182 } | 182 } |
183 iter->setOffset(test1.length(), status); | 183 iter->setOffset(test1.length(), status); |
184 if (U_FAILURE(status) || iter->next(status) != UCOL_NULLORDER) { | 184 if (U_FAILURE(status) || iter->next(status) != CollationElementIterator::NUL
LORDER) { |
185 errln("Error: After setting offset to end of the string, we should " | 185 errln("Error: After setting offset to end of the string, we should " |
186 "be at the end of the backwards iteration"); | 186 "be at the end of the backwards iteration"); |
187 } | 187 } |
188 | 188 |
189 // Run all the way through the iterator, then get the offset | 189 // Run all the way through the iterator, then get the offset |
190 int32_t orderLength = 0; | 190 int32_t orderLength = 0; |
191 Order *orders = getOrders(*iter, orderLength); | 191 Order *orders = getOrders(*iter, orderLength); |
192 | 192 |
193 int32_t offset = iter->getOffset(); | 193 int32_t offset = iter->getOffset(); |
194 | 194 |
(...skipping 12 matching lines...) Expand all Loading... |
207 | 207 |
208 if (U_FAILURE(status)) | 208 if (U_FAILURE(status)) |
209 { | 209 { |
210 errln("setOffset failed."); | 210 errln("setOffset failed."); |
211 } | 211 } |
212 else | 212 else |
213 { | 213 { |
214 assertEqual(*iter, *pristine); | 214 assertEqual(*iter, *pristine); |
215 } | 215 } |
216 | 216 |
217 // TODO: try iterating halfway through a messy string. | |
218 | |
219 delete pristine; | 217 delete pristine; |
220 delete[] orders; | 218 delete[] orders; |
221 delete iter; | 219 delete iter; |
| 220 |
| 221 // setting offset in the middle of a contraction |
| 222 UnicodeString contraction = "change"; |
| 223 status = U_ZERO_ERROR; |
| 224 RuleBasedCollator tailored("& a < ch", status); |
| 225 if (U_FAILURE(status)) { |
| 226 errln("Error: in creation of Spanish collator - %s", u_errorName(status)
); |
| 227 return; |
| 228 } |
| 229 iter = tailored.createCollationElementIterator(contraction); |
| 230 Order *order = getOrders(*iter, orderLength); |
| 231 iter->setOffset(1, status); // sets offset in the middle of ch |
| 232 int32_t order2Length = 0; |
| 233 Order *order2 = getOrders(*iter, order2Length); |
| 234 if (orderLength != order2Length || uprv_memcmp(order, order2, orderLength *
sizeof(Order)) != 0) { |
| 235 errln("Error: setting offset in the middle of a contraction should be th
e same as setting it to the start of the contraction"); |
| 236 } |
| 237 delete[] order; |
| 238 delete[] order2; |
| 239 delete iter; |
| 240 contraction = "peache"; |
| 241 iter = tailored.createCollationElementIterator(contraction); |
| 242 iter->setOffset(3, status); |
| 243 order = getOrders(*iter, orderLength); |
| 244 iter->setOffset(4, status); // sets offset in the middle of ch |
| 245 order2 = getOrders(*iter, order2Length); |
| 246 if (orderLength != order2Length || uprv_memcmp(order, order2, orderLength *
sizeof(Order)) != 0) { |
| 247 errln("Error: setting offset in the middle of a contraction should be th
e same as setting it to the start of the contraction"); |
| 248 } |
| 249 delete[] order; |
| 250 delete[] order2; |
| 251 delete iter; |
| 252 // setting offset in the middle of a surrogate pair |
| 253 UnicodeString surrogate = UNICODE_STRING_SIMPLE("\\ud800\\udc00str").unescap
e(); |
| 254 iter = tailored.createCollationElementIterator(surrogate); |
| 255 order = getOrders(*iter, orderLength); |
| 256 iter->setOffset(1, status); // sets offset in the middle of surrogate |
| 257 order2 = getOrders(*iter, order2Length); |
| 258 if (orderLength != order2Length || uprv_memcmp(order, order2, orderLength *
sizeof(Order)) != 0) { |
| 259 errln("Error: setting offset in the middle of a surrogate pair should be
the same as setting it to the start of the surrogate pair"); |
| 260 } |
| 261 delete[] order; |
| 262 delete[] order2; |
| 263 delete iter; |
| 264 surrogate = UNICODE_STRING_SIMPLE("simple\\ud800\\udc00str").unescape(); |
| 265 iter = tailored.createCollationElementIterator(surrogate); |
| 266 iter->setOffset(6, status); |
| 267 order = getOrders(*iter, orderLength); |
| 268 iter->setOffset(7, status); // sets offset in the middle of surrogate |
| 269 order2 = getOrders(*iter, order2Length); |
| 270 if (orderLength != order2Length || uprv_memcmp(order, order2, orderLength *
sizeof(Order)) != 0) { |
| 271 errln("Error: setting offset in the middle of a surrogate pair should be
the same as setting it to the start of the surrogate pair"); |
| 272 } |
| 273 delete[] order; |
| 274 delete[] order2; |
| 275 delete iter; |
| 276 // TODO: try iterating halfway through a messy string. |
222 } | 277 } |
223 | 278 |
224 /** | 279 /** |
225 * Test for setText() | 280 * Test for setText() |
226 */ | 281 */ |
227 void CollationIteratorTest::TestSetText(/* char* par */) | 282 void CollationIteratorTest::TestSetText(/* char* par */) |
228 { | 283 { |
229 CollationElementIterator *iter1 = en_us->createCollationElementIterator(test
1); | 284 CollationElementIterator *iter1 = en_us->createCollationElementIterator(test
1); |
230 CollationElementIterator *iter2 = en_us->createCollationElementIterator(test
2); | 285 CollationElementIterator *iter2 = en_us->createCollationElementIterator(test
2); |
231 UErrorCode status = U_ZERO_ERROR; | 286 UErrorCode status = U_ZERO_ERROR; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 } | 322 } |
268 else | 323 else |
269 { | 324 { |
270 assertEqual(*iter1, *iter2); | 325 assertEqual(*iter1, *iter2); |
271 } | 326 } |
272 | 327 |
273 // test for an empty string | 328 // test for an empty string |
274 UnicodeString empty(""); | 329 UnicodeString empty(""); |
275 iter1->setText(empty, status); | 330 iter1->setText(empty, status); |
276 if (U_FAILURE(status) | 331 if (U_FAILURE(status) |
277 || iter1->next(status) != (int32_t)UCOL_NULLORDER) { | 332 || iter1->next(status) != (int32_t)CollationElementIterator::NULLORDER)
{ |
278 errln("Empty string should have no CEs."); | 333 errln("Empty string should have no CEs."); |
279 } | 334 } |
280 ((StringCharacterIterator *)chariter)->setText(empty); | 335 ((StringCharacterIterator *)chariter)->setText(empty); |
281 iter1->setText(*chariter, status); | 336 iter1->setText(*chariter, status); |
282 if (U_FAILURE(status) | 337 if (U_FAILURE(status) |
283 || iter1->next(status) != (int32_t)UCOL_NULLORDER) { | 338 || iter1->next(status) != (int32_t)CollationElementIterator::NULLORDER)
{ |
284 errln("Empty string should have no CEs."); | 339 errln("Empty string should have no CEs."); |
285 } | 340 } |
286 delete chariter; | 341 delete chariter; |
287 delete iter2; | 342 delete iter2; |
288 delete iter1; | 343 delete iter1; |
289 } | 344 } |
290 | 345 |
291 /** @bug 4108762 | 346 /** @bug 4108762 |
292 * Test for getMaxExpansion() | 347 * Test for getMaxExpansion() |
293 */ | 348 */ |
(...skipping 13 matching lines...) Expand all Loading... |
307 ch ++; | 362 ch ++; |
308 UnicodeString str(ch); | 363 UnicodeString str(ch); |
309 iter->setText(str, status); | 364 iter->setText(str, status); |
310 order = iter->previous(status); | 365 order = iter->previous(status); |
311 | 366 |
312 /* thai management */ | 367 /* thai management */ |
313 if (CollationElementIterator::isIgnorable(order)) | 368 if (CollationElementIterator::isIgnorable(order)) |
314 order = iter->previous(status); | 369 order = iter->previous(status); |
315 | 370 |
316 while (U_SUCCESS(status) | 371 while (U_SUCCESS(status) |
317 && iter->previous(status) != (int32_t)UCOL_NULLORDER) | 372 && iter->previous(status) != (int32_t)CollationElementIterator::NULL
ORDER) |
318 { | 373 { |
319 count ++; | 374 count ++; |
320 } | 375 } |
321 | 376 |
322 if (U_FAILURE(status) && iter->getMaxExpansion(order) < count) { | 377 if (U_FAILURE(status) && iter->getMaxExpansion(order) < count) { |
323 errln("Failure at codepoint %d, maximum expansion count < %d\n", | 378 errln("Failure at codepoint %d, maximum expansion count < %d\n", |
324 ch, count); | 379 ch, count); |
325 } | 380 } |
326 } | 381 } |
327 | 382 |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 | 569 |
515 // tests empty strings | 570 // tests empty strings |
516 UnicodeString empty(""); | 571 UnicodeString empty(""); |
517 iter1 = coll->createCollationElementIterator(empty); | 572 iter1 = coll->createCollationElementIterator(empty); |
518 chariter.setText(empty); | 573 chariter.setText(empty); |
519 iter2 = coll->createCollationElementIterator(chariter); | 574 iter2 = coll->createCollationElementIterator(chariter); |
520 if (*iter1 != *iter1 || *iter2 != *iter2 || *iter1 != *iter2 | 575 if (*iter1 != *iter1 || *iter2 != *iter2 || *iter1 != *iter2 |
521 || *iter2 != *iter1) { | 576 || *iter2 != *iter1) { |
522 errln("CollationElementIterators constructed with the same string data s
hould be the same at the start"); | 577 errln("CollationElementIterators constructed with the same string data s
hould be the same at the start"); |
523 } | 578 } |
524 if (iter1->next(status) != (int32_t)UCOL_NULLORDER) { | 579 if (iter1->next(status) != (int32_t)CollationElementIterator::NULLORDER) { |
525 errln("Empty string should have no CEs."); | 580 errln("Empty string should have no CEs."); |
526 } | 581 } |
527 if (iter2->next(status) != (int32_t)UCOL_NULLORDER) { | 582 if (iter2->next(status) != (int32_t)CollationElementIterator::NULLORDER) { |
528 errln("Empty string should have no CEs."); | 583 errln("Empty string should have no CEs."); |
529 } | 584 } |
530 delete iter1; | 585 delete iter1; |
531 delete iter2; | 586 delete iter2; |
532 delete coll; | 587 delete coll; |
533 } | 588 } |
534 | 589 |
535 /** | 590 /** |
536 * Testing the strength order | 591 * Testing the strength order |
537 */ | 592 */ |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 case 8: name = "TestStrengthOrder"; if (exec) TestStrengthOrder(/* pa
r */); break; | 693 case 8: name = "TestStrengthOrder"; if (exec) TestStrengthOrder(/* pa
r */); break; |
639 default: name = ""; break; | 694 default: name = ""; break; |
640 } | 695 } |
641 } else { | 696 } else { |
642 dataerrln("Class iterator not instantiated"); | 697 dataerrln("Class iterator not instantiated"); |
643 name = ""; | 698 name = ""; |
644 } | 699 } |
645 } | 700 } |
646 | 701 |
647 #endif /* #if !UCONFIG_NO_COLLATION */ | 702 #endif /* #if !UCONFIG_NO_COLLATION */ |
OLD | NEW |