1/***********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2013, International Business Machines Corporation
4 * and others. All Rights Reserved.
5 ***********************************************************************/
6
7/**
8 * CollationAPITest is a third level test class. This test performs API
9 * related tests for the Collation framework.
10 */
11
12#ifndef _APICOLL
13#define _APICOLL
14
15#include "unicode/utypes.h"
16
17#if !UCONFIG_NO_COLLATION
18
19#include "unicode/tblcoll.h"
20#include "tscoll.h"
21
22class CollationAPITest: public IntlTestCollator {
23public:
24    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */);
25    void doAssert(UBool condition, const char *message);
26
27    /**
28     * This tests the properties of a collator object.
29     * - constructor/destructor
30     * - factory method createInstance
31     * - compare and getCollationKey
32     * - get/set decomposition mode and comparison level
33     * - displayable name in the desired locale
34     */
35    void TestProperty(/* char* par */);
36
37    /**
38    * This tests the RuleBasedCollator
39    * - constructor/destructor
40    * - getRules
41    */
42    void TestRuleBasedColl(/* char* par */);
43
44    /**
45    * This tests the RuleBasedCollator
46    * - getRules
47    */
48    void TestRules(/* char* par */);
49
50    /**
51    * Tests decomposition setting
52    */
53    void TestDecomposition();
54
55    /**
56    * SafeClone test
57    */
58    void TestSafeClone();
59
60    /**
61     * This tests the properties of a rule based collator object.
62     * - constructor/destructor
63     * - == and != operators
64     * - clone and copy
65     * - collation rules access
66     */
67    void TestOperators(/* char* par */);
68
69    /**
70     * This tests the duplication of a collator object.
71     */
72    void TestDuplicate(/* char* par */);
73
74    /**
75     * This tests the comparison convenience methods of a collator object.
76     * - greater than
77     * - greater than or equal to
78     * - equal to
79     */
80    void TestCompare(/* char* par */);
81
82    /**
83     * This tests the hashCode method of a collator object.
84     */
85    void TestHashCode(/* char* par */);
86
87    /**
88     * This tests the collation key related APIs.
89     * - constructor/destructor
90     * - Collator::getCollationKey
91     * - == and != operators
92     * - comparison between collation keys
93     * - creating collation key with a byte array and vice versa
94     */
95    void TestCollationKey(/* char* par */);
96
97    /**
98     * This tests the CollationElementIterator related APIs.
99     * - creation of a CollationElementIterator object
100     * - == and != operators
101     * - iterating forward
102     * - reseting the iterator index
103     * - requesting the order properties(primary, secondary or tertiary)
104     */
105    void TestElemIter(/* char* par */);
106
107    /**
108     * This tests the list the all available locales.
109     */
110    void TestGetAll(/* char* par */);
111
112    /**
113     * This tests the sort keys generated by collator
114     */
115    void TestSortKey();
116    void TestSortKeyOverflow();
117
118    /**
119     * This tests getMaxExpansion
120     */
121    void TestMaxExpansion();
122
123    /**
124    * Tests the retrieval of names given a locale
125    */
126    void TestDisplayName();
127
128    /**
129    * Tests the collator attributes
130    */
131    void TestAttribute();
132
133    /**
134    * Tests the setters and getters of variable top
135    */
136    void TestVariableTopSetting();
137
138    /**
139    * Tests GetLocale for a Collator
140    */
141    void TestGetLocale();
142
143    /**
144    * Tests bounds API
145    */
146    void TestBounds();
147
148    /**
149    * Tests getTailoredSet API
150    */
151    void TestGetTailoredSet();
152
153    /**
154    * Tests the subclassability
155    */
156    void TestSubclass();
157
158    /**
159    * Tests the dynamic and static ids of collation classes
160    */
161    void TestUClassID();
162
163    /**
164    * Test NULL
165    */
166    void TestNULLCharTailoring();
167
168    void TestClone();
169    void TestIterNumeric();
170
171private:
172    // If this is too small for the test data, just increase it.
173    // Just don't make it too large, otherwise the executable will get too big
174    enum EToken_Len { MAX_TOKEN_LEN = 16 };
175
176    void dump(UnicodeString msg, RuleBasedCollator* c, UErrorCode& status);
177
178};
179
180#endif /* #if !UCONFIG_NO_COLLATION */
181
182#endif
183