// Copyright (C) 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_
