|
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 |