1 /*************************************************************************
2  * Copyright (c) 1999-2014, 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 
22 class  Enumeration;
23 class  BITestData;
24 struct TestParams;
25 class  RBBIMonkeyKind;
26 
27 U_NAMESPACE_BEGIN
28 class  UVector32;
29 U_NAMESPACE_END
30 
31 /**
32  * Test the RuleBasedBreakIterator class giving different rules
33  */
34 class RBBITest: public IntlTest {
35 public:
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 *, UErrorCode &status);
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 /***********************/
80 private:
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     /** Filter for test cases from the Unicode test data files.
136      *  Some need to be skipped because ICU is unable to fully implement the
137      *  Unicode boundary specifications.
138      *  @param testCase the test data string.
139      *  @param fileName the Unicode test data file name.
140      *  @return FALSE if the test case should be run, TRUE if it should be skipped.
141      */
142     UBool testCaseIsKnownIssue(const UnicodeString &testCase, const char *fileName);
143 };
144 
145 #endif /* #if !UCONFIG_NO_BREAK_ITERATION */
146 
147 #endif
148