Imported Upstream version 58.1
[platform/upstream/icu.git] / source / tools / ctestfw / unicode / testdata.h
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-2006, International Business Machines Corporation and
6  * others. All Rights Reserved.
7  ********************************************************************/
8
9 /* Created by weiv 05/09/2002 */
10
11 /* Base class for data driven tests */
12
13 #ifndef U_TESTFW_TESTDATA
14 #define U_TESTFW_TESTDATA
15
16 #include "unicode/tstdtmod.h"
17 #include "unicode/datamap.h"
18
19
20  /** This is the class that abstracts one of the tests in a data file 
21   *  It is usually instantiated using TestDataModule::CreateTestData method 
22   *  This class provides two important methods: nextSettings and nextCase 
23   *  Usually, one walks through all settings and executes all cases for 
24   *  each setting. Each call to nextSettings resets the cases iterator.
25   *  Individual test cases have to have the same number of fields as the
26   *  number of entries in headers. Default headers can be specified in 
27   *  the TestDataModule info section. The default headers will be overriden
28   *  by per-test headers. 
29   *  Example:                                             
30   *  DataMap *settings = NULL;                            
31   *  DataMap *cases = NULL;                               
32   *  while(nextSettings(settings, status)) {              
33   *    // set settings for the subtest                    
34   *    while(nextCase(cases, status) {                    
35   *      // process testcase                              
36   *    }                                                  
37   *   }                                                   
38   */
39
40 class T_CTEST_EXPORT_API TestData {
41   const char* name;
42
43 protected:
44   DataMap *fInfo;
45   DataMap *fCurrSettings;
46   DataMap *fCurrCase;
47   int32_t fSettingsSize;
48   int32_t fCasesSize;
49   int32_t fCurrentSettings;
50   int32_t fCurrentCase;
51   /** constructor - don't use */
52   TestData(const char* name);
53
54 public:
55   virtual ~TestData();
56
57   const char* getName() const;
58
59   /** Get a pointer to an object owned DataMap that contains more information on this
60    *  TestData object.
61    *  Usual fields is "Description".                                   
62    *  @param info pass in a const DataMap pointer. If no info, it will be set to NULL
63    */
64   virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const = 0;
65
66   /** Gets the next set of settings for the test. Resets the cases iterator. 
67    *  DataMap is owned by the object and should not be deleted. 
68    *  @param settings a DataMap pointer provided by the user. Will be NULL if 
69    *                  no more settings are available.
70    *  @param status for reporting unexpected errors.
71    *  @return A boolean, TRUE if there are settings, FALSE if there is no more 
72    *          settings. 
73    */
74   virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status) = 0;
75
76   /** Gets the next test case. 
77    *  DataMap is owned by the object and should not be deleted. 
78    *  @param data a DataMap pointer provided by the user. Will be NULL if 
79    *                  no more cases are available.
80    *  @param status for reporting unexpected errors.
81    *  @return A boolean, TRUE if there are cases, FALSE if there is no more 
82    *          cases. 
83    */
84   virtual UBool nextCase(const DataMap *& data, UErrorCode &status) = 0;
85 };
86
87 // implementation of TestData that uses resource bundles
88
89 class T_CTEST_EXPORT_API RBTestData : public TestData {
90   UResourceBundle *fData;
91   UResourceBundle *fHeaders;
92   UResourceBundle *fSettings;
93   UResourceBundle *fCases;
94
95 public:
96   RBTestData(const char* name);
97   RBTestData(UResourceBundle *data, UResourceBundle *headers, UErrorCode& status);
98 private:
99 //  RBTestData() {};
100 //  RBTestData(const RBTestData& original) {};
101   RBTestData& operator=(const RBTestData& /*original*/);
102
103 public:
104   virtual ~RBTestData();
105
106   virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const;
107
108   virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status);
109   virtual UBool nextCase(const DataMap *& nextCase, UErrorCode &status);
110 };
111
112 #endif
113