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