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