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