• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "unicode/tstdtmod.h"
10 #include "cmemory.h"
11 
~TestLog()12 TestLog::~TestLog() {}
13 
getTestDataModule(const char * name,TestLog & log,UErrorCode & status)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 
TestDataModule(const char * name,TestLog & log,UErrorCode &)33 TestDataModule::TestDataModule(const char* name, TestLog& log, UErrorCode& /*status*/)
34 : testName(name),
35 fInfo(NULL),
36 fLog(log)
37 {
38 }
39 
~TestDataModule()40 TestDataModule::~TestDataModule() {
41   if(fInfo != NULL) {
42     delete fInfo;
43   }
44 }
45 
getName() const46 const char * TestDataModule::getName() const
47 {
48   return testName;
49 }
50 
51 
52 
~RBTestDataModule()53 RBTestDataModule::~RBTestDataModule()
54 {
55   ures_close(fTestData);
56   ures_close(fModuleBundle);
57   ures_close(fInfoRB);
58   uprv_free(tdpath);
59 }
60 
RBTestDataModule(const char * name,TestLog & log,UErrorCode & status)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) {
76       log.errln(UNICODE_STRING_SIMPLE("Unable to initalize test data - missing mandatory description resources!"));
77       fDataTestValid = FALSE;
78     } else {
79       fInfo = new RBDataMap(fInfoRB, status);
80     }
81   }
82 }
83 
getInfo(const DataMap * & info,UErrorCode &) const84 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 
createTestData(int32_t index,UErrorCode & status) const94 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 
createTestData(const char * name,UErrorCode & status) const122 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*
getTestBundle(const char * bundleName,UErrorCode & status)153 RBTestDataModule::getTestBundle(const char* bundleName, UErrorCode &status)
154 {
155   if(U_SUCCESS(status)) {
156     UResourceBundle *testBundle = NULL;
157     const char* icu_data = fLog.getTestDataPath(status);
158     if (testBundle == NULL) {
159         testBundle = ures_openDirect(icu_data, bundleName, &status);
160         if (status != U_ZERO_ERROR) {
161             fLog.errln(UNICODE_STRING_SIMPLE("Failed: could not load test data from resourcebundle: ") + UnicodeString(bundleName, -1, US_INV));
162             fDataTestValid = FALSE;
163         }
164     }
165     return testBundle;
166   } else {
167     return NULL;
168   }
169 }
170 
171