/******************************************************************** * COPYRIGHT: * Copyright (c) 2002, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* Created by weiv 05/09/2002 */ /* Base class for data driven tests */ #ifndef INTLTST_TESTDATA #define INTLTST_TESTDATA #include "tstdtmod.h" #include "datamap.h" /** This is the class that abstracts one of the tests in a data file * It is usually instantiated using TestDataModule::CreateTestData method * This class provides two important methods: nextSettings and nextCase * Usually, one walks through all settings and executes all cases for * each setting. Each call to nextSettings resets the cases iterator. * Individual test cases have to have the same number of fields as the * number of entries in headers. Default headers can be specified in * the TestDataModule info section. The default headers will be overriden * by per-test headers. * Example: * DataMap *settings = NULL; * DataMap *cases = NULL; * while(nextSettings(settings, status)) { * // set settings for the subtest * while(nextCase(cases, status) { * // process testcase * } * } */ class TestData { const char* name; protected: DataMap *fInfo; DataMap *fCurrSettings; DataMap *fCurrCase; int32_t fSettingsSize; int32_t fCasesSize; int32_t fCurrentSettings; int32_t fCurrentCase; /** constructor - don't use */ TestData(const char* name); public: virtual ~TestData(); const char* getName() const; /** Get a pointer to an object owned DataMap that contains more information on this * TestData object. * Usual fields is "Description". * @param info pass in a const DataMap pointer. If no info, it will be set to NULL */ virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const = 0; /** Gets the next set of settings for the test. Resets the cases iterator. * DataMap is owned by the object and should not be deleted. * @param settings a DataMap pointer provided by the user. Will be NULL if * no more settings are available. * @param status for reporting unexpected errors. * @return A boolean, TRUE if there are settings, FALSE if there is no more * settings. */ virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status) = 0; /** Gets the next test case. * DataMap is owned by the object and should not be deleted. * @param data a DataMap pointer provided by the user. Will be NULL if * no more cases are available. * @param status for reporting unexpected errors. * @return A boolean, TRUE if there are cases, FALSE if there is no more * cases. */ virtual UBool nextCase(const DataMap *& data, UErrorCode &status) = 0; }; // implementation of TestData that uses resource bundles class RBTestData : public TestData { UResourceBundle *fData; UResourceBundle *fHeaders; UResourceBundle *fSettings; UResourceBundle *fCases; public: RBTestData(const char* name); RBTestData(UResourceBundle *data, UResourceBundle *headers, UErrorCode& status); private: // RBTestData() {}; // RBTestData(const RBTestData& original) {}; RBTestData& operator=(const RBTestData& /*original*/) {return *this;}; public: virtual ~RBTestData(); virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const; virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status); virtual UBool nextCase(const DataMap *& nextCase, UErrorCode &status); }; #endif