tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

testdata.cpp (3243B)


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