Home | History | Annotate | Download | only in intltest
      1 
      2 /********************************************************************
      3  * COPYRIGHT:
      4  * Copyright (c) 1997-2007, International Business Machines Corporation and
      5  * others. All Rights Reserved.
      6  ********************************************************************
      7 **********************************************************************
      8 *   Date        Name        Description
      9 *   10/20/99    alan        Creation.
     10 *   03/22/2000  Madhu       Added additional tests
     11 **********************************************************************
     12 */
     13 
     14 #ifndef _TESTUNISET
     15 #define _TESTUNISET
     16 
     17 #include "unicode/unistr.h"
     18 #include "unicode/uniset.h"
     19 #include "unicode/ucnv_err.h"
     20 #include "intltest.h"
     21 
     22 class UnicodeSetWithStrings;
     23 
     24 /**
     25  * UnicodeSet test
     26  */
     27 class UnicodeSetTest: public IntlTest {
     28 public:
     29     UnicodeSetTest();
     30     ~UnicodeSetTest();
     31 
     32 private:
     33     void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
     34 
     35     void Testj2268();
     36 
     37     /**
     38      * Test that toPattern() round trips with syntax characters and
     39      * whitespace.
     40      */
     41     void TestToPattern();
     42 
     43     void TestPatterns(void);
     44     void TestCategories(void);
     45     void TestAddRemove(void);
     46     void TestCloneEqualHash(void);
     47 
     48     /**
     49      * Make sure minimal representation is maintained.
     50      */
     51     void TestMinimalRep(void);
     52 
     53     void TestAPI(void);
     54 
     55     void TestIteration(void);
     56 
     57     void TestStrings(void);
     58 
     59     void TestScriptSet(void);
     60 
     61     /**
     62      * Test the [:Latin:] syntax.
     63      */
     64     void TestPropertySet(void);
     65 
     66     void TestClone(void);
     67 
     68     void TestIndexOf(void);
     69 
     70     void TestExhaustive(void);
     71 
     72     void TestCloseOver(void);
     73 
     74     void TestEscapePattern(void);
     75 
     76     void TestInvalidCodePoint(void);
     77 
     78     void TestSymbolTable(void);
     79 
     80     void TestSurrogate();
     81 
     82     void TestPosixClasses();
     83 
     84     void TestFreezable();
     85 
     86     void TestSpan();
     87 
     88     void TestStringSpan();
     89 
     90 private:
     91 
     92     UBool toPatternAux(UChar32 start, UChar32 end);
     93 
     94     UBool checkPat(const UnicodeString& source,
     95                    const UnicodeSet& testSet);
     96 
     97     UBool checkPat(const UnicodeString& source, const UnicodeSet& testSet, const UnicodeString& pat);
     98 
     99     void _testComplement(int32_t a, UnicodeSet&, UnicodeSet&);
    100 
    101     void _testAdd(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
    102 
    103     void _testRetain(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
    104 
    105     void _testRemove(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
    106 
    107     void _testXor(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
    108 
    109     /**
    110      * Check that ranges are monotonically increasing and non-
    111      * overlapping.
    112      */
    113     void checkCanonicalRep(const UnicodeSet& set, const UnicodeString& msg);
    114 
    115     /**
    116      * Convert a bitmask to a UnicodeSet.
    117      */
    118     static UnicodeSet& bitsToSet(int32_t a, UnicodeSet&);
    119 
    120     /**
    121      * Convert a UnicodeSet to a bitmask.  Only the characters
    122      * U+0000 to U+0020 are represented in the bitmask.
    123      */
    124     static int32_t setToBits(const UnicodeSet& x);
    125 
    126     /**
    127      * Return the representation of an inversion list based UnicodeSet
    128      * as a pairs list.  Ranges are listed in ascending Unicode order.
    129      * For example, the set [a-zA-M3] is represented as "33AMaz".
    130      */
    131     static UnicodeString getPairs(const UnicodeSet& set);
    132 
    133     /**
    134      * Basic consistency check for a few items.
    135      * That the iterator works, and that we can create a pattern and
    136      * get the same thing back
    137      */
    138     void checkRoundTrip(const UnicodeSet& s);
    139 
    140     void copyWithIterator(UnicodeSet& t, const UnicodeSet& s, UBool withRange);
    141 
    142     UBool checkEqual(const UnicodeSet& s, const UnicodeSet& t, const char* message);
    143 
    144     void expectContainment(const UnicodeString& pat,
    145                            const UnicodeString& charsIn,
    146                            const UnicodeString& charsOut);
    147     void expectContainment(const UnicodeSet& set,
    148                            const UnicodeString& charsIn,
    149                            const UnicodeString& charsOut);
    150     void expectContainment(const UnicodeSet& set,
    151                            const UnicodeString& setName,
    152                            const UnicodeString& charsIn,
    153                            const UnicodeString& charsOut);
    154     void expectPattern(UnicodeSet& set,
    155                        const UnicodeString& pattern,
    156                        const UnicodeString& expectedPairs);
    157     void expectPairs(const UnicodeSet& set,
    158                      const UnicodeString& expectedPairs);
    159     void expectToPattern(const UnicodeSet& set,
    160                          const UnicodeString& expPat,
    161                          const char** expStrings);
    162     void expectRange(const UnicodeString& label,
    163                      const UnicodeSet& set,
    164                      UChar32 start, UChar32 end);
    165     void doAssert(UBool, const char*);
    166 
    167     void testSpan(const UnicodeSetWithStrings *sets[4], const void *s, int32_t length, UBool isUTF16,
    168                   uint32_t whichSpans,
    169                   int32_t expectLimits[], int32_t &expectCount,
    170                   const char *testName, int32_t index);
    171     void testSpan(const UnicodeSetWithStrings *sets[4], const void *s, int32_t length, UBool isUTF16,
    172                   uint32_t whichSpans,
    173                   const char *testName, int32_t index);
    174     void testSpanBothUTFs(const UnicodeSetWithStrings *sets[4],
    175                           const UChar *s16, int32_t length16,
    176                           uint32_t whichSpans,
    177                           const char *testName, int32_t index);
    178     void testSpanContents(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName);
    179     void testSpanUTF16String(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName);
    180     void testSpanUTF8String(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName);
    181 
    182     UConverter *openUTF8Converter();
    183 
    184     UConverter *utf8Cnv;
    185 
    186 public:
    187     static UnicodeString escape(const UnicodeString& s);
    188 };
    189 
    190 #endif
    191