1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 2002-2014, 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 65fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (get() == U_MISSING_RESOURCE_ERROR || get() == U_FILE_ACCESS_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