| // © 2016 and later: Unicode, Inc. and others. | 
 | // License & terms of use: http://www.unicode.org/copyright.html | 
 | /******************************************************************** | 
 |  * COPYRIGHT:  | 
 |  * Copyright (c) 1997-2014, International Business Machines Corporation and | 
 |  * others. All Rights Reserved. | 
 |  ********************************************************************/ | 
 |  | 
 | /** | 
 |  * Collation regression tests. | 
 |  * (So we'll have no regrets later) | 
 |  */ | 
 |  | 
 | #ifndef _REGCOLL | 
 | #define _REGCOLL | 
 |  | 
 | #include "unicode/utypes.h" | 
 |  | 
 | #if !UCONFIG_NO_COLLATION | 
 |  | 
 | #include "unicode/coleitr.h" | 
 | #include "tscoll.h" | 
 |  | 
 | class CollationRegressionTest: public IntlTestCollator | 
 | { | 
 | public: | 
 |  | 
 |     // If this is too small for the test data, just increase it. | 
 |     // Just don't make it too large, otherwise the executable will get too big | 
 |     enum EToken_Len { MAX_TOKEN_LEN = 32 }; | 
 |  | 
 |     CollationRegressionTest(); | 
 |     virtual ~CollationRegressionTest(); | 
 |  | 
 |     void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); | 
 |  | 
 |     // @bug 4048446 | 
 |     // | 
 |     // CollationElementIterator.reset() doesn't work | 
 |     // | 
 |     void Test4048446(/* char* par */); | 
 |  | 
 |     // @bug 4051866 | 
 |     // | 
 |     // Collator -> rules -> Collator round-trip broken for expanding characters | 
 |     // | 
 |     void Test4051866(/* char* par */); | 
 |  | 
 |     // @bug 4053636 | 
 |     // | 
 |     // Collator thinks "black-bird" == "black" | 
 |     // | 
 |     void Test4053636(/* char* par */); | 
 |  | 
 |  | 
 |     // @bug 4054238 | 
 |     // | 
 |     // CollationElementIterator will not work correctly if the associated | 
 |     // Collator object's mode is changed | 
 |     // | 
 |     void Test4054238(/* char* par */); | 
 |  | 
 |     // @bug 4054734 | 
 |     // | 
 |     // Collator.IDENTICAL documented but not implemented | 
 |     // | 
 |     void Test4054734(/* char* par */); | 
 |  | 
 |     // @bug 4054736 | 
 |     // | 
 |     // Full Decomposition mode not implemented | 
 |     // | 
 |     void Test4054736(/* char* par */); | 
 |  | 
 |     // @bug 4058613 | 
 |     // | 
 |     // Collator.getInstance() causes an ArrayIndexOutofBoundsException for Korean   | 
 |     // | 
 |     void Test4058613(/* char* par */); | 
 |      | 
 |     // @bug 4059820 | 
 |     // | 
 |     // RuleBasedCollator.getRules does not return the exact pattern as input | 
 |     // for expanding character sequences | 
 |     // | 
 |     void Test4059820(/* char* par */); | 
 |  | 
 |     // @bug 4060154 | 
 |     // | 
 |     // MergeCollation::fixEntry broken for "& H < \u0131, \u0130, i, I" | 
 |     // | 
 |     void Test4060154(/* char* par */); | 
 |  | 
 |     // @bug 4062418 | 
 |     // | 
 |     // Secondary/Tertiary comparison incorrect in French Secondary | 
 |     // | 
 |     void Test4062418(/* char* par */); | 
 |  | 
 |     // @bug 4065540 | 
 |     // | 
 |     // Collator.compare() method broken if either string contains spaces | 
 |     // | 
 |     void Test4065540(/* char* par */); | 
 |  | 
 |     // @bug 4066189 | 
 |     // | 
 |     // Unicode characters need to be recursively decomposed to get the | 
 |     // correct result. For example, | 
 |     // u1EB1 -> \u0103 + \u0300 -> a + \u0306 + \u0300. | 
 |     // | 
 |     void Test4066189(/* char* par */); | 
 |  | 
 |     // @bug 4066696 | 
 |     // | 
 |     // French secondary collation checking at the end of compare iteration fails | 
 |     // | 
 |     void Test4066696(/* char* par */); | 
 |  | 
 |  | 
 |     // @bug 4076676 | 
 |     // | 
 |     // Bad canonicalization of same-class combining characters | 
 |     // | 
 |     void Test4076676(/* char* par */); | 
 |  | 
 |  | 
 |     // @bug 4078588 | 
 |     // | 
 |     // RuleBasedCollator breaks on "< a < bb" rule | 
 |     // | 
 |     void Test4078588(/* char* par */); | 
 |  | 
 |     // @bug 4079231 | 
 |     // | 
 |     // RuleBasedCollator.equals(null) throws NullPointerException | 
 |     // | 
 |     void Test4079231(/* char* par */); | 
 |  | 
 |     // @bug 4081866 | 
 |     // | 
 |     // Combining characters in different classes not reordered properly. | 
 |     // | 
 |     void Test4081866(/* char* par */); | 
 |  | 
 |     // @bug 4087241 | 
 |     // | 
 |     // string comparison errors in Scandinavian collators | 
 |     // | 
 |     void Test4087241(/* char* par */); | 
 |  | 
 |     // @bug 4087243 | 
 |     // | 
 |     // CollationKey takes ignorable strings into account when it shouldn't | 
 |     // | 
 |     void Test4087243(/* char* par */); | 
 |  | 
 |     // @bug 4092260 | 
 |     // | 
 |     // Mu/micro conflict | 
 |     // Micro symbol and greek lowercase letter Mu should sort identically | 
 |     // | 
 |     void Test4092260(/* char* par */); | 
 |  | 
 |     // @bug 4095316 | 
 |     // | 
 |     void Test4095316(/* char* par */); | 
 |  | 
 |     // @bug 4101940 | 
 |     // | 
 |     void Test4101940(/* char* par */); | 
 |  | 
 |     // @bug 4103436 | 
 |     // | 
 |     // Collator.compare not handling spaces properly | 
 |     // | 
 |     void Test4103436(/* char* par */); | 
 |  | 
 |     // @bug 4114076 | 
 |     // | 
 |     // Collation not Unicode conformant with Hangul syllables | 
 |     // | 
 |     void Test4114076(/* char* par */); | 
 |      | 
 |      | 
 |     // @bug 4114077 | 
 |     // | 
 |     // Collation with decomposition off doesn't work for Europe  | 
 |     // | 
 |     void Test4114077(/* char* par */); | 
 |  | 
 |     // @bug 4124632 | 
 |     // | 
 |     // Collator.getCollationKey was hanging on certain character sequences | 
 |     // | 
 |     void Test4124632(/* char* par */); | 
 |      | 
 |     // @bug 4132736 | 
 |     // | 
 |     // sort order of french words with multiple accents has errors | 
 |     // | 
 |     void Test4132736(/* char* par */); | 
 |      | 
 |     // @bug 4133509 | 
 |     // | 
 |     // The sorting using java.text.CollationKey is not in the exact order | 
 |     // | 
 |     void Test4133509(/* char* par */); | 
 |  | 
 |     // @bug 4139572 | 
 |     // | 
 |     // getCollationKey throws exception for spanish text  | 
 |     // Cannot reproduce this bug on 1.2, however it DOES fail on 1.1.6 | 
 |     // | 
 |     void Test4139572(/* char* par */); | 
 |      | 
 |     // @bug 4141640 | 
 |     // | 
 |     // Support for Swedish gone in 1.1.6 (Can't create Swedish collator)  | 
 |     // | 
 |     void Test4141640(/* char* par */); | 
 |      | 
 |     // @bug 4146160 | 
 |     // | 
 |     // RuleBasedCollator doesn't use getCollationElementIterator internally | 
 |     // | 
 |     void Test4146160(/* char* par */); | 
 |  | 
 |     void Test4179216(); | 
 |  | 
 |     // Ticket 7189 | 
 |     // | 
 |     // nextSortKeyPart incorrect for EO_S1 collation | 
 |     // | 
 |     void TestT7189(); | 
 |  | 
 |     // Ticket 8624 | 
 |     // | 
 |     // Tertiary value compression problem with case first option enabled | 
 |     // | 
 |     void TestCaseFirstCompression(); | 
 |  | 
 |     void TestTrailingComment(); | 
 |     void TestBeforeWithTooStrongAfter(); | 
 |  | 
 | private: | 
 |     //------------------------------------------------------------------------ | 
 |     // Internal utilities | 
 |     // | 
 |     void compareArray(Collator &c, | 
 |                     const UChar tests[][CollationRegressionTest::MAX_TOKEN_LEN], | 
 |                     int32_t testCount); | 
 |  | 
 |     void assertEqual(CollationElementIterator &i1, CollationElementIterator &i2); | 
 |  | 
 |  | 
 |     RuleBasedCollator *en_us; | 
 |  | 
 |     void caseFirstCompressionSub(Collator *col, UnicodeString opt); | 
 | }; | 
 |  | 
 | #endif /* #if !UCONFIG_NO_COLLATION */ | 
 |  | 
 | #endif |