1 /********************************************************************
2  * COPYRIGHT:
3  * Copyright (c) 1997-2014, International Business Machines Corporation and
4  * others. All Rights Reserved.
5  ********************************************************************/
6 
7 /**
8  * Collation regression tests.
9  * (So we'll have no regrets later)
10  */
11 
12 #ifndef _REGCOLL
13 #define _REGCOLL
14 
15 #include "unicode/utypes.h"
16 
17 #if !UCONFIG_NO_COLLATION
18 
19 #include "unicode/coleitr.h"
20 #include "tscoll.h"
21 
22 class CollationRegressionTest: public IntlTestCollator
23 {
24 public:
25 
26     // If this is too small for the test data, just increase it.
27     // Just don't make it too large, otherwise the executable will get too big
28     enum EToken_Len { MAX_TOKEN_LEN = 32 };
29 
30     CollationRegressionTest();
31     virtual ~CollationRegressionTest();
32 
33     void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
34 
35     // @bug 4048446
36     //
37     // CollationElementIterator.reset() doesn't work
38     //
39     void Test4048446(/* char* par */);
40 
41     // @bug 4051866
42     //
43     // Collator -> rules -> Collator round-trip broken for expanding characters
44     //
45     void Test4051866(/* char* par */);
46 
47     // @bug 4053636
48     //
49     // Collator thinks "black-bird" == "black"
50     //
51     void Test4053636(/* char* par */);
52 
53 
54     // @bug 4054238
55     //
56     // CollationElementIterator will not work correctly if the associated
57     // Collator object's mode is changed
58     //
59     void Test4054238(/* char* par */);
60 
61     // @bug 4054734
62     //
63     // Collator.IDENTICAL documented but not implemented
64     //
65     void Test4054734(/* char* par */);
66 
67     // @bug 4054736
68     //
69     // Full Decomposition mode not implemented
70     //
71     void Test4054736(/* char* par */);
72 
73     // @bug 4058613
74     //
75     // Collator.getInstance() causes an ArrayIndexOutofBoundsException for Korean
76     //
77     void Test4058613(/* char* par */);
78 
79     // @bug 4059820
80     //
81     // RuleBasedCollator.getRules does not return the exact pattern as input
82     // for expanding character sequences
83     //
84     void Test4059820(/* char* par */);
85 
86     // @bug 4060154
87     //
88     // MergeCollation::fixEntry broken for "& H < \u0131, \u0130, i, I"
89     //
90     void Test4060154(/* char* par */);
91 
92     // @bug 4062418
93     //
94     // Secondary/Tertiary comparison incorrect in French Secondary
95     //
96     void Test4062418(/* char* par */);
97 
98     // @bug 4065540
99     //
100     // Collator.compare() method broken if either string contains spaces
101     //
102     void Test4065540(/* char* par */);
103 
104     // @bug 4066189
105     //
106     // Unicode characters need to be recursively decomposed to get the
107     // correct result. For example,
108     // u1EB1 -> \u0103 + \u0300 -> a + \u0306 + \u0300.
109     //
110     void Test4066189(/* char* par */);
111 
112     // @bug 4066696
113     //
114     // French secondary collation checking at the end of compare iteration fails
115     //
116     void Test4066696(/* char* par */);
117 
118 
119     // @bug 4076676
120     //
121     // Bad canonicalization of same-class combining characters
122     //
123     void Test4076676(/* char* par */);
124 
125 
126     // @bug 4078588
127     //
128     // RuleBasedCollator breaks on "< a < bb" rule
129     //
130     void Test4078588(/* char* par */);
131 
132     // @bug 4079231
133     //
134     // RuleBasedCollator.equals(null) throws NullPointerException
135     //
136     void Test4079231(/* char* par */);
137 
138     // @bug 4081866
139     //
140     // Combining characters in different classes not reordered properly.
141     //
142     void Test4081866(/* char* par */);
143 
144     // @bug 4087241
145     //
146     // string comparison errors in Scandinavian collators
147     //
148     void Test4087241(/* char* par */);
149 
150     // @bug 4087243
151     //
152     // CollationKey takes ignorable strings into account when it shouldn't
153     //
154     void Test4087243(/* char* par */);
155 
156     // @bug 4092260
157     //
158     // Mu/micro conflict
159     // Micro symbol and greek lowercase letter Mu should sort identically
160     //
161     void Test4092260(/* char* par */);
162 
163     // @bug 4095316
164     //
165     void Test4095316(/* char* par */);
166 
167     // @bug 4101940
168     //
169     void Test4101940(/* char* par */);
170 
171     // @bug 4103436
172     //
173     // Collator.compare not handling spaces properly
174     //
175     void Test4103436(/* char* par */);
176 
177     // @bug 4114076
178     //
179     // Collation not Unicode conformant with Hangul syllables
180     //
181     void Test4114076(/* char* par */);
182 
183 
184     // @bug 4114077
185     //
186     // Collation with decomposition off doesn't work for Europe
187     //
188     void Test4114077(/* char* par */);
189 
190     // @bug 4124632
191     //
192     // Collator.getCollationKey was hanging on certain character sequences
193     //
194     void Test4124632(/* char* par */);
195 
196     // @bug 4132736
197     //
198     // sort order of french words with multiple accents has errors
199     //
200     void Test4132736(/* char* par */);
201 
202     // @bug 4133509
203     //
204     // The sorting using java.text.CollationKey is not in the exact order
205     //
206     void Test4133509(/* char* par */);
207 
208     // @bug 4139572
209     //
210     // getCollationKey throws exception for spanish text
211     // Cannot reproduce this bug on 1.2, however it DOES fail on 1.1.6
212     //
213     void Test4139572(/* char* par */);
214 
215     // @bug 4141640
216     //
217     // Support for Swedish gone in 1.1.6 (Can't create Swedish collator)
218     //
219     void Test4141640(/* char* par */);
220 
221     // @bug 4146160
222     //
223     // RuleBasedCollator doesn't use getCollationElementIterator internally
224     //
225     void Test4146160(/* char* par */);
226 
227     void Test4179216();
228 
229     // Ticket 7189
230     //
231     // nextSortKeyPart incorrect for EO_S1 collation
232     //
233     void TestT7189();
234 
235     // Ticket 8624
236     //
237     // Tertiary value compression problem with case first option enabled
238     //
239     void TestCaseFirstCompression();
240 
241     void TestTrailingComment();
242     void TestBeforeWithTooStrongAfter();
243 
244 private:
245     //------------------------------------------------------------------------
246     // Internal utilities
247     //
248     void compareArray(Collator &c,
249                     const UChar tests[][CollationRegressionTest::MAX_TOKEN_LEN],
250                     int32_t testCount);
251 
252     void assertEqual(CollationElementIterator &i1, CollationElementIterator &i2);
253 
254 
255     RuleBasedCollator *en_us;
256 
257     void caseFirstCompressionSub(Collator *col, UnicodeString opt);
258 };
259 
260 #endif /* #if !UCONFIG_NO_COLLATION */
261 
262 #endif
263