OLD | NEW |
(Empty) | |
| 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 |
OLD | NEW |