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