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