1/*************************************************************************
2 * Copyright (c) 1999-2011, International Business Machines
3 * Corporation and others. All Rights Reserved.
4 *************************************************************************
5 *   Date        Name        Description
6 *   12/15/99    Madhu        Creation.
7 *   01/12/2000  Madhu        Updated for changed API and added new tests
8 ************************************************************************/
9
10
11#ifndef RBBITEST_H
12#define RBBITEST_H
13
14#include "unicode/utypes.h"
15
16#if !UCONFIG_NO_BREAK_ITERATION
17
18#include "intltest.h"
19#include "unicode/brkiter.h"
20
21
22class  Enumeration;
23class  BITestData;
24struct TestParams;
25class  RBBIMonkeyKind;
26
27U_NAMESPACE_BEGIN
28class  UVector32;
29U_NAMESPACE_END
30
31/**
32 * Test the RuleBasedBreakIterator class giving different rules
33 */
34class RBBITest: public IntlTest {
35public:
36
37    RBBITest();
38    virtual ~RBBITest();
39
40    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
41
42    /**
43     * Tests rule status return values
44     **/
45    void TestStatusReturn();
46
47    void TestEmptyString();
48    void TestGetAvailableLocales();
49    void TestGetDisplayName();
50    void TestEndBehaviour();
51    void TestBug4153072();
52    void TestJapaneseLineBreak();
53    void TestThaiLineBreak();
54    void TestMixedThaiLineBreak();
55    void TestMaiyamok();
56    void TestMonkey(char *params);
57
58    void TestExtended();
59    UChar *ReadAndConvertFile(const char *fileName, int &ulen, const char *encoding, UErrorCode &status);
60    void executeTest(TestParams *);
61
62    void TestWordBreaks();
63    void TestWordBoundary();
64    void TestLineBreaks();
65    void TestSentBreaks();
66    void TestBug3818();
67    void TestJapaneseWordBreak();
68    void TestTrieDict();
69    void TestUnicodeFiles();
70    void TestBug5775();
71    void TestTailoredBreaks();
72    void TestDictRules();
73    void TestBug5532();
74
75    void TestDebug();
76
77
78/***********************/
79private:
80    /**
81     * internal methods to prepare test data
82     **/
83
84    /**
85     * Perform tests of BreakIterator forward and backward functionality
86     * on different kinds of iterators (word, sentence, line and character).
87     * It tests the methods first(), next(), current(), preceding(), following()
88     * previous() and isBoundary().
89     * It makes use of internal functions to achieve this.
90     **/
91    void generalIteratorTest(RuleBasedBreakIterator& bi, BITestData  &td);
92    /**
93     * Internal method to perform iteration and test the first() and next() functions
94     **/
95    void testFirstAndNext(RuleBasedBreakIterator& bi, BITestData &td);
96    /**
97     * Internal method to perform iteration and test the last() and previous() functions
98     **/
99    void testLastAndPrevious(RuleBasedBreakIterator& bi, BITestData &td);
100    /**
101     * Internal method to perform iteration and test the following() function
102     **/
103    void testFollowing(RuleBasedBreakIterator& bi, BITestData &td);
104    /**
105     * Internal method to perform iteration and test the preceding() function
106     **/
107    void testPreceding(RuleBasedBreakIterator& bi, BITestData &td);
108    /**
109     * Internal method to perform iteration and test the isBoundary() function
110     **/
111    void testIsBoundary(RuleBasedBreakIterator& bi, BITestData &td);
112    /**
113     * Internal method to perform tests of BreakIterator multiple selection functionality
114     * on different kinds of iterators (word, sentence, line and character)
115     **/
116    void doMultipleSelectionTest(RuleBasedBreakIterator& iterator, BITestData &td);
117
118    void RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name, uint32_t  seed,
119        int32_t loopCount, UBool useUText);
120
121    // Run one of the Unicode Consortium boundary test data files.
122    void runUnicodeTestData(const char *fileName, RuleBasedBreakIterator *bi);
123
124    // Run a single test case from one of the Unicode Consortium test files.
125    void checkUnicodeTestCase(const char *testFileName, int lineNumber,
126                         const UnicodeString &testString,
127                         UVector32 *breakPositions,
128                         RuleBasedBreakIterator *bi);
129
130    // Run the actual tests for TestTailoredBreaks()
131    void TBTest(BreakIterator* brkitr, int type, const char *locale, const char* escapedText,
132                const int32_t *expectOffsets, int32_t expectOffsetsCount);
133};
134
135#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
136
137#endif
138