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