/*
*****************************************************************************************
*                                                                                       *
* COPYRIGHT:                                                                            *
*   (C) Copyright Taligent, Inc.,  1996                                                 *
*   (C) Copyright International Business Machines Corporation,  1999                    *
*   Licensed Material - Program-Property of IBM - All Rights Reserved.                  *
*   US Government Users Restricted Rights - Use, duplication, or disclosure             *
*   restricted by GSA ADP Schedule Contract with IBM Corp.                              *
*                                                                                       *
*****************************************************************************************
********************************************************************************
*
* File CREGRTST.H
*
* Modification History:
*        Name                     Description            
*     Madhu Katragadda            Converted to C, added extra functions and tests
*********************************************************************************
*/

/*C API functionality and regression test for BreakIterator*/

#ifndef _CBRKITREGTEST
#define _CBRKITREGTEST


#include "cintltst.h"


struct Vector1;
/* Internal functions used */
    void addElement(struct Vector1*, const char*);
    void addElement2(struct Vector1*, const UChar*);
    int32_t Count(struct Vector1*);
    UChar* elementAt(struct Vector1*, int32_t);
/* Internal Functions used */
    UChar* extractBetween(UTextOffset start, UTextOffset end, UChar* text);
    UChar* CharsToUCharArray(const char*);
    UChar* UCharToUCharArray(const UChar uchar);

    void AllocateTextBoundary(void);
    void FreeTextBoundary(void);

/* The test functions */

    /**
     * Test word break using doForwardSelectionTest
     **/
    void TestForwardWordSelection(void); 
    /**
     * Test word break using doFirstSelectionTest
     **/
    void TestFirstWordSelection(void); 
    /**
     * Test word break using doLastSelectionTest
     **/
    void TestLastWordSelection(void);
    /**
     * Test word break using doBackwardSelectionTest
     **/
    void TestBackwardWordSelection(void); 
    /**
     * Test word break using doForwardIndexSelectionTest
     **/
    void TestForwardWordIndexSelection(void); 
    /**
     * Test word break using doBackwardIndexSelectionTest
     **/
    void TestBackwardWordIndexSelection(void); 

    /**
     * Test sentence break using doForwardSelectionTest
     **/
     void TestForwardSentenceSelection(void);
    /**
     * Test sentence break using doBackwardSelectionTest
     **/
    void TestBackwardSentenceSelection(void);
    /**
     * Test sentence break using doFirstSelectionTest
     **/
    void TestFirstSentenceSelection(void);
    /**
     * Test sentence break using doLastSelectionTest
     **/
    void TestLastSentenceSelection(void); 
    /**
     * Test sentence break using doForwardIndexSelectionTest
    **/
    void TestForwardSentenceIndexSelection(void);
    /**
    * Test sentence break using doBackwardIndexSelectionTest
    **/
    void TestBackwardSentenceIndexSelection(void);  

    /**
     * Test line break using doForwardSelectionTest
     **/
    void TestForwardLineSelection(void);
    /**
     * Test line break using doBackwardSelectionTest
     **/
    void TestBackwardLineSelection(void); 
    /**
     * Test line break using doFirstSelectionTest
     **/
    void TestFirstLineSelection(void); 
    /**
     * Test line break using doLastSelectionTest
     **/
    void TestLastLineSelection(void); 
    /**
     * Test line break using doForwardIndexSelectionTest
     **/
    void TestForwardLineIndexSelection(void); 
    /**
     * Test line break using doBackwardIndexSelectionTest
     **/
    void TestBackwardLineIndexSelection(void);

    /**
     * Test character break using doForwardSelectionTest
     **/
    void TestForwardCharacterSelection(void);
    /**
     * Test character break using doBackwardSelectionTest
     **/
    void TestBackwardCharacterSelection(void); 
    /**
     * Test character break using doFirstSelectionTest
     **/
    void TestFirstCharacterSelection(void); 
    /**
     * Test character break using doLastSelectionTest
     **/
    void TestLastCharacterSelection(void); 
    /**
     * Test character break using doForwardIndexSelectionTest
     **/
    void TestForwardCharacterIndexSelection(void); 
    /**
     * Test character break using doBackwardIndexSelectionTest
     **/
    void TestBackwardCharacterIndexSelection(void); 


    /**
     * test methods ubrk_preceding(), ubrk_following() 
     **/
    void TestPreceding(void);
    void TestEndBehaviour(void);

    void TestWordInvariants(void);
    void TestSentenceInvariants(void);
    void TestCharacterInvariants(void);
    void TestLineInvariants(void);
/*-----------------*/
/* Internal functions to prepare test data */

    void addTestWordData(void);
    void addTestSentenceData(void);
    void addTestLineData(void);
    void addTestCharacterData(void);
    UChar* createTestData(struct Vector1*, int32_t);

/* Test Implementation routines*/

    /**
     * Perform tests of BreakIterator forward functionality 
     * on different kinds of iterators (word, sentence, line and character)
     **/
    void doForwardSelectionTest(UBreakIterator*,  UChar* testText, struct Vector1* result);
    /**
     * Perform tests of BreakIterator backward functionality 
     * on different kinds of iterators (word, sentence, line and character)
     **/
    void doBackwardSelectionTest(UBreakIterator*, UChar* testText, struct Vector1* result);
    /**
     * Perform tests of BreakIterator first selection functionality 
     * on different kinds of iterators (word, sentence, line and character)
     **/
    void doFirstSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result);
    /**
     * Perform tests of BreakIterator last selection functionality 
     * on different kinds of iterators (word, sentence, line and character)
     **/
    void doLastSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result);
    /**
     * Perform tests of BreakIterator backward index functionality 
     * on different kinds of iterators (word, sentence, line and character)
     **/
    void doForwardIndexSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result);
    /**
     * Perform tests of BreakIterator multiple selection functionality 
     * on different kinds of iterators (word, sentence, line and character)
     **/
    void doBackwardIndexSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result);
    
    void doBreakInvariantTest(UBreakIteratorType type, UChar* testChars);
    
    void doOtherInvariantTest(UBreakIteratorType type , UChar* testChars);
    /**
     * Perform tests with short sample code
     **/
    void sample(UBreakIterator* tb, UChar* text);


struct Vector1* wordSelectionData;
struct Vector1* sentenceSelectionData;
struct Vector1* lineSelectionData;
struct Vector1* characterSelectionData;

UChar* testWordText;
UChar* testSentenceText;
UChar* testLineText;
UChar* testCharacterText;


static UChar *cannedTestChars;


#endif
