1 /******************************************************************** 2 * COPYRIGHT: 3 * Copyright (c) 2002-2006, 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_TESTDATA 12 #define U_TESTFW_TESTDATA 13 14 #include "unicode/tstdtmod.h" 15 #include "unicode/datamap.h" 16 17 18 /** This is the class that abstracts one of the tests in a data file 19 * It is usually instantiated using TestDataModule::CreateTestData method 20 * This class provides two important methods: nextSettings and nextCase 21 * Usually, one walks through all settings and executes all cases for 22 * each setting. Each call to nextSettings resets the cases iterator. 23 * Individual test cases have to have the same number of fields as the 24 * number of entries in headers. Default headers can be specified in 25 * the TestDataModule info section. The default headers will be overriden 26 * by per-test headers. 27 * Example: 28 * DataMap *settings = NULL; 29 * DataMap *cases = NULL; 30 * while(nextSettings(settings, status)) { 31 * // set settings for the subtest 32 * while(nextCase(cases, status) { 33 * // process testcase 34 * } 35 * } 36 */ 37 38 class T_CTEST_EXPORT_API TestData { 39 const char* name; 40 41 protected: 42 DataMap *fInfo; 43 DataMap *fCurrSettings; 44 DataMap *fCurrCase; 45 int32_t fSettingsSize; 46 int32_t fCasesSize; 47 int32_t fCurrentSettings; 48 int32_t fCurrentCase; 49 /** constructor - don't use */ 50 TestData(const char* name); 51 52 public: 53 virtual ~TestData(); 54 55 const char* getName() const; 56 57 /** Get a pointer to an object owned DataMap that contains more information on this 58 * TestData object. 59 * Usual fields is "Description". 60 * @param info pass in a const DataMap pointer. If no info, it will be set to NULL 61 */ 62 virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const = 0; 63 64 /** Gets the next set of settings for the test. Resets the cases iterator. 65 * DataMap is owned by the object and should not be deleted. 66 * @param settings a DataMap pointer provided by the user. Will be NULL if 67 * no more settings are available. 68 * @param status for reporting unexpected errors. 69 * @return A boolean, TRUE if there are settings, FALSE if there is no more 70 * settings. 71 */ 72 virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status) = 0; 73 74 /** Gets the next test case. 75 * DataMap is owned by the object and should not be deleted. 76 * @param data a DataMap pointer provided by the user. Will be NULL if 77 * no more cases are available. 78 * @param status for reporting unexpected errors. 79 * @return A boolean, TRUE if there are cases, FALSE if there is no more 80 * cases. 81 */ 82 virtual UBool nextCase(const DataMap *& data, UErrorCode &status) = 0; 83 }; 84 85 // implementation of TestData that uses resource bundles 86 87 class T_CTEST_EXPORT_API RBTestData : public TestData { 88 UResourceBundle *fData; 89 UResourceBundle *fHeaders; 90 UResourceBundle *fSettings; 91 UResourceBundle *fCases; 92 93 public: 94 RBTestData(const char* name); 95 RBTestData(UResourceBundle *data, UResourceBundle *headers, UErrorCode& status); 96 private: 97 // RBTestData() {}; 98 // RBTestData(const RBTestData& original) {}; 99 RBTestData& operator=(const RBTestData& /*original*/); 100 101 public: 102 virtual ~RBTestData(); 103 104 virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const; 105 106 virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status); 107 virtual UBool nextCase(const DataMap *& nextCase, UErrorCode &status); 108 }; 109 110 #endif 111 112