12e5b6d6dSopenharmony_ci// © 2016 and later: Unicode, Inc. and others.
22e5b6d6dSopenharmony_ci// License & terms of use: http://www.unicode.org/copyright.html
32e5b6d6dSopenharmony_ci/********************************************************************
42e5b6d6dSopenharmony_ci * COPYRIGHT:
52e5b6d6dSopenharmony_ci * Copyright (c) 2008-2016 International Business Machines Corporation and
62e5b6d6dSopenharmony_ci * others. All Rights Reserved.
72e5b6d6dSopenharmony_ci ********************************************************************/
82e5b6d6dSopenharmony_ci
92e5b6d6dSopenharmony_ci#ifndef _INTLTESTDATEINTERVALFORMAT
102e5b6d6dSopenharmony_ci#define _INTLTESTDATEINTERVALFORMAT
112e5b6d6dSopenharmony_ci
122e5b6d6dSopenharmony_ci#include "unicode/utypes.h"
132e5b6d6dSopenharmony_ci#include "unicode/locid.h"
142e5b6d6dSopenharmony_ci
152e5b6d6dSopenharmony_ci#if !UCONFIG_NO_FORMATTING
162e5b6d6dSopenharmony_ci
172e5b6d6dSopenharmony_ci#include "intltest.h"
182e5b6d6dSopenharmony_ci#include "itformat.h"
192e5b6d6dSopenharmony_ci
202e5b6d6dSopenharmony_ciU_NAMESPACE_BEGIN
212e5b6d6dSopenharmony_ciclass FormattedDateInterval;
222e5b6d6dSopenharmony_ciU_NAMESPACE_END
232e5b6d6dSopenharmony_ci
242e5b6d6dSopenharmony_ci/**
252e5b6d6dSopenharmony_ci * Test basic functionality of various API functions
262e5b6d6dSopenharmony_ci **/
272e5b6d6dSopenharmony_ciclass DateIntervalFormatTest: public IntlTestWithFieldPosition {
282e5b6d6dSopenharmony_ci    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
292e5b6d6dSopenharmony_ci
302e5b6d6dSopenharmony_cipublic:
312e5b6d6dSopenharmony_ci    /**
322e5b6d6dSopenharmony_ci     * Performs tests on many API functions, see detailed comments in source code
332e5b6d6dSopenharmony_ci     **/
342e5b6d6dSopenharmony_ci    void testAPI();
352e5b6d6dSopenharmony_ci
362e5b6d6dSopenharmony_ci    /**
372e5b6d6dSopenharmony_ci     * Test formatting
382e5b6d6dSopenharmony_ci     */
392e5b6d6dSopenharmony_ci    void testFormat();
402e5b6d6dSopenharmony_ci
412e5b6d6dSopenharmony_ci
422e5b6d6dSopenharmony_ci    /**
432e5b6d6dSopenharmony_ci     * Test handling of hour and day period metacharacters
442e5b6d6dSopenharmony_ci     */
452e5b6d6dSopenharmony_ci    void testHourMetacharacters();
462e5b6d6dSopenharmony_ci
472e5b6d6dSopenharmony_ci    void testFormatMillisecond();
482e5b6d6dSopenharmony_ci
492e5b6d6dSopenharmony_ci    /**
502e5b6d6dSopenharmony_ci     * Test formatting using user defined DateIntervalInfo
512e5b6d6dSopenharmony_ci     */
522e5b6d6dSopenharmony_ci    void testFormatUserDII();
532e5b6d6dSopenharmony_ci
542e5b6d6dSopenharmony_ci    /*
552e5b6d6dSopenharmony_ci     * Test format using UDisplayContext
562e5b6d6dSopenharmony_ci     */
572e5b6d6dSopenharmony_ci    void testContext();
582e5b6d6dSopenharmony_ci
592e5b6d6dSopenharmony_ci    /**
602e5b6d6dSopenharmony_ci     * Test for no unwanted side effects when setting
612e5b6d6dSopenharmony_ci     * interval patterns.
622e5b6d6dSopenharmony_ci     */
632e5b6d6dSopenharmony_ci    void testSetIntervalPatternNoSideEffect();
642e5b6d6dSopenharmony_ci
652e5b6d6dSopenharmony_ci    /**
662e5b6d6dSopenharmony_ci     * Tests different year formats.
672e5b6d6dSopenharmony_ci     */
682e5b6d6dSopenharmony_ci    void testYearFormats();
692e5b6d6dSopenharmony_ci
702e5b6d6dSopenharmony_ci    /**
712e5b6d6dSopenharmony_ci     * Stress test -- stress test formatting on 40 locales
722e5b6d6dSopenharmony_ci     */
732e5b6d6dSopenharmony_ci    void testStress();
742e5b6d6dSopenharmony_ci
752e5b6d6dSopenharmony_ci    void testTicket11583_2();
762e5b6d6dSopenharmony_ci
772e5b6d6dSopenharmony_ci    void testTicket11985();
782e5b6d6dSopenharmony_ci
792e5b6d6dSopenharmony_ci    void testTicket11669();
802e5b6d6dSopenharmony_ci    void threadFunc11669(int32_t threadNum);
812e5b6d6dSopenharmony_ci
822e5b6d6dSopenharmony_ci    void testTicket12065();
832e5b6d6dSopenharmony_ci
842e5b6d6dSopenharmony_ci    void testFormattedDateInterval();
852e5b6d6dSopenharmony_ci    void testCreateInstanceForAllLocales();
862e5b6d6dSopenharmony_ci
872e5b6d6dSopenharmony_ci    void testTicket20707();
882e5b6d6dSopenharmony_ci    void testTicket21222GregorianEraDiff();
892e5b6d6dSopenharmony_ci    void testTicket21222ROCEraDiff();
902e5b6d6dSopenharmony_ci    void testTicket21222JapaneseEraDiff();
912e5b6d6dSopenharmony_ci
922e5b6d6dSopenharmony_ci    void testTicket21939();
932e5b6d6dSopenharmony_ci
942e5b6d6dSopenharmony_ciprivate:
952e5b6d6dSopenharmony_ci    /**
962e5b6d6dSopenharmony_ci     * Test formatting against expected result
972e5b6d6dSopenharmony_ci     */
982e5b6d6dSopenharmony_ci    void expect(const char** data, int32_t data_length);
992e5b6d6dSopenharmony_ci
1002e5b6d6dSopenharmony_ci    /**
1012e5b6d6dSopenharmony_ci     * Test formatting against expected result using user defined
1022e5b6d6dSopenharmony_ci     * DateIntervalInfo
1032e5b6d6dSopenharmony_ci     */
1042e5b6d6dSopenharmony_ci    void expectUserDII(const char** data, int32_t data_length);
1052e5b6d6dSopenharmony_ci
1062e5b6d6dSopenharmony_ci    /**
1072e5b6d6dSopenharmony_ci     * Stress test formatting
1082e5b6d6dSopenharmony_ci     */
1092e5b6d6dSopenharmony_ci    void stress(const char** data, int32_t data_length, const Locale& loc,
1102e5b6d6dSopenharmony_ci                const char* locName);
1112e5b6d6dSopenharmony_ci
1122e5b6d6dSopenharmony_ci    void getCategoryAndField(
1132e5b6d6dSopenharmony_ci        const FormattedDateInterval& formatted,
1142e5b6d6dSopenharmony_ci        std::vector<int32_t>& categories,
1152e5b6d6dSopenharmony_ci        std::vector<int32_t>& fields,
1162e5b6d6dSopenharmony_ci        IcuTestErrorCode& status);
1172e5b6d6dSopenharmony_ci
1182e5b6d6dSopenharmony_ci    void verifyCategoryAndField(
1192e5b6d6dSopenharmony_ci        const FormattedDateInterval& formatted,
1202e5b6d6dSopenharmony_ci        const std::vector<int32_t>& categories,
1212e5b6d6dSopenharmony_ci        const std::vector<int32_t>& fields,
1222e5b6d6dSopenharmony_ci        IcuTestErrorCode& status);
1232e5b6d6dSopenharmony_ci
1242e5b6d6dSopenharmony_ci};
1252e5b6d6dSopenharmony_ci
1262e5b6d6dSopenharmony_ci#endif /* #if !UCONFIG_NO_FORMATTING */
1272e5b6d6dSopenharmony_ci
1282e5b6d6dSopenharmony_ci#endif
129