1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/********************************************************************
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT:
385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copyright (c) 1997-2009, International Business Machines Corporation and
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved.
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h"
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/coll.h"
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/tblcoll.h"
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/unistr.h"
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/sortkey.h"
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "itercoll.h"
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/schriter.h"
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/chariter.h"
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uchar.h"
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cmemory.h"
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ARRAY_LENGTH(array) (sizeof array / sizeof array[0])
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UErrorCode status = U_ZERO_ERROR;
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCollationIteratorTest::CollationIteratorTest()
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : test1("What subset of all possible test cases?", ""),
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru   test2("has the highest probability of detecting", "")
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    en_us = (RuleBasedCollator *)Collator::createInstance(Locale::getUS(), status);
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status)) {
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      delete en_us;
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      en_us = 0;
3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho      errcheckln(status, "Collator creation failed with %s", u_errorName(status));
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      return;
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCollationIteratorTest::~CollationIteratorTest()
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete en_us;
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for CollationElementIterator previous and next for the whole set of
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * unicode characters.
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestUnicodeChar()
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter;
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar codepoint;
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString source;
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (codepoint = 1; codepoint < 0xFFFE;)
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      source.remove();
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      while (codepoint % 0xFF != 0)
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      {
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (u_isdefined(codepoint))
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          source += codepoint;
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        codepoint ++;
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if (u_isdefined(codepoint))
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        source += codepoint;
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if (codepoint != 0xFFFF)
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        codepoint ++;
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      iter = en_us->createCollationElementIterator(source);
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      /* A basic test to see if it's working at all */
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      backAndForth(*iter);
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      delete iter;
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for CollationElementIterator.previous()
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @bug 4108758 - Make sure it works with contracting characters
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestPrevious(/* char* par */)
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter = en_us->createCollationElementIterator(test1);
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // A basic test to see if it's working at all
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    backAndForth(*iter);
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Test with a contracting character sequence
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString source;
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator *c1 = NULL;
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    c1 = new RuleBasedCollator(
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        (UnicodeString)"&a,A < b,B < c,C, d,D < z,Z < ch,cH,Ch,CH", status);
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (c1 == NULL || U_FAILURE(status))
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a RuleBasedCollator with a contracting sequence.");
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete c1;
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    source = "abchdcba";
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter = c1->createCollationElementIterator(source);
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    backAndForth(*iter);
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete c1;
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Test with an expanding character sequence
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator *c2 = NULL;
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    c2 = new RuleBasedCollator((UnicodeString)"&a < b < c/abd < d", status);
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (c2 == NULL || U_FAILURE(status))
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a RuleBasedCollator with an expanding sequence.");
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete c2;
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    source = "abcd";
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter = c2->createCollationElementIterator(source);
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    backAndForth(*iter);
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete c2;
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Now try both
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator *c3 = NULL;
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    c3 = new RuleBasedCollator((UnicodeString)"&a < b < c/aba < d < z < ch", status);
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (c3 == NULL || U_FAILURE(status))
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a RuleBasedCollator with both an expanding and a contracting sequence.");
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete c3;
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    source = "abcdbchdc";
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter = c3->createCollationElementIterator(source);
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    backAndForth(*iter);
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete c3;
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status=U_ZERO_ERROR;
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    source= CharsToUnicodeString("\\u0e41\\u0e02\\u0e41\\u0e02\\u0e27abc");
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Collator *c4 = Collator::createInstance(Locale("th", "TH", ""), status);
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status)){
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a collator");
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter = ((RuleBasedCollator*)c4)->createCollationElementIterator(source);
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    backAndForth(*iter);
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete c4;
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    source= CharsToUnicodeString("\\u0061\\u30CF\\u3099\\u30FC");
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Collator *c5 = Collator::createInstance(Locale("ja", "JP", ""), status);
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter = ((RuleBasedCollator*)c5)->createCollationElementIterator(source);
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status)){
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create Japanese collator\n");
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    backAndForth(*iter);
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete c5;
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for getOffset() and setOffset()
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestOffset(/* char* par */)
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter = en_us->createCollationElementIterator(test1);
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // testing boundaries
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter->setOffset(0, status);
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || iter->previous(status) != UCOL_NULLORDER) {
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Error: After setting offset to 0, we should be at the end "
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                "of the backwards iteration");
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter->setOffset(test1.length(), status);
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || iter->next(status) != UCOL_NULLORDER) {
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Error: After setting offset to end of the string, we should "
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                "be at the end of the backwards iteration");
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Run all the way through the iterator, then get the offset
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t orderLength = 0;
19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Order *orders = getOrders(*iter, orderLength);
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t offset = iter->getOffset();
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (offset != test1.length())
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        UnicodeString msg1("offset at end != length: ");
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        UnicodeString msg2(" vs ");
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln(msg1 + offset + msg2 + test1.length());
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Now set the offset back to the beginning and see if it works
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *pristine = en_us->createCollationElementIterator(test1);
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter->setOffset(0, status);
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status))
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("setOffset failed.");
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    else
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        assertEqual(*iter, *pristine);
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // TODO: try iterating halfway through a messy string.
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete pristine;
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete[] orders;
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for setText()
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestSetText(/* char* par */)
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter1 = en_us->createCollationElementIterator(test1);
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter2 = en_us->createCollationElementIterator(test2);
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Run through the second iterator just to exercise it
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t c = iter2->next(status);
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t i = 0;
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    while ( ++i < 10 && c != CollationElementIterator::NULLORDER)
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (U_FAILURE(status))
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln("iter2->next() returned an error.");
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete iter2;
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete iter1;
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        c = iter2->next(status);
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Now set it to point to the same string as the first iterator
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter2->setText(test1, status);
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status))
253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("call to iter2->setText(test1) failed.");
255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    else
257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        assertEqual(*iter1, *iter2);
259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter1->reset();
261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //now use the overloaded setText(ChracterIterator&, UErrorCode) function to set the text
262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CharacterIterator* chariter = new StringCharacterIterator(test1);
263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter2->setText(*chariter, status);
264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status))
265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("call to iter2->setText(chariter(test1)) failed.");
267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    else
269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        assertEqual(*iter1, *iter2);
271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // test for an empty string
274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString empty("");
275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter1->setText(empty, status);
276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status)
277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        || iter1->next(status) != (int32_t)UCOL_NULLORDER) {
278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Empty string should have no CEs.");
279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ((StringCharacterIterator *)chariter)->setText(empty);
281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter1->setText(*chariter, status);
282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status)
283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        || iter1->next(status) != (int32_t)UCOL_NULLORDER) {
284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Empty string should have no CEs.");
285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete chariter;
287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter2;
288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter1;
289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** @bug 4108762
292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for getMaxExpansion()
293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestMaxExpansion(/* char* par */)
295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode          status = U_ZERO_ERROR;
297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString rule("&a < ab < c/aba < d < z < ch");
298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator  *coll   = new RuleBasedCollator(rule, status);
299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar               ch     = 0;
300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString       str(ch);
301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter   = coll->createCollationElementIterator(str);
303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    while (ch < 0xFFFF && U_SUCCESS(status)) {
305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        int      count = 1;
306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        uint32_t order;
307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ch ++;
308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        UnicodeString str(ch);
309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        iter->setText(str, status);
310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        order = iter->previous(status);
311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* thai management */
313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (CollationElementIterator::isIgnorable(order))
314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            order = iter->previous(status);
315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        while (U_SUCCESS(status)
317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            && iter->previous(status) != (int32_t)UCOL_NULLORDER)
318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            count ++;
320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (U_FAILURE(status) && iter->getMaxExpansion(order) < count) {
323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln("Failure at codepoint %d, maximum expansion count < %d\n",
324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                ch, count);
325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete coll;
330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @bug 4157299
334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestClearBuffers(/* char* par */)
336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator *c = new RuleBasedCollator((UnicodeString)"&a < b < c & ab = d", status);
339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (c == NULL || U_FAILURE(status))
341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a RuleBasedCollator.");
343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete c;
344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString source("abcd");
348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *i = c->createCollationElementIterator(source);
349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t e0 = i->next(status);    // save the first collation element
350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status))
352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("call to i->next() failed. err=%s", u_errorName(status));
354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    else
356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        i->setOffset(3, status);        // go to the expanding character
358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (U_FAILURE(status))
360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln("call to i->setOffset(3) failed. err=%s", u_errorName(status));
362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        else
364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            i->next(status);                // but only use up half of it
366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if (U_FAILURE(status))
368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            {
369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                errln("call to i->next() failed. err=%s", u_errorName(status));
370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            else
372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            {
373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                i->setOffset(0, status);        // go back to the beginning
374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                if (U_FAILURE(status))
376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                {
377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    errln("call to i->setOffset(0) failed. err=%s", u_errorName(status));
378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                }
379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                else
380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                {
381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    int32_t e = i->next(status);    // and get this one again
382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    if (U_FAILURE(status))
384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    {
385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        errln("call to i->next() failed. err=%s", u_errorName(status));
386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    }
387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    else if (e != e0)
388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    {
389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        errln("got 0x%X, expected 0x%X", e, e0);
390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    }
391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                }
392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete i;
397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete c;
398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Testing the assignment operator
402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestAssignment()
404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator *coll =
407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        (RuleBasedCollator *)Collator::createInstance(status);
408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (coll == NULL || U_FAILURE(status))
410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a default collator.");
412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString source("abcd");
416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter1 =
417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        coll->createCollationElementIterator(source);
418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator iter2 = *iter1;
420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (*iter1 != iter2) {
422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Fail collation iterator assignment does not produce the same elements");
423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator iter3(*iter1);
426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (*iter1 != iter3) {
428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Fail collation iterator copy constructor does not produce the same elements");
429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    source = CharsToUnicodeString("a\\u0300\\u0325");
432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    coll->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter4
434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        = coll->createCollationElementIterator(source);
435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator iter5(*iter4);
436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (*iter4 != iter5) {
437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator assignment does not produce the same elements");
438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter4->next(status);
440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 == iter5) {
441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator not equal");
442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter5.next(status);
444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 != iter5) {
445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator equal");
446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter4->next(status);
448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 == iter5) {
449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator not equal");
450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter5.next(status);
452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 != iter5) {
453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator equal");
454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator iter6(*iter4);
456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (*iter4 != iter6) {
457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator equal");
458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter4->next(status);
460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 == iter5) {
461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator not equal");
462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter5.next(status);
464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 != iter5) {
465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator equal");
466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter4->next(status);
468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 == iter5) {
469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator not equal");
470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter5.next(status);
472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status) || *iter4 != iter5) {
473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("collation iterator equal");
474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter1;
476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter4;
477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete coll;
478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Testing the constructors
482ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestConstructors()
484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator *coll =
487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        (RuleBasedCollator *)Collator::createInstance(status);
488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (coll == NULL || U_FAILURE(status))
489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a default collator.");
491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // testing protected constructor with character iterator as argument
495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    StringCharacterIterator chariter(test1);
496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter1 =
497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        coll->createCollationElementIterator(chariter);
498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status)) {
499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create collation element iterator with character iterator.");
500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter2 =
503ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        coll->createCollationElementIterator(test1);
504ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
505ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // initially the 2 collation element iterators should be the same
506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (*iter1 != *iter1 || *iter2 != *iter2 || *iter1 != *iter2
507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        || *iter2 != *iter1) {
508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("CollationElementIterators constructed with the same string data should be the same at the start");
509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    assertEqual(*iter1, *iter2);
511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter1;
513ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter2;
514ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
515ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // tests empty strings
516ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString empty("");
517ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter1 = coll->createCollationElementIterator(empty);
518ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    chariter.setText(empty);
519ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iter2 = coll->createCollationElementIterator(chariter);
520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (*iter1 != *iter1 || *iter2 != *iter2 || *iter1 != *iter2
521ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        || *iter2 != *iter1) {
522ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("CollationElementIterators constructed with the same string data should be the same at the start");
523ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (iter1->next(status) != (int32_t)UCOL_NULLORDER) {
525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Empty string should have no CEs.");
526ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
527ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (iter2->next(status) != (int32_t)UCOL_NULLORDER) {
528ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Empty string should have no CEs.");
529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
530ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter1;
531ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter2;
532ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete coll;
533ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
534ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
535ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
536ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Testing the strength order
537ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
538ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestStrengthOrder()
539ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
540ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int order = 0x0123ABCD;
541ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
542ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
543ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedCollator *coll =
544ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        (RuleBasedCollator *)Collator::createInstance(status);
545ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (coll == NULL || U_FAILURE(status))
546ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
547ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a default collator.");
548ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
549ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
550ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
551ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    coll->setStrength(Collator::PRIMARY);
552ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CollationElementIterator *iter =
553ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        coll->createCollationElementIterator(test1);
554ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
555ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (iter == NULL) {
556ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Couldn't create a collation element iterator from default collator");
557ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
558ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
559ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
560ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (iter->strengthOrder(order) != 0x01230000) {
561ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Strength order for a primary strength collator should be the first 2 bytes");
562ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
563ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
564ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
565ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    coll->setStrength(Collator::SECONDARY);
566ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (iter->strengthOrder(order) != 0x0123AB00) {
567ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Strength order for a secondary strength collator should be the third byte");
568ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
569ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
570ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
571ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    coll->setStrength(Collator::TERTIARY);
572ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (iter->strengthOrder(order) != order) {
573ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("Strength order for a tertiary strength collator should be the third byte");
574ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
575ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
576ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete iter;
577ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete coll;
578ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
579ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
580ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
581ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return a string containing all of the collation orders
582ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * returned by calls to next on the specified iterator
583ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
584ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString &CollationIteratorTest::orderString(CollationElementIterator &iter, UnicodeString &target)
585ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
586ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t order;
587ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
588ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
589ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    while ((order = iter.next(status)) != CollationElementIterator::NULLORDER)
590ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
591ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        target += "0x";
592ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        appendHex(order, 8, target);
593ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        target += " ";
594ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
595ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
596ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return target;
597ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
598ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
599ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::assertEqual(CollationElementIterator &i1, CollationElementIterator &i2)
600ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
601ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t c1, c2, count = 0;
602ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
603ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
604ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    do
605ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
606ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        c1 = i1.next(status);
607ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        c2 = i2.next(status);
608ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
609ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (c1 != c2)
610ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
611ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln("    %d: strength(0x%X) != strength(0x%X)", count, c1, c2);
612ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
613ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
614ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
615ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        count += 1;
616ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
617ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    while (c1 != CollationElementIterator::NULLORDER);
618ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
619ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
620ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/)
621ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
622ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (exec)
623ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
624ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        logln("Collation Iteration Tests: ");
625ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
626ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
627ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(en_us) {
628ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      switch (index)
629ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      {
630ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  0: name = "TestPrevious";      if (exec) TestPrevious(/* par */);     break;
631ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  1: name = "TestOffset";        if (exec) TestOffset(/* par */);       break;
632ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  2: name = "TestSetText";       if (exec) TestSetText(/* par */);      break;
633ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  3: name = "TestMaxExpansion";  if (exec) TestMaxExpansion(/* par */); break;
634ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  4: name = "TestClearBuffers";  if (exec) TestClearBuffers(/* par */); break;
635ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  5: name = "TestUnicodeChar";   if (exec) TestUnicodeChar(/* par */);  break;
636ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  6: name = "TestAssignment";    if (exec) TestAssignment(/* par */);    break;
637ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  7: name = "TestConstructors";  if (exec) TestConstructors(/* par */); break;
638ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          case  8: name = "TestStrengthOrder"; if (exec) TestStrengthOrder(/* par */); break;
639ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          default: name = ""; break;
640ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
641ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
64285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho      dataerrln("Class iterator not instantiated");
643ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      name = "";
644ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
645ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
646ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
647ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_COLLATION */
648