1/********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2001, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6
7/**
8 * Collation Iterator tests.
9 * (Let me reiterate my position...)
10 */
11
12#ifndef _ITERCOLL
13#define _ITERCOLL
14
15#include "unicode/utypes.h"
16
17#if !UCONFIG_NO_COLLATION
18
19#include "unicode/tblcoll.h"
20#include "unicode/coleitr.h"
21#include "tscoll.h"
22
23class CollationIteratorTest: public IntlTestCollator
24{
25public:
26
27    // If this is too small for the test data, just increase it.
28    // Just don't make it too large, otherwise the executable will get too big
29    enum EToken_Len { MAX_TOKEN_LEN = 16 };
30
31    CollationIteratorTest();
32    virtual ~CollationIteratorTest();
33
34    void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL);
35
36    /**
37    * Test that results from CollationElementIterator.next is equivalent to
38    * the reversed results from CollationElementIterator.previous, for the set
39    * of BMP characters.
40    */
41    void TestUnicodeChar();
42
43    /**
44     * Test for CollationElementIterator.previous()
45     *
46     * @bug 4108758 - Make sure it works with contracting characters
47     *
48     */
49    void TestPrevious(/* char* par */);
50
51    /**
52     * Test for getOffset() and setOffset()
53     */
54    void TestOffset(/* char* par */);
55
56    /**
57     * Test for setText()
58     */
59    void TestSetText(/* char* par */);
60
61    /** @bug 4108762
62     * Test for getMaxExpansion()
63     */
64    void TestMaxExpansion(/* char* par */);
65
66    /*
67     * @bug 4157299
68     */
69    void TestClearBuffers(/* char* par */);
70
71    /**
72     * Testing the assignment operator
73     */
74    void TestAssignment();
75
76    /**
77     * Testing the constructors
78     */
79    void TestConstructors();
80
81    /**
82    * Testing the strength order functionality
83    */
84    void TestStrengthOrder();
85
86    //------------------------------------------------------------------------
87    // Internal utilities
88    //
89
90private:
91
92    struct ExpansionRecord
93    {
94        UChar character;
95        int32_t count;
96    };
97
98    /**
99     * Verify that getMaxExpansion works on a given set of collation rules
100     */
101    void verifyExpansion(UnicodeString rules, ExpansionRecord tests[], int32_t testCount);
102
103    /**
104     * Return a string containing all of the collation orders
105     * returned by calls to next on the specified iterator
106     */
107    UnicodeString &orderString(CollationElementIterator &iter, UnicodeString &target);
108
109    void assertEqual(CollationElementIterator &i1, CollationElementIterator &i2);
110
111    RuleBasedCollator *en_us;
112    const UnicodeString test1;
113    const UnicodeString test2;
114
115};
116
117#endif /* #if !UCONFIG_NO_COLLATION */
118
119#endif
120