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