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