]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | /******************************************************************** |
2 | * COPYRIGHT: | |
73c04bcf | 3 | * Copyright (c) 2002-2005, International Business Machines Corporation and |
b75a7d8f A |
4 | * others. All Rights Reserved. |
5 | ********************************************************************/ | |
6 | ||
7 | /* Created by weiv 05/09/2002 */ | |
8 | ||
374ca955 | 9 | #include "unicode/testdata.h" |
b75a7d8f | 10 | |
73c04bcf A |
11 | |
12 | TestData::TestData(const char* testName) | |
13 | : name(testName), | |
b75a7d8f A |
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 | ||
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 | ||
37 | const char * TestData::getName() const | |
38 | { | |
39 | return name; | |
40 | } | |
41 | ||
42 | ||
43 | ||
73c04bcf A |
44 | RBTestData::RBTestData(const char* testName) |
45 | : TestData(testName), | |
b75a7d8f A |
46 | fData(NULL), |
47 | fHeaders(NULL), | |
48 | fSettings(NULL), | |
49 | fCases(NULL) | |
50 | { | |
51 | } | |
52 | ||
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 | ||
83 | RBTestData::~RBTestData() | |
84 | { | |
85 | ures_close(fData); | |
86 | ures_close(fHeaders); | |
87 | ures_close(fSettings); | |
88 | ures_close(fCases); | |
89 | } | |
90 | ||
91 | 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 | ||
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 | ||
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 | ||
73c04bcf | 142 |