• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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