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(NULL),
17 fCurrSettings(NULL),
18 fCurrCase(NULL),
19 fSettingsSize(0),
20 fCasesSize(0),
21 fCurrentSettings(0),
22 fCurrentCase(0)
23
24 {
25 }
26
~TestData()27 TestData::~TestData() {
28 if(fInfo != NULL) {
29 delete fInfo;
30 }
31 if(fCurrSettings != NULL) {
32 delete fCurrSettings;
33 }
34 if(fCurrCase != NULL) {
35 delete fCurrCase;
36 }
37 }
38
getName() const39 const char * TestData::getName() const
40 {
41 return name;
42 }
43
44
45
RBTestData(const char * testName)46 RBTestData::RBTestData(const char* testName)
47 : TestData(testName),
48 fData(NULL),
49 fHeaders(NULL),
50 fSettings(NULL),
51 fCases(NULL)
52 {
53 }
54
RBTestData(UResourceBundle * data,UResourceBundle * headers,UErrorCode & status)55 RBTestData::RBTestData(UResourceBundle *data, UResourceBundle *headers, UErrorCode& status)
56 : TestData(ures_getKey(data)),
57 fData(data),
58 fHeaders(headers),
59 fSettings(NULL),
60 fCases(NULL)
61 {
62 UErrorCode intStatus = U_ZERO_ERROR;
63 UResourceBundle *currHeaders = ures_getByKey(data, "Headers", NULL, &intStatus);
64 if(intStatus == U_ZERO_ERROR) {
65 ures_close(fHeaders);
66 fHeaders = currHeaders;
67 } else {
68 intStatus = U_ZERO_ERROR;
69 }
70 fSettings = ures_getByKey(data, "Settings", NULL, &intStatus);
71 fSettingsSize = ures_getSize(fSettings);
72 UResourceBundle *info = ures_getByKey(data, "Info", NULL, &intStatus);
73 if(U_SUCCESS(intStatus)) {
74 fInfo = new RBDataMap(info, status);
75 } else {
76 intStatus = U_ZERO_ERROR;
77 }
78 fCases = ures_getByKey(data, "Cases", NULL, &status);
79 fCasesSize = ures_getSize(fCases);
80
81 ures_close(info);
82 }
83
84
~RBTestData()85 RBTestData::~RBTestData()
86 {
87 ures_close(fData);
88 ures_close(fHeaders);
89 ures_close(fSettings);
90 ures_close(fCases);
91 }
92
getInfo(const DataMap * & info,UErrorCode &) const93 UBool RBTestData::getInfo(const DataMap *& info, UErrorCode &/*status*/) const
94 {
95 if(fInfo) {
96 info = fInfo;
97 return true;
98 } else {
99 info = NULL;
100 return false;
101 }
102 }
103
nextSettings(const DataMap * & settings,UErrorCode & status)104 UBool RBTestData::nextSettings(const DataMap *& settings, UErrorCode &status)
105 {
106 UErrorCode intStatus = U_ZERO_ERROR;
107 UResourceBundle *data = ures_getByIndex(fSettings, fCurrentSettings++, NULL, &intStatus);
108 if(U_SUCCESS(intStatus)) {
109 // reset the cases iterator
110 fCurrentCase = 0;
111 if(fCurrSettings == NULL) {
112 fCurrSettings = new RBDataMap(data, status);
113 } else {
114 ((RBDataMap *)fCurrSettings)->init(data, status);
115 }
116 ures_close(data);
117 settings = fCurrSettings;
118 return true;
119 } else {
120 settings = NULL;
121 return false;
122 }
123 }
124
nextCase(const DataMap * & nextCase,UErrorCode & status)125 UBool RBTestData::nextCase(const DataMap *& nextCase, UErrorCode &status)
126 {
127 UErrorCode intStatus = U_ZERO_ERROR;
128 UResourceBundle *currCase = ures_getByIndex(fCases, fCurrentCase++, NULL, &intStatus);
129 if(U_SUCCESS(intStatus)) {
130 if(fCurrCase == NULL) {
131 fCurrCase = new RBDataMap(fHeaders, currCase, status);
132 } else {
133 ((RBDataMap *)fCurrCase)->init(fHeaders, currCase, status);
134 }
135 ures_close(currCase);
136 nextCase = fCurrCase;
137 return true;
138 } else {
139 nextCase = NULL;
140 return false;
141 }
142 }
143
144
145