intl/icu/source/tools/ctestfw/testdata.cpp

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /********************************************************************
     2  * COPYRIGHT: 
     3  * Copyright (c) 2002-2005, International Business Machines Corporation and
     4  * others. All Rights Reserved.
     5  ********************************************************************/
     7 /* Created by weiv 05/09/2002 */
     9 #include "unicode/testdata.h"
    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)
    22 {
    23 }
    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 }
    37 const char * TestData::getName() const
    38 {
    39   return name;
    40 }
    44 RBTestData::RBTestData(const char* testName)
    45 : TestData(testName),
    46 fData(NULL),
    47 fHeaders(NULL),
    48 fSettings(NULL),
    49 fCases(NULL)
    50 {
    51 }
    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);
    79   ures_close(info);
    80 }
    83 RBTestData::~RBTestData()
    84 {
    85   ures_close(fData);
    86   ures_close(fHeaders);
    87   ures_close(fSettings);
    88   ures_close(fCases);
    89 }
    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 }
   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 }
   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 }

mercurial