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