/********************************************************************
 * COPYRIGHT: 
 * Copyright (c) 2007, International Business Machines Corporation and
 * others. All Rights Reserved.
 ********************************************************************/

/**
 * DataDrivenFormatTest is a test class that uses data stored in resource
 * bundles to perform testing. For more details on data structure, see
 * source/test/testdata/calendar.txt
 */

#ifndef _INTLTESTDATADRIVENFORMAT
#define _INTLTESTDATADRIVENFORMAT

#include "unicode/utypes.h"

#if !UCONFIG_NO_FORMATTING

#include "tsdate.h"
#include "uvector.h"
#include "unicode/format.h"
//#include "fldset.h"

class TestDataModule;
class TestData;
class DataMap;
//class DateTimeStyle;

class DataDrivenFormatTest : public IntlTest {
    void runIndexedTest(int32_t index, UBool exec, const char* &name,
            char* par = NULL);
public:
    DataDrivenFormatTest();
    virtual ~DataDrivenFormatTest();
protected:

    void DataDrivenTest(char *par);
    void processTest(TestData *testData);
private:
    void testConvertDate(TestData *testData, const DataMap *settings, UBool fmt);
//    void testOps(TestData *testData, const DataMap *settings);
//    void testConvert(int32_t n, const FormatFieldsSet &fromSet,
//            Format *fromCal, const FormatFieldsSet &toSet, Format *toCal,
//            UBool fwd);
private:
    TestDataModule *driver;
};

#endif /* #if !UCONFIG_NO_COLLATION */

#endif
