Home | History | Annotate | Download | only in intltest
      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