// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* Created by weiv 05/09/2002 */ #include "unicode/testdata.h" TestData::TestData(const char* testName) : name(testName), fInfo(NULL), fCurrSettings(NULL), fCurrCase(NULL), fSettingsSize(0), fCasesSize(0), fCurrentSettings(0), fCurrentCase(0) { } TestData::~TestData() { if(fInfo != NULL) { delete fInfo; } if(fCurrSettings != NULL) { delete fCurrSettings; } if(fCurrCase != NULL) { delete fCurrCase; } } const char * TestData::getName() const { return name; } RBTestData::RBTestData(const char* testName) : TestData(testName), fData(NULL), fHeaders(NULL), fSettings(NULL), fCases(NULL) { } RBTestData::RBTestData(UResourceBundle *data, UResourceBundle *headers, UErrorCode& status) : TestData(ures_getKey(data)), fData(data), fHeaders(headers), fSettings(NULL), fCases(NULL) { UErrorCode intStatus = U_ZERO_ERROR; UResourceBundle *currHeaders = ures_getByKey(data, "Headers", NULL, &intStatus); if(intStatus == U_ZERO_ERROR) { ures_close(fHeaders); fHeaders = currHeaders; } else { intStatus = U_ZERO_ERROR; } fSettings = ures_getByKey(data, "Settings", NULL, &intStatus); fSettingsSize = ures_getSize(fSettings); UResourceBundle *info = ures_getByKey(data, "Info", NULL, &intStatus); if(U_SUCCESS(intStatus)) { fInfo = new RBDataMap(info, status); } else { intStatus = U_ZERO_ERROR; } fCases = ures_getByKey(data, "Cases", NULL, &status); fCasesSize = ures_getSize(fCases); ures_close(info); } RBTestData::~RBTestData() { ures_close(fData); ures_close(fHeaders); ures_close(fSettings); ures_close(fCases); } UBool RBTestData::getInfo(const DataMap *& info, UErrorCode &/*status*/) const { if(fInfo) { info = fInfo; return TRUE; } else { info = NULL; return FALSE; } } UBool RBTestData::nextSettings(const DataMap *& settings, UErrorCode &status) { UErrorCode intStatus = U_ZERO_ERROR; UResourceBundle *data = ures_getByIndex(fSettings, fCurrentSettings++, NULL, &intStatus); if(U_SUCCESS(intStatus)) { // reset the cases iterator fCurrentCase = 0; if(fCurrSettings == NULL) { fCurrSettings = new RBDataMap(data, status); } else { ((RBDataMap *)fCurrSettings)->init(data, status); } ures_close(data); settings = fCurrSettings; return TRUE; } else { settings = NULL; return FALSE; } } UBool RBTestData::nextCase(const DataMap *& nextCase, UErrorCode &status) { UErrorCode intStatus = U_ZERO_ERROR; UResourceBundle *currCase = ures_getByIndex(fCases, fCurrentCase++, NULL, &intStatus); if(U_SUCCESS(intStatus)) { if(fCurrCase == NULL) { fCurrCase = new RBDataMap(fHeaders, currCase, status); } else { ((RBDataMap *)fCurrCase)->init(fHeaders, currCase, status); } ures_close(currCase); nextCase = fCurrCase; return TRUE; } else { nextCase = NULL; return FALSE; } }