16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/***********************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2013, International Business Machines Corporation
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ***********************************************************************/
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * CollationAPITest is a third level test class. This test performs API
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * related tests for the Collation framework.
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef _APICOLL
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define _APICOLL
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_COLLATION
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/tblcoll.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "tscoll.h"
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass CollationAPITest: public IntlTestCollator {
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */);
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void doAssert(UBool condition, const char *message);
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the properties of a collator object.
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - constructor/destructor
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - factory method createInstance
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - compare and getCollationKey
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - get/set decomposition mode and comparison level
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - displayable name in the desired locale
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestProperty(/* char* par */);
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * This tests the RuleBasedCollator
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * - constructor/destructor
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * - getRules
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestRuleBasedColl(/* char* par */);
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * This tests the RuleBasedCollator
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * - getRules
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestRules(/* char* par */);
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests decomposition setting
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestDecomposition();
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * SafeClone test
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestSafeClone();
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the properties of a rule based collator object.
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - constructor/destructor
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - == and != operators
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - clone and copy
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - collation rules access
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestOperators(/* char* par */);
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the duplication of a collator object.
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestDuplicate(/* char* par */);
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the comparison convenience methods of a collator object.
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - greater than
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - greater than or equal to
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - equal to
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestCompare(/* char* par */);
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the hashCode method of a collator object.
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestHashCode(/* char* par */);
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the collation key related APIs.
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - constructor/destructor
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - Collator::getCollationKey
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - == and != operators
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - comparison between collation keys
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - creating collation key with a byte array and vice versa
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestCollationKey(/* char* par */);
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the CollationElementIterator related APIs.
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - creation of a CollationElementIterator object
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - == and != operators
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - iterating forward
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - reseting the iterator index
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - requesting the order properties(primary, secondary or tertiary)
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestElemIter(/* char* par */);
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the list the all available locales.
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestGetAll(/* char* par */);
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests the sort keys generated by collator
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestSortKey();
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestSortKeyOverflow();
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This tests getMaxExpansion
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestMaxExpansion();
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests the retrieval of names given a locale
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestDisplayName();
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests the collator attributes
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestAttribute();
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests the setters and getters of variable top
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestVariableTopSetting();
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests GetLocale for a Collator
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestGetLocale();
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests bounds API
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestBounds();
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests getTailoredSet API
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestGetTailoredSet();
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests the subclassability
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestSubclass();
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Tests the dynamic and static ids of collation classes
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestUClassID();
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Test NULL
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestNULLCharTailoring();
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestClone();
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void TestIterNumeric();
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // If this is too small for the test data, just increase it.
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Just don't make it too large, otherwise the executable will get too big
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    enum EToken_Len { MAX_TOKEN_LEN = 16 };
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void dump(UnicodeString msg, RuleBasedCollator* c, UErrorCode& status);
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_COLLATION */
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
183