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 24 class CollationRegressionTest: public IntlTestCollator 25 { 26 public: 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 246 private: 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