// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
* Copyright (C) 2007-2011, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
*/

#ifndef _TIMEZONERULETEST_
#define _TIMEZONERULETEST_

#include "unicode/utypes.h"
#include "caltztst.h"

#if !UCONFIG_NO_FORMATTING

/**
 * Tests for TimeZoneRule, RuleBasedTimeZone and VTimeZone
 */
class TimeZoneRuleTest : public CalendarTimeZoneTest {
    // IntlTest override
    void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par);
public:
    void TestSimpleRuleBasedTimeZone(void);
    void TestHistoricalRuleBasedTimeZone(void);
    void TestOlsonTransition(void);
    void TestRBTZTransition(void);
    void TestHasEquivalentTransitions(void);
    void TestVTimeZoneRoundTrip(void);
    void TestVTimeZoneRoundTripPartial(void);
    void TestVTimeZoneSimpleWrite(void);
    void TestVTimeZoneHeaderProps(void);
    void TestGetSimpleRules(void);
    void TestTimeZoneRuleCoverage(void);
    void TestSimpleTimeZoneCoverage(void);
    void TestVTimeZoneCoverage(void);
    void TestVTimeZoneParse(void);
    void TestT6216(void);
    void TestT6669(void);
    void TestVTimeZoneWrapper(void);
    void TestT8943(void);

private:
    void verifyTransitions(BasicTimeZone& icutz, UDate start, UDate end);
    void compareTransitionsAscending(BasicTimeZone& z1, BasicTimeZone& z2,
        UDate start, UDate end, UBool inclusive);
    void compareTransitionsDescending(BasicTimeZone& z1, BasicTimeZone& z2,
        UDate start, UDate end, UBool inclusive);
    UDate getUTCMillis(int32_t year, int32_t month, int32_t dom,
        int32_t hour=0, int32_t min=0, int32_t sec=0, int32_t msec=0);
};

#endif /* #if !UCONFIG_NO_FORMATTING */
 
#endif // _TIMEZONERULETEST_
