testdata.cpp (3243B)
1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /******************************************************************** 4 * COPYRIGHT: 5 * Copyright (c) 2002-2005, International Business Machines Corporation and 6 * others. All Rights Reserved. 7 ********************************************************************/ 8 9 /* Created by weiv 05/09/2002 */ 10 11 #include "unicode/testdata.h" 12 13 14 TestData::TestData(const char* testName) 15 : name(testName), 16 fInfo(nullptr), 17 fCurrSettings(nullptr), 18 fCurrCase(nullptr), 19 fSettingsSize(0), 20 fCasesSize(0), 21 fCurrentSettings(0), 22 fCurrentCase(0) 23 24 { 25 } 26 27 TestData::~TestData() { 28 delete fInfo; 29 delete fCurrSettings; 30 delete fCurrCase; 31 } 32 33 const char * TestData::getName() const 34 { 35 return name; 36 } 37 38 39 40 RBTestData::RBTestData(const char* testName) 41 : TestData(testName), 42 fData(nullptr), 43 fHeaders(nullptr), 44 fSettings(nullptr), 45 fCases(nullptr) 46 { 47 } 48 49 RBTestData::RBTestData(UResourceBundle *data, UResourceBundle *headers, UErrorCode& status) 50 : TestData(ures_getKey(data)), 51 fData(data), 52 fHeaders(headers), 53 fSettings(nullptr), 54 fCases(nullptr) 55 { 56 UErrorCode intStatus = U_ZERO_ERROR; 57 UResourceBundle *currHeaders = ures_getByKey(data, "Headers", nullptr, &intStatus); 58 if(intStatus == U_ZERO_ERROR) { 59 ures_close(fHeaders); 60 fHeaders = currHeaders; 61 } else { 62 intStatus = U_ZERO_ERROR; 63 } 64 fSettings = ures_getByKey(data, "Settings", nullptr, &intStatus); 65 fSettingsSize = ures_getSize(fSettings); 66 UResourceBundle *info = ures_getByKey(data, "Info", nullptr, &intStatus); 67 if(U_SUCCESS(intStatus)) { 68 fInfo = new RBDataMap(info, status); 69 } else { 70 intStatus = U_ZERO_ERROR; 71 } 72 fCases = ures_getByKey(data, "Cases", nullptr, &status); 73 fCasesSize = ures_getSize(fCases); 74 75 ures_close(info); 76 } 77 78 79 RBTestData::~RBTestData() 80 { 81 ures_close(fData); 82 ures_close(fHeaders); 83 ures_close(fSettings); 84 ures_close(fCases); 85 } 86 87 UBool RBTestData::getInfo(const DataMap *& info, UErrorCode &/*status*/) const 88 { 89 if(fInfo) { 90 info = fInfo; 91 return true; 92 } else { 93 info = nullptr; 94 return false; 95 } 96 } 97 98 UBool RBTestData::nextSettings(const DataMap *& settings, UErrorCode &status) 99 { 100 UErrorCode intStatus = U_ZERO_ERROR; 101 UResourceBundle *data = ures_getByIndex(fSettings, fCurrentSettings++, nullptr, &intStatus); 102 if(U_SUCCESS(intStatus)) { 103 // reset the cases iterator 104 fCurrentCase = 0; 105 if(fCurrSettings == nullptr) { 106 fCurrSettings = new RBDataMap(data, status); 107 } else { 108 ((RBDataMap *)fCurrSettings)->init(data, status); 109 } 110 ures_close(data); 111 settings = fCurrSettings; 112 return true; 113 } else { 114 settings = nullptr; 115 return false; 116 } 117 } 118 119 UBool RBTestData::nextCase(const DataMap *& nextCase, UErrorCode &status) 120 { 121 UErrorCode intStatus = U_ZERO_ERROR; 122 UResourceBundle *currCase = ures_getByIndex(fCases, fCurrentCase++, nullptr, &intStatus); 123 if(U_SUCCESS(intStatus)) { 124 if(fCurrCase == nullptr) { 125 fCurrCase = new RBDataMap(fHeaders, currCase, status); 126 } else { 127 ((RBDataMap *)fCurrCase)->init(fHeaders, currCase, status); 128 } 129 ures_close(currCase); 130 nextCase = fCurrCase; 131 return true; 132 } else { 133 nextCase = nullptr; 134 return false; 135 } 136 }