18086eac30b939adde43080f9026bbd54cb156fadMichael Wright
28086eac30b939adde43080f9026bbd54cb156fadMichael Wright/********************************************************************
38086eac30b939adde43080f9026bbd54cb156fadMichael Wright * Copyright (c) 1997-2011, International Business Machines
48086eac30b939adde43080f9026bbd54cb156fadMichael Wright * Corporation and others. All Rights Reserved.
58086eac30b939adde43080f9026bbd54cb156fadMichael Wright ********************************************************************/
68086eac30b939adde43080f9026bbd54cb156fadMichael Wright
78086eac30b939adde43080f9026bbd54cb156fadMichael Wright#ifndef __TimeZoneTest__
88086eac30b939adde43080f9026bbd54cb156fadMichael Wright#define __TimeZoneTest__
98086eac30b939adde43080f9026bbd54cb156fadMichael Wright
108086eac30b939adde43080f9026bbd54cb156fadMichael Wright#include "unicode/utypes.h"
118086eac30b939adde43080f9026bbd54cb156fadMichael Wright
128086eac30b939adde43080f9026bbd54cb156fadMichael Wright#if !UCONFIG_NO_FORMATTING
138086eac30b939adde43080f9026bbd54cb156fadMichael Wright
148086eac30b939adde43080f9026bbd54cb156fadMichael Wright#include "unicode/simpletz.h"
158086eac30b939adde43080f9026bbd54cb156fadMichael Wright#include "caltztst.h"
168086eac30b939adde43080f9026bbd54cb156fadMichael Wright
178086eac30b939adde43080f9026bbd54cb156fadMichael Wright/**
188086eac30b939adde43080f9026bbd54cb156fadMichael Wright * Various tests for TimeZone
198086eac30b939adde43080f9026bbd54cb156fadMichael Wright **/
208086eac30b939adde43080f9026bbd54cb156fadMichael Wrightclass TimeZoneTest: public CalendarTimeZoneTest {
218086eac30b939adde43080f9026bbd54cb156fadMichael Wright    // IntlTest override
228086eac30b939adde43080f9026bbd54cb156fadMichael Wright    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
238086eac30b939adde43080f9026bbd54cb156fadMichael Wrightpublic: // package
248086eac30b939adde43080f9026bbd54cb156fadMichael Wright    static const int32_t millisPerHour;
258086eac30b939adde43080f9026bbd54cb156fadMichael Wright
268086eac30b939adde43080f9026bbd54cb156fadMichael Wrightpublic:
278086eac30b939adde43080f9026bbd54cb156fadMichael Wright    /**
288086eac30b939adde43080f9026bbd54cb156fadMichael Wright     * Test the offset of the PRT timezone.
298086eac30b939adde43080f9026bbd54cb156fadMichael Wright     */
308086eac30b939adde43080f9026bbd54cb156fadMichael Wright    virtual void TestPRTOffset(void);
318086eac30b939adde43080f9026bbd54cb156fadMichael Wright    /**
328086eac30b939adde43080f9026bbd54cb156fadMichael Wright     * Regress a specific bug with a sequence of API calls.
338086eac30b939adde43080f9026bbd54cb156fadMichael Wright     */
348086eac30b939adde43080f9026bbd54cb156fadMichael Wright    virtual void TestVariousAPI518(void);
358086eac30b939adde43080f9026bbd54cb156fadMichael Wright    /**
368086eac30b939adde43080f9026bbd54cb156fadMichael Wright     * Test the call which retrieves the available IDs.
378086eac30b939adde43080f9026bbd54cb156fadMichael Wright     */
388086eac30b939adde43080f9026bbd54cb156fadMichael Wright    virtual void TestGetAvailableIDs913(void);
398086eac30b939adde43080f9026bbd54cb156fadMichael Wright
408086eac30b939adde43080f9026bbd54cb156fadMichael Wright    virtual void TestGetAvailableIDsNew(void);
418086eac30b939adde43080f9026bbd54cb156fadMichael Wright
428086eac30b939adde43080f9026bbd54cb156fadMichael Wright    /**
43     * Generic API testing for API coverage.
44     */
45    virtual void TestGenericAPI(void);
46    /**
47     * Test the setStartRule/setEndRule API calls.
48     */
49    virtual void TestRuleAPI(void);
50
51    void findTransition(const TimeZone& tz,
52                        UDate min, UDate max);
53
54   /**
55     * subtest used by TestRuleAPI
56     **/
57    void testUsingBinarySearch(const TimeZone& tz,
58                               UDate min, UDate max,
59                               UDate expectedBoundary);
60
61
62    /**
63     *  Test short zone IDs for compliance
64     */
65    virtual void TestShortZoneIDs(void);
66
67
68    /**
69     *  Test parsing custom zones
70     */
71    virtual void TestCustomParse(void);
72
73    /**
74     *  Test new getDisplayName() API
75     */
76    virtual void TestDisplayName(void);
77
78    void TestDSTSavings(void);
79    void TestAlternateRules(void);
80
81    void TestCountries(void);
82
83    void TestHistorical(void);
84
85    void TestEquivalentIDs(void);
86
87    void TestAliasedNames(void);
88
89    void TestFractionalDST(void);
90
91    void TestFebruary(void);
92
93    void TestCanonicalID(void);
94
95    virtual void TestDisplayNamesMeta();
96
97    void TestGetRegion(void);
98
99    static const UDate INTERVAL;
100
101private:
102    // internal functions
103    static UnicodeString& formatOffset(int32_t offset, UnicodeString& rv);
104    static UnicodeString& formatTZID(int32_t offset, UnicodeString& rv);
105
106    // Some test case data is current date/tzdata version sensitive and producing errors
107    // when year/rule are changed.
108    static const int32_t REFERENCE_YEAR;
109    static const char *REFERENCE_DATA_VERSION;
110
111    void checkContainsAll(StringEnumeration *s1, const char *name1,
112        StringEnumeration *s2, const char *name2);
113};
114
115#endif /* #if !UCONFIG_NO_FORMATTING */
116
117#endif // __TimeZoneTest__
118