]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | /******************************************************************** |
2 | * COPYRIGHT: | |
73c04bcf | 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 | ||
374ca955 | 9 | #include "unicode/tstdtmod.h" |
b75a7d8f A |
10 | #include "cmemory.h" |
11 | ||
73c04bcf A |
12 | TestLog::~TestLog() {} |
13 | ||
b75a7d8f A |
14 | TestDataModule *TestDataModule::getTestDataModule(const char* name, TestLog& log, UErrorCode &status) |
15 | { | |
16 | if(U_FAILURE(status)) { | |
17 | return NULL; | |
18 | } | |
19 | TestDataModule *result = NULL; | |
20 | ||
21 | // TODO: probe for resource bundle and then for XML. | |
22 | // According to that, construct an appropriate driver object | |
23 | ||
24 | result = new RBTestDataModule(name, log, status); | |
25 | if(U_SUCCESS(status)) { | |
26 | return result; | |
27 | } else { | |
28 | delete result; | |
29 | return NULL; | |
30 | } | |
31 | } | |
32 | ||
33 | TestDataModule::TestDataModule(const char* name, TestLog& log, UErrorCode& /*status*/) | |
34 | : testName(name), | |
35 | fInfo(NULL), | |
36 | fLog(log) | |
37 | { | |
38 | } | |
39 | ||
40 | TestDataModule::~TestDataModule() { | |
41 | if(fInfo != NULL) { | |
42 | delete fInfo; | |
43 | } | |
44 | } | |
45 | ||
46 | const char * TestDataModule::getName() const | |
47 | { | |
48 | return testName; | |
49 | } | |
50 | ||
51 | ||
52 | ||
53 | RBTestDataModule::~RBTestDataModule() | |
54 | { | |
55 | ures_close(fTestData); | |
56 | ures_close(fModuleBundle); | |
57 | ures_close(fInfoRB); | |
58 | uprv_free(tdpath); | |
59 | } | |
60 | ||
61 | RBTestDataModule::RBTestDataModule(const char* name, TestLog& log, UErrorCode& status) | |
62 | : TestDataModule(name, log, status), | |
63 | fModuleBundle(NULL), | |
64 | fTestData(NULL), | |
65 | fInfoRB(NULL), | |
66 | tdpath(NULL) | |
67 | { | |
68 | fNumberOfTests = 0; | |
69 | fDataTestValid = TRUE; | |
70 | fModuleBundle = getTestBundle(name, status); | |
71 | if(fDataTestValid) { | |
72 | fTestData = ures_getByKey(fModuleBundle, "TestData", NULL, &status); | |
73 | fNumberOfTests = ures_getSize(fTestData); | |
74 | fInfoRB = ures_getByKey(fModuleBundle, "Info", NULL, &status); | |
75 | if(status != U_ZERO_ERROR) { | |
73c04bcf | 76 | log.errln(UNICODE_STRING_SIMPLE("Unable to initalize test data - missing mandatory description resources!")); |
b75a7d8f A |
77 | fDataTestValid = FALSE; |
78 | } else { | |
79 | fInfo = new RBDataMap(fInfoRB, status); | |
80 | } | |
81 | } | |
82 | } | |
83 | ||
84 | UBool RBTestDataModule::getInfo(const DataMap *& info, UErrorCode &/*status*/) const | |
85 | { | |
86 | info = fInfo; | |
87 | if(fInfo) { | |
88 | return TRUE; | |
89 | } else { | |
90 | return FALSE; | |
91 | } | |
92 | } | |
93 | ||
94 | TestData* RBTestDataModule::createTestData(int32_t index, UErrorCode &status) const | |
95 | { | |
96 | TestData *result = NULL; | |
97 | UErrorCode intStatus = U_ZERO_ERROR; | |
98 | ||
99 | if(fDataTestValid == TRUE) { | |
100 | // Both of these resources get adopted by a TestData object. | |
101 | UResourceBundle *DataFillIn = ures_getByIndex(fTestData, index, NULL, &status); | |
102 | UResourceBundle *headers = ures_getByKey(fInfoRB, "Headers", NULL, &intStatus); | |
103 | ||
104 | if(U_SUCCESS(status)) { | |
105 | result = new RBTestData(DataFillIn, headers, status); | |
106 | ||
107 | if(U_SUCCESS(status)) { | |
108 | return result; | |
109 | } else { | |
110 | delete result; | |
111 | } | |
112 | } else { | |
113 | ures_close(DataFillIn); | |
114 | ures_close(headers); | |
115 | } | |
116 | } else { | |
117 | status = U_MISSING_RESOURCE_ERROR; | |
118 | } | |
119 | return NULL; | |
120 | } | |
121 | ||
122 | TestData* RBTestDataModule::createTestData(const char* name, UErrorCode &status) const | |
123 | { | |
124 | TestData *result = NULL; | |
125 | UErrorCode intStatus = U_ZERO_ERROR; | |
126 | ||
127 | if(fDataTestValid == TRUE) { | |
128 | // Both of these resources get adopted by a TestData object. | |
129 | UResourceBundle *DataFillIn = ures_getByKey(fTestData, name, NULL, &status); | |
130 | UResourceBundle *headers = ures_getByKey(fInfoRB, "Headers", NULL, &intStatus); | |
131 | ||
132 | if(U_SUCCESS(status)) { | |
133 | result = new RBTestData(DataFillIn, headers, status); | |
134 | if(U_SUCCESS(status)) { | |
135 | return result; | |
136 | } else { | |
137 | delete result; | |
138 | } | |
139 | } else { | |
140 | ures_close(DataFillIn); | |
141 | ures_close(headers); | |
142 | } | |
143 | } else { | |
144 | status = U_MISSING_RESOURCE_ERROR; | |
145 | } | |
146 | return NULL; | |
147 | } | |
148 | ||
149 | ||
150 | ||
151 | //Get test data from ResourceBundles | |
152 | UResourceBundle* | |
153 | RBTestDataModule::getTestBundle(const char* bundleName, UErrorCode &status) | |
154 | { | |
155 | if(U_SUCCESS(status)) { | |
156 | UResourceBundle *testBundle = NULL; | |
374ca955 | 157 | const char* icu_data = fLog.getTestDataPath(status); |
b75a7d8f A |
158 | if (testBundle == NULL) { |
159 | testBundle = ures_openDirect(icu_data, bundleName, &status); | |
160 | if (status != U_ZERO_ERROR) { | |
73c04bcf | 161 | fLog.errln(UNICODE_STRING_SIMPLE("Failed: could not load test data from resourcebundle: ") + UnicodeString(bundleName, -1, US_INV)); |
b75a7d8f A |
162 | fDataTestValid = FALSE; |
163 | } | |
164 | } | |
165 | return testBundle; | |
166 | } else { | |
167 | return NULL; | |
168 | } | |
169 | } | |
170 |