usettest.h revision c73f511526464f8e56c242df80552e9b0d94ae3d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********************************************************************
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * COPYRIGHT:
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 1997-2007, International Business Machines Corporation and
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * others. All Rights Reserved.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ********************************************************************
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)**********************************************************************
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*   Date        Name        Description
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)*   10/20/99    alan        Creation.
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch*   03/22/2000  Madhu       Added additional tests
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)**********************************************************************
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)*/
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _TESTUNISET
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _TESTUNISET
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "unicode/unistr.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "unicode/uniset.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "unicode/ucnv_err.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "intltest.h"
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class UnicodeSetWithStrings;
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * UnicodeSet test
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class UnicodeSetTest: public IntlTest {
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)public:
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    UnicodeSetTest();
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ~UnicodeSetTest();
31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)private:
33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void Testj2268();
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    /**
38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     * Test that toPattern() round trips with syntax characters and
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * whitespace.
40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     */
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestToPattern();
42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestPatterns(void);
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestCategories(void);
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestAddRemove(void);
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestCloneEqualHash(void);
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    /**
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)     * Make sure minimal representation is maintained.
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)     */
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    void TestMinimalRep(void);
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void TestAPI(void);
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    void TestIteration(void);
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void TestStrings(void);
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    void TestScriptSet(void);
60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    /**
62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     * Test the [:Latin:] syntax.
63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     */
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void TestPropertySet(void);
65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestClone(void);
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void TestIndexOf(void);
69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestExhaustive(void);
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    void TestCloseOver(void);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestEscapePattern(void);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    void TestInvalidCodePoint(void);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestSymbolTable(void);
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    void TestSurrogate();
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestPosixClasses();
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestFreezable();
85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void TestSpan();
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void TestStringSpan();
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)private:
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
92424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    UBool toPatternAux(UChar32 start, UChar32 end);
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    UBool checkPat(const UnicodeString& source,
95424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                   const UnicodeSet& testSet);
96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    UBool checkPat(const UnicodeString& source, const UnicodeSet& testSet, const UnicodeString& pat);
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void _testComplement(int32_t a, UnicodeSet&, UnicodeSet&);
100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void _testAdd(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void _testRetain(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void _testRemove(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void _testXor(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * Check that ranges are monotonically increasing and non-
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * overlapping.
112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     */
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    void checkCanonicalRep(const UnicodeSet& set, const UnicodeString& msg);
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * Convert a bitmask to a UnicodeSet.
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     */
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    static UnicodeSet& bitsToSet(int32_t a, UnicodeSet&);
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /**
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Convert a UnicodeSet to a bitmask.  Only the characters
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * U+0000 to U+0020 are represented in the bitmask.
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int32_t setToBits(const UnicodeSet& x);
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Return the representation of an inversion list based UnicodeSet
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * as a pairs list.  Ranges are listed in ascending Unicode order.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * 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
186public:
187    static UnicodeString escape(const UnicodeString& s);
188};
189
190#endif
191