1 /******************************************************************** 2 * COPYRIGHT: 3 * Copyright (c) 2002-2005, International Business Machines Corporation and 4 * others. All Rights Reserved. 5 ********************************************************************/ 6 7 /* Created by weiv 05/09/2002 */ 8 9 /* Base class for data driven tests */ 10 11 #ifndef U_TESTFW_TESTMODULE 12 #define U_TESTFW_TESTMODULE 13 14 #include "unicode/unistr.h" 15 #include "unicode/ures.h" 16 #include "unicode/testtype.h" 17 #include "unicode/testdata.h" 18 #include "unicode/datamap.h" 19 #include "unicode/testlog.h" 20 21 22 /* This class abstracts the actual organization of the 23 * data for data driven tests 24 */ 25 26 27 class DataMap; 28 class TestData; 29 30 31 /** Main data driven test class. Corresponds to one named data 32 * unit (such as a resource bundle. It is instantiated using 33 * a factory method getTestDataModule 34 */ 35 class T_CTEST_EXPORT_API TestDataModule { 36 const char* testName; 37 38 protected: 39 DataMap *fInfo; 40 TestLog& fLog; 41 42 public: 43 /** Factory method. 44 * @param name name of the test module. Usually name of a resource bundle or a XML file 45 * @param log a logging class, used for internal error reporting. 46 * @param status if something goes wrong, status will be set 47 * @return a TestDataModule object. Use it to get test data from it 48 */ 49 static TestDataModule *getTestDataModule(const char* name, TestLog& log, UErrorCode &status); 50 virtual ~TestDataModule(); 51 52 protected: 53 TestDataModule(const char* name, TestLog& log, UErrorCode& status); 54 55 public: 56 /** Name of this TestData module. 57 * @return a name 58 */ 59 const char * getName() const; 60 61 /** Get a pointer to an object owned DataMap that contains more information on this module 62 * Usual fields are "Description", "LongDescription", "Settings". Also, if containing a 63 * field "Headers" these will be used as the default headers, so that you don't have to 64 * to specify per test headers. 65 * @param info pass in a const DataMap pointer. If no info, it will be set to NULL 66 */ 67 virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const = 0; 68 69 /** Create a test data object from an index. Helpful for integrating tests with current 70 * intltest framework which addresses the tests by index. 71 * @param index index of the test to be instantiated 72 * @return an instantiated TestData object, ready to provide settings and cases for 73 * the tests. 74 */ 75 virtual TestData* createTestData(int32_t index, UErrorCode &status) const = 0; 76 77 /** Create a test data object from a name. 78 * @param name name of the test to be instantiated 79 * @return an instantiated TestData object, ready to provide settings and cases for 80 * the tests. 81 */ 82 virtual TestData* createTestData(const char* name, UErrorCode &status) const = 0; 83 }; 84 85 class T_CTEST_EXPORT_API RBTestDataModule : public TestDataModule { 86 public: 87 virtual ~RBTestDataModule(); 88 89 public: 90 RBTestDataModule(const char* name, TestLog& log, UErrorCode& status); 91 92 public: 93 virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const; 94 95 virtual TestData* createTestData(int32_t index, UErrorCode &status) const; 96 virtual TestData* createTestData(const char* name, UErrorCode &status) const; 97 98 private: 99 UResourceBundle *getTestBundle(const char* bundleName, UErrorCode &status); 100 101 private: 102 UResourceBundle *fModuleBundle; 103 UResourceBundle *fTestData; 104 UResourceBundle *fInfoRB; 105 UBool fDataTestValid; 106 char *tdpath; 107 108 /* const char* fTestName;*/ /* See name */ 109 int32_t fNumberOfTests; 110 111 }; 112 113 114 #endif 115 116