1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT:
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 2002-2010, International Business Machines Corporation and
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Created by weiv 05/09/2002 */
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include <stdarg.h>
1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/tstdtmod.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h"
1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include <stdio.h>
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestLog::~TestLog() {}
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoIcuTestErrorCode::~IcuTestErrorCode() {
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // Safe because our handleFailure() does not throw exceptions.
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(isFailure()) { handleFailure(); }
2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUBool IcuTestErrorCode::logIfFailureAndReset(const char *fmt, ...) {
2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(isFailure()) {
2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        char buffer[4000];
2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        va_list ap;
2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        va_start(ap, fmt);
2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        vsprintf(buffer, fmt, ap);
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        va_end(ap);
2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UnicodeString msg(testName, -1, US_INV);
3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        msg.append(UNICODE_STRING_SIMPLE(" failure: ")).append(UnicodeString(errorName(), -1, US_INV));
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        msg.append(UNICODE_STRING_SIMPLE(" - ")).append(UnicodeString(buffer, -1, US_INV));
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        testClass.errln(msg);
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        reset();
3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return TRUE;
3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    } else {
3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        reset();
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return FALSE;
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUBool IcuTestErrorCode::logDataIfFailureAndReset(const char *fmt, ...) {
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(isFailure()) {
4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        char buffer[4000];
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        va_list ap;
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        va_start(ap, fmt);
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        vsprintf(buffer, fmt, ap);
4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        va_end(ap);
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UnicodeString msg(testName, -1, US_INV);
4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        msg.append(UNICODE_STRING_SIMPLE(" failure: ")).append(UnicodeString(errorName(), -1, US_INV));
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        msg.append(UNICODE_STRING_SIMPLE(" - ")).append(UnicodeString(buffer, -1, US_INV));
5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        testClass.dataerrln(msg);
5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        reset();
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return TRUE;
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    } else {
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        reset();
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return FALSE;
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid IcuTestErrorCode::handleFailure() const {
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // testClass.errln("%s failure - %s", testName, errorName());
6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString msg(testName, -1, US_INV);
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    msg.append(UNICODE_STRING_SIMPLE(" failure: ")).append(UnicodeString(errorName(), -1, US_INV));
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (get() == U_MISSING_RESOURCE_ERROR) {
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        testClass.dataerrln(msg);
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    } else {
6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        testClass.errln(msg);
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestDataModule *TestDataModule::getTestDataModule(const char* name, TestLog& log, UErrorCode &status)
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return NULL;
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  TestDataModule *result = NULL;
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // TODO: probe for resource bundle and then for XML.
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // According to that, construct an appropriate driver object
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  result = new RBTestDataModule(name, log, status);
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_SUCCESS(status)) {
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result;
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } else {
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete result;
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return NULL;
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestDataModule::TestDataModule(const char* name, TestLog& log, UErrorCode& /*status*/)
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru: testName(name),
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerufInfo(NULL),
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerufLog(log)
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestDataModule::~TestDataModule() {
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(fInfo != NULL) {
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fInfo;
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char * TestDataModule::getName() const
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return testName;
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruRBTestDataModule::~RBTestDataModule()
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(fTestData);
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(fModuleBundle);
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(fInfoRB);
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  uprv_free(tdpath);
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruRBTestDataModule::RBTestDataModule(const char* name, TestLog& log, UErrorCode& status)
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru: TestDataModule(name, log, status),
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fModuleBundle(NULL),
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fTestData(NULL),
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fInfoRB(NULL),
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  tdpath(NULL)
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fNumberOfTests = 0;
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fDataTestValid = TRUE;
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fModuleBundle = getTestBundle(name, status);
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(fDataTestValid) {
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fTestData = ures_getByKey(fModuleBundle, "TestData", NULL, &status);
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fNumberOfTests = ures_getSize(fTestData);
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fInfoRB = ures_getByKey(fModuleBundle, "Info", NULL, &status);
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_ZERO_ERROR) {
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log.errln(UNICODE_STRING_SIMPLE("Unable to initalize test data - missing mandatory description resources!"));
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      fDataTestValid = FALSE;
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      fInfo = new RBDataMap(fInfoRB, status);
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool RBTestDataModule::getInfo(const DataMap *& info, UErrorCode &/*status*/) const
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    info = fInfo;
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(fInfo) {
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return TRUE;
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return FALSE;
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestData* RBTestDataModule::createTestData(int32_t index, UErrorCode &status) const
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  TestData *result = NULL;
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode intStatus = U_ZERO_ERROR;
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(fDataTestValid == TRUE) {
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Both of these resources get adopted by a TestData object.
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *DataFillIn = ures_getByIndex(fTestData, index, NULL, &status);
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *headers = ures_getByKey(fInfoRB, "Headers", NULL, &intStatus);
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      result = new RBTestData(DataFillIn, headers, status);
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(U_SUCCESS(status)) {
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return result;
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      } else {
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete result;
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(DataFillIn);
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(headers);
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } else {
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_MISSING_RESOURCE_ERROR;
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return NULL;
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestData* RBTestDataModule::createTestData(const char* name, UErrorCode &status) const
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  TestData *result = NULL;
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode intStatus = U_ZERO_ERROR;
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(fDataTestValid == TRUE) {
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Both of these resources get adopted by a TestData object.
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *DataFillIn = ures_getByKey(fTestData, name, NULL, &status);
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *headers = ures_getByKey(fInfoRB, "Headers", NULL, &intStatus);
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      result = new RBTestData(DataFillIn, headers, status);
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(U_SUCCESS(status)) {
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return result;
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      } else {
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete result;
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(DataFillIn);
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(headers);
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } else {
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_MISSING_RESOURCE_ERROR;
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return NULL;
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//Get test data from ResourceBundles
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUResourceBundle*
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruRBTestDataModule::getTestBundle(const char* bundleName, UErrorCode &status)
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_SUCCESS(status)) {
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *testBundle = NULL;
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* icu_data = fLog.getTestDataPath(status);
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (testBundle == NULL) {
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        testBundle = ures_openDirect(icu_data, bundleName, &status);
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (status != U_ZERO_ERROR) {
21927f654740f2a26ad62a5c155af9199af9e69b889claireho            fLog.dataerrln(UNICODE_STRING_SIMPLE("Could not load test data from resourcebundle: ") + UnicodeString(bundleName, -1, US_INV));
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fDataTestValid = FALSE;
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return testBundle;
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } else {
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return NULL;
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
229