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