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