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
TestData(const char * testName)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
~TestData()27 TestData::~TestData() {
28 delete fInfo;
29 delete fCurrSettings;
30 delete fCurrCase;
31 }
32
getName() const33 const char * TestData::getName() const
34 {
35 return name;
36 }
37
38
39
RBTestData(const char * testName)40 RBTestData::RBTestData(const char* testName)
41 : TestData(testName),
42 fData(nullptr),
43 fHeaders(nullptr),
44 fSettings(nullptr),
45 fCases(nullptr)
46 {
47 }
48
RBTestData(UResourceBundle * data,UResourceBundle * headers,UErrorCode & status)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
~RBTestData()79 RBTestData::~RBTestData()
80 {
81 ures_close(fData);
82 ures_close(fHeaders);
83 ures_close(fSettings);
84 ures_close(fCases);
85 }
86
getInfo(const DataMap * & info,UErrorCode &) const87 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
nextSettings(const DataMap * & settings,UErrorCode & status)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
nextCase(const DataMap * & nextCase,UErrorCode & status)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 }
137
138
139