]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | /******************************************************************** |
2 | * COPYRIGHT: | |
46f4442e | 3 | * Copyright (c) 2002-2006, International Business Machines Corporation and |
b75a7d8f A |
4 | * others. All Rights Reserved. |
5 | ********************************************************************/ | |
6 | ||
7 | /* Created by weiv 05/09/2002 */ | |
8 | ||
9 | /* Base class for data driven tests */ | |
10 | ||
374ca955 A |
11 | #ifndef U_TESTFW_TESTDATA |
12 | #define U_TESTFW_TESTDATA | |
b75a7d8f | 13 | |
374ca955 A |
14 | #include "unicode/tstdtmod.h" |
15 | #include "unicode/datamap.h" | |
b75a7d8f | 16 | |
73c04bcf | 17 | |
b75a7d8f A |
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 | ||
374ca955 | 38 | class T_CTEST_EXPORT_API TestData { |
b75a7d8f A |
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 | ||
374ca955 | 87 | class T_CTEST_EXPORT_API RBTestData : public TestData { |
b75a7d8f A |
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) {}; | |
46f4442e | 99 | RBTestData& operator=(const RBTestData& /*original*/); |
b75a7d8f A |
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 | |
73c04bcf | 111 |