Home | History | Annotate | Download | only in ctestfw
      1 /********************************************************************
      2  * COPYRIGHT:
      3  * Copyright (c) 2002-2005, International Business Machines Corporation and
      4  * others. All Rights Reserved.
      5  ********************************************************************/
      6 
      7 /* Created by weiv 05/09/2002 */
      8 
      9 #include "unicode/testdata.h"
     10 
     11 
     12 TestData::TestData(const char* testName)
     13 : name(testName),
     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 
     44 RBTestData::RBTestData(const char* testName)
     45 : TestData(testName),
     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 
    142 
    143