1/*************************************************************************
2 * Copyright (c) 1999-2013, 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    void TestBug9983();
75
76    void TestDebug();
77    void TestProperties();
78
79/***********************/
80private:
81    /**
82     * internal methods to prepare test data
83     **/
84
85    /**
86     * Perform tests of BreakIterator forward and backward functionality
87     * on different kinds of iterators (word, sentence, line and character).
88     * It tests the methods first(), next(), current(), preceding(), following()
89     * previous() and isBoundary().
90     * It makes use of internal functions to achieve this.
91     **/
92    void generalIteratorTest(RuleBasedBreakIterator& bi, BITestData  &td);
93    /**
94     * Internal method to perform iteration and test the first() and next() functions
95     **/
96    void testFirstAndNext(RuleBasedBreakIterator& bi, BITestData &td);
97    /**
98     * Internal method to perform iteration and test the last() and previous() functions
99     **/
100    void testLastAndPrevious(RuleBasedBreakIterator& bi, BITestData &td);
101    /**
102     * Internal method to perform iteration and test the following() function
103     **/
104    void testFollowing(RuleBasedBreakIterator& bi, BITestData &td);
105    /**
106     * Internal method to perform iteration and test the preceding() function
107     **/
108    void testPreceding(RuleBasedBreakIterator& bi, BITestData &td);
109    /**
110     * Internal method to perform iteration and test the isBoundary() function
111     **/
112    void testIsBoundary(RuleBasedBreakIterator& bi, BITestData &td);
113    /**
114     * Internal method to perform tests of BreakIterator multiple selection functionality
115     * on different kinds of iterators (word, sentence, line and character)
116     **/
117    void doMultipleSelectionTest(RuleBasedBreakIterator& iterator, BITestData &td);
118
119    void RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name, uint32_t  seed,
120        int32_t loopCount, UBool useUText);
121
122    // Run one of the Unicode Consortium boundary test data files.
123    void runUnicodeTestData(const char *fileName, RuleBasedBreakIterator *bi);
124
125    // Run a single test case from one of the Unicode Consortium test files.
126    void checkUnicodeTestCase(const char *testFileName, int lineNumber,
127                         const UnicodeString &testString,
128                         UVector32 *breakPositions,
129                         RuleBasedBreakIterator *bi);
130
131    // Run the actual tests for TestTailoredBreaks()
132    void TBTest(BreakIterator* brkitr, int type, const char *locale, const char* escapedText,
133                const int32_t *expectOffsets, int32_t expectOffsetsCount);
134};
135
136#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
137
138#endif
139