185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/********************************************************************
2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 2008-2011, International Business Machines Corporation and
385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * others. All Rights Reserved.
485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ********************************************************************/
585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/utypes.h"
785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if !UCONFIG_NO_FORMATTING
985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
1085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/tmunit.h"
1185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/tmutamt.h"
1285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/tmutfmt.h"
1385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "tufmtts.h"
1427f654740f2a26ad62a5c155af9199af9e69b889claireho#include "unicode/ustring.h"
1585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
1685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//TODO: put as compilation flag
1785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//#define TUFMTTS_DEBUG 1
1885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
1985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TUFMTTS_DEBUG
2085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include <iostream>
2185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif
2285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
2385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid TimeUnitTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) {
2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (exec) logln("TestSuite TimeUnitTest");
2585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    switch (index) {
2685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(0, testBasic);
2785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(1, testAPI);
2827f654740f2a26ad62a5c155af9199af9e69b889claireho        TESTCASE(2, testGreek);
2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        default: name = ""; break;
3085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
3185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
3285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/**
3485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Test basic
3585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */
3685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid TimeUnitTest::testBasic() {
3727f654740f2a26ad62a5c155af9199af9e69b889claireho    const char* locales[] = {"en", "sl", "fr", "zh", "ar", "ru", "zh_Hant", "pa"};
3885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for ( unsigned int locIndex = 0;
3985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho          locIndex < sizeof(locales)/sizeof(locales[0]);
4085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho          ++locIndex ) {
4185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UErrorCode status = U_ZERO_ERROR;
4285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Locale loc(locales[locIndex]);
4385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TimeUnitFormat** formats = new TimeUnitFormat*[2];
44b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        formats[UTMUTFMT_FULL_STYLE] = new TimeUnitFormat(loc, status);
4585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (!assertSuccess("TimeUnitFormat(full)", status, TRUE)) return;
46b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        formats[UTMUTFMT_ABBREVIATED_STYLE] = new TimeUnitFormat(loc, UTMUTFMT_ABBREVIATED_STYLE, status);
4785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (!assertSuccess("TimeUnitFormat(short)", status)) return;
4885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TUFMTTS_DEBUG
4985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        std::cout << "locale: " << locales[locIndex] << "\n";
5085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif
51b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int style = UTMUTFMT_FULL_STYLE;
52b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho             style <= UTMUTFMT_ABBREVIATED_STYLE;
5385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho             ++style) {
5485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho          for (TimeUnit::UTimeUnitFields j = TimeUnit::UTIMEUNIT_YEAR;
5585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho             j < TimeUnit::UTIMEUNIT_FIELD_COUNT;
5685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho             j = (TimeUnit::UTimeUnitFields)(j+1)) {
5785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TUFMTTS_DEBUG
5885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            std::cout << "time unit: " << j << "\n";
5985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif
6085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            double tests[] = {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 5, 10, 100, 101.35};
6185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            for (unsigned int i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) {
6285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TUFMTTS_DEBUG
6385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                std::cout << "number: " << tests[i] << "\n";
6485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif
6585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                TimeUnitAmount* source = new TimeUnitAmount(tests[i], j, status);
6685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                if (!assertSuccess("TimeUnitAmount()", status)) return;
6785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                UnicodeString formatted;
6885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                Formattable formattable;
6985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                formattable.adoptObject(source);
7085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                formatted = ((Format*)formats[style])->format(formattable, formatted, status);
7185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                if (!assertSuccess("format()", status)) return;
7285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TUFMTTS_DEBUG
7385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                char formatResult[1000];
7485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                formatted.extract(0, formatted.length(), formatResult, "UTF-8");
7585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                std::cout << "format result: " << formatResult << "\n";
7685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif
7785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                Formattable result;
7885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                ((Format*)formats[style])->parseObject(formatted, result, status);
7985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                if (!assertSuccess("parseObject()", status)) return;
8085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                if (result != formattable) {
8185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                    dataerrln("No round trip: ");
8285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                }
8385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                // other style parsing
8485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                Formattable result_1;
8585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                ((Format*)formats[1-style])->parseObject(formatted, result_1, status);
8685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                if (!assertSuccess("parseObject()", status)) return;
8785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                if (result_1 != formattable) {
8885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                    dataerrln("No round trip: ");
8985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                }
9085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
9185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho          }
9285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
93b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete formats[UTMUTFMT_FULL_STYLE];
94b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete formats[UTMUTFMT_ABBREVIATED_STYLE];
9585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete[] formats;
9685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
9785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
9885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
9985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
10085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid TimeUnitTest::testAPI() {
10185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //================= TimeUnit =================
10285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
10385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
10485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnit* tmunit = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_YEAR, status);
10585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnit::createInstance", status)) return;
10685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
10785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnit* another = (TimeUnit*)tmunit->clone();
10885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnit third(*tmunit);
10985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnit fourth = third;
11085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
11185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("orig and clone are equal", (*tmunit == *another));
11285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("copied and assigned are equal", (third == fourth));
11385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
11485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnit* tmunit_m = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_MONTH, status);
11585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("year != month", (*tmunit != *tmunit_m));
11685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
11785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnit::UTimeUnitFields field = tmunit_m->getTimeUnitField();
11885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("field of month time unit is month", (field == TimeUnit::UTIMEUNIT_MONTH));
11985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
12085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tmunit;
12185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete another;
12285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tmunit_m;
12385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //
12485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //================= TimeUnitAmount =================
12585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
12685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Formattable formattable((int32_t)2);
12785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount tma_long(formattable, TimeUnit::UTIMEUNIT_DAY, status);
12885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
12985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
13085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    formattable.setDouble(2);
13185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount tma_double(formattable, TimeUnit::UTIMEUNIT_DAY, status);
13285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
13385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
13485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    formattable.setDouble(3);
13585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount tma_double_3(formattable, TimeUnit::UTIMEUNIT_DAY, status);
13685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
13785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
13885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount tma(2, TimeUnit::UTIMEUNIT_DAY, status);
13985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitAmount(number...)", status)) return;
14085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
14185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount tma_h(2, TimeUnit::UTIMEUNIT_HOUR, status);
14285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitAmount(number...)", status)) return;
14385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
14485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount second(tma);
14585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount third_tma = tma;
14685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitAmount* fourth_tma = (TimeUnitAmount*)tma.clone();
14785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
14885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("orig and copy are equal", (second == tma));
14985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("clone and assigned are equal", (third_tma == *fourth_tma));
15085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("different if number diff", (tma_double != tma_double_3));
15185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("different if number type diff", (tma_double != tma_long));
15285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("different if time unit diff", (tma != tma_h));
15385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("same even different constructor", (tma_double == tma));
15485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
15585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("getTimeUnitField", (tma.getTimeUnitField() == TimeUnit::UTIMEUNIT_DAY));
15685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fourth_tma;
15785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //
15885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //================= TimeUnitFormat =================
15985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //
16085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitFormat* tmf_en = new TimeUnitFormat(Locale("en"), status);
16185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitFormat(en...)", status, TRUE)) return;
16285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitFormat tmf_fr(Locale("fr"), status);
16385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitFormat(fr...)", status)) return;
16485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
16585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("TimeUnitFormat: en and fr diff", (*tmf_en != tmf_fr));
16685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
16785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitFormat tmf_assign = *tmf_en;
16885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("TimeUnitFormat: orig and assign are equal", (*tmf_en == tmf_assign));
16985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
17085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitFormat tmf_copy(tmf_fr);
17185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("TimeUnitFormat: orig and copy are equal", (tmf_fr == tmf_copy));
17285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
17385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitFormat* tmf_clone = (TimeUnitFormat*)tmf_en->clone();
17485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("TimeUnitFormat: orig and clone are equal", (*tmf_en == *tmf_clone));
17585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tmf_clone;
17685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
17785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    tmf_en->setLocale(Locale("fr"), status);
17885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("setLocale(fr...)", status)) return;
17985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
18085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    NumberFormat* numberFmt = NumberFormat::createInstance(
18185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                                 Locale("fr"), status);
18285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("NumberFormat::createInstance()", status)) return;
18385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    tmf_en->setNumberFormat(*numberFmt, status);
18485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("setNumberFormat(en...)", status)) return;
18585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    assertTrue("TimeUnitFormat: setLocale", (*tmf_en == tmf_fr));
18685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
18785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tmf_en;
18885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
189b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    TimeUnitFormat* en_long = new TimeUnitFormat(Locale("en"), UTMUTFMT_FULL_STYLE, status);
19085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete en_long;
19285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
193b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    TimeUnitFormat* en_short = new TimeUnitFormat(Locale("en"), UTMUTFMT_ABBREVIATED_STYLE, status);
19485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
19585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete en_short;
19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeUnitFormat* format = new TimeUnitFormat(status);
19885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    format->setLocale(Locale("zh"), status);
19985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    format->setNumberFormat(*numberFmt, status);
20085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
20185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete numberFmt;
20285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete format;
20385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
20485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
20527f654740f2a26ad62a5c155af9199af9e69b889claireho/* @bug 7902
20627f654740f2a26ad62a5c155af9199af9e69b889claireho * Tests for Greek Language.
20727f654740f2a26ad62a5c155af9199af9e69b889claireho * This tests that requests for short unit names correctly fall back
20827f654740f2a26ad62a5c155af9199af9e69b889claireho * to long unit names for a locale where the locale data does not
20927f654740f2a26ad62a5c155af9199af9e69b889claireho * provide short unit names. As of CLDR 1.9, Greek is one such language.
21027f654740f2a26ad62a5c155af9199af9e69b889claireho */
21127f654740f2a26ad62a5c155af9199af9e69b889clairehovoid TimeUnitTest::testGreek() {
21227f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
21327f654740f2a26ad62a5c155af9199af9e69b889claireho
21427f654740f2a26ad62a5c155af9199af9e69b889claireho    const char* locales[] = {"el-GR", "el"};
21527f654740f2a26ad62a5c155af9199af9e69b889claireho    TimeUnit::UTimeUnitFields tunits[] = {TimeUnit::UTIMEUNIT_SECOND, TimeUnit::UTIMEUNIT_MINUTE, TimeUnit::UTIMEUNIT_HOUR, TimeUnit::UTIMEUNIT_DAY, TimeUnit::UTIMEUNIT_MONTH, TimeUnit::UTIMEUNIT_YEAR};
216b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UTimeUnitFormatStyle styles[] = {UTMUTFMT_FULL_STYLE, UTMUTFMT_ABBREVIATED_STYLE};
21727f654740f2a26ad62a5c155af9199af9e69b889claireho    const int numbers[] = {1, 7};
21827f654740f2a26ad62a5c155af9199af9e69b889claireho
21927f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar oneSecond[] = {0x0031, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03bf, 0};
22027f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar oneMinute[] = {0x0031, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03cc, 0};
22127f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar oneHour[] = {0x0031, 0x0020, 0x03ce, 0x03c1, 0x03b1, 0};
22227f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar oneDay[] = {0x0031, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0x03b1, 0};
22327f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar oneMonth[] = {0x0031, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b1, 0x03c2, 0};
22427f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar oneYear[] = {0x0031, 0x0020, 0x03ad, 0x03c4, 0x03bf, 0x03c2, 0};
22527f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar sevenSeconds[] = {0x0037, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03b1, 0};
22627f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar sevenMinutes[] = {0x0037, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03ac, 0};
22727f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar sevenHours[] = {0x0037, 0x0020, 0x03ce, 0x03c1, 0x03b5, 0x03c2, 0};
22827f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar sevenDays[] = {0x0037, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0x03b5, 0x03c2, 0};
22927f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar sevenMonths[] = {0x0037, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b5, 0x3c2, 0};
23027f654740f2a26ad62a5c155af9199af9e69b889claireho    const UChar sevenYears[] = {0x0037, 0x0020, 0x03ad, 0x03c4, 0x03b7, 0};
23127f654740f2a26ad62a5c155af9199af9e69b889claireho
23227f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString oneSecondStr(oneSecond);
23327f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString oneMinuteStr(oneMinute);
23427f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString oneHourStr(oneHour);
23527f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString oneDayStr(oneDay);
23627f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString oneMonthStr(oneMonth);
23727f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString oneYearStr(oneYear);
23827f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString sevenSecondsStr(sevenSeconds);
23927f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString sevenMinutesStr(sevenMinutes);
24027f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString sevenHoursStr(sevenHours);
24127f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString sevenDaysStr(sevenDays);
24227f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString sevenMonthsStr(sevenMonths);
24327f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString sevenYearsStr(sevenYears);
24427f654740f2a26ad62a5c155af9199af9e69b889claireho
24527f654740f2a26ad62a5c155af9199af9e69b889claireho    const UnicodeString expected[] = {oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
24627f654740f2a26ad62a5c155af9199af9e69b889claireho                              oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
24727f654740f2a26ad62a5c155af9199af9e69b889claireho                              sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr,
24827f654740f2a26ad62a5c155af9199af9e69b889claireho                              sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr,
24927f654740f2a26ad62a5c155af9199af9e69b889claireho                              oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
25027f654740f2a26ad62a5c155af9199af9e69b889claireho                              oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
25127f654740f2a26ad62a5c155af9199af9e69b889claireho                              sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr,
25227f654740f2a26ad62a5c155af9199af9e69b889claireho                              sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr};
25327f654740f2a26ad62a5c155af9199af9e69b889claireho
25427f654740f2a26ad62a5c155af9199af9e69b889claireho    int counter = 0;
25527f654740f2a26ad62a5c155af9199af9e69b889claireho    for ( unsigned int locIndex = 0;
25627f654740f2a26ad62a5c155af9199af9e69b889claireho        locIndex < sizeof(locales)/sizeof(locales[0]);
25727f654740f2a26ad62a5c155af9199af9e69b889claireho        ++locIndex ) {
25827f654740f2a26ad62a5c155af9199af9e69b889claireho
25927f654740f2a26ad62a5c155af9199af9e69b889claireho        Locale l = Locale::createFromName(locales[locIndex]);
26027f654740f2a26ad62a5c155af9199af9e69b889claireho
26127f654740f2a26ad62a5c155af9199af9e69b889claireho        for ( unsigned int numberIndex = 0;
26227f654740f2a26ad62a5c155af9199af9e69b889claireho            numberIndex < sizeof(numbers)/sizeof(int);
26327f654740f2a26ad62a5c155af9199af9e69b889claireho            ++numberIndex ) {
26427f654740f2a26ad62a5c155af9199af9e69b889claireho
26527f654740f2a26ad62a5c155af9199af9e69b889claireho            for ( unsigned int styleIndex = 0;
26627f654740f2a26ad62a5c155af9199af9e69b889claireho                styleIndex < sizeof(styles)/sizeof(styles[0]);
26727f654740f2a26ad62a5c155af9199af9e69b889claireho                ++styleIndex ) {
26827f654740f2a26ad62a5c155af9199af9e69b889claireho
26927f654740f2a26ad62a5c155af9199af9e69b889claireho                for ( unsigned int unitIndex = 0;
27027f654740f2a26ad62a5c155af9199af9e69b889claireho                    unitIndex < sizeof(tunits)/sizeof(tunits[0]);
27127f654740f2a26ad62a5c155af9199af9e69b889claireho                    ++unitIndex ) {
27227f654740f2a26ad62a5c155af9199af9e69b889claireho
27327f654740f2a26ad62a5c155af9199af9e69b889claireho                    TimeUnitAmount *tamt = new TimeUnitAmount(numbers[numberIndex], tunits[unitIndex], status);
27427f654740f2a26ad62a5c155af9199af9e69b889claireho                    if (U_FAILURE(status)) {
27527f654740f2a26ad62a5c155af9199af9e69b889claireho                        dataerrln("generating TimeUnitAmount Object failed.");
27627f654740f2a26ad62a5c155af9199af9e69b889claireho#ifdef TUFMTTS_DEBUG
27727f654740f2a26ad62a5c155af9199af9e69b889claireho                        std::cout << "Failed to get TimeUnitAmount for " << tunits[unitIndex] << "\n";
27827f654740f2a26ad62a5c155af9199af9e69b889claireho#endif
27927f654740f2a26ad62a5c155af9199af9e69b889claireho                        return;
28027f654740f2a26ad62a5c155af9199af9e69b889claireho                    }
28127f654740f2a26ad62a5c155af9199af9e69b889claireho
28227f654740f2a26ad62a5c155af9199af9e69b889claireho                    TimeUnitFormat *tfmt = new TimeUnitFormat(l, styles[styleIndex], status);
28327f654740f2a26ad62a5c155af9199af9e69b889claireho                    if (U_FAILURE(status)) {
28427f654740f2a26ad62a5c155af9199af9e69b889claireho                        dataerrln("generating TimeUnitAmount Object failed.");
28527f654740f2a26ad62a5c155af9199af9e69b889claireho#ifdef TUFMTTS_DEBUG
28627f654740f2a26ad62a5c155af9199af9e69b889claireho                       std::cout <<  "Failed to get TimeUnitFormat for " << locales[locIndex] << "\n";
28727f654740f2a26ad62a5c155af9199af9e69b889claireho#endif
28827f654740f2a26ad62a5c155af9199af9e69b889claireho                       return;
28927f654740f2a26ad62a5c155af9199af9e69b889claireho                    }
29027f654740f2a26ad62a5c155af9199af9e69b889claireho
29127f654740f2a26ad62a5c155af9199af9e69b889claireho                    Formattable fmt;
29227f654740f2a26ad62a5c155af9199af9e69b889claireho                    UnicodeString str;
29327f654740f2a26ad62a5c155af9199af9e69b889claireho
29427f654740f2a26ad62a5c155af9199af9e69b889claireho                    fmt.adoptObject(tamt);
29527f654740f2a26ad62a5c155af9199af9e69b889claireho                    str = ((Format *)tfmt)->format(fmt, str, status);
29627f654740f2a26ad62a5c155af9199af9e69b889claireho                    if (!assertSuccess("formatting relative time failed", status)) {
29727f654740f2a26ad62a5c155af9199af9e69b889claireho                        delete tfmt;
29827f654740f2a26ad62a5c155af9199af9e69b889claireho#ifdef TUFMTTS_DEBUG
29927f654740f2a26ad62a5c155af9199af9e69b889claireho                        std::cout <<  "Failed to format" << "\n";
30027f654740f2a26ad62a5c155af9199af9e69b889claireho#endif
30127f654740f2a26ad62a5c155af9199af9e69b889claireho                        return;
30227f654740f2a26ad62a5c155af9199af9e69b889claireho                    }
30327f654740f2a26ad62a5c155af9199af9e69b889claireho
30427f654740f2a26ad62a5c155af9199af9e69b889claireho#ifdef TUFMTTS_DEBUG
30527f654740f2a26ad62a5c155af9199af9e69b889claireho                    char tmp[128];    //output
30627f654740f2a26ad62a5c155af9199af9e69b889claireho                    char tmp1[128];    //expected
30727f654740f2a26ad62a5c155af9199af9e69b889claireho                    int len = 0;
30827f654740f2a26ad62a5c155af9199af9e69b889claireho                    u_strToUTF8(tmp, 128, &len, str.getTerminatedBuffer(), str.length(), &status);
30927f654740f2a26ad62a5c155af9199af9e69b889claireho                    u_strToUTF8(tmp1, 128, &len, expected[counter].unescape().getTerminatedBuffer(), expected[counter].unescape().length(), &status);
31027f654740f2a26ad62a5c155af9199af9e69b889claireho                    std::cout <<  "Formatted string : " << tmp << " expected : " << tmp1 << "\n";
31127f654740f2a26ad62a5c155af9199af9e69b889claireho#endif
31227f654740f2a26ad62a5c155af9199af9e69b889claireho                    if (!assertEquals("formatted time string is not expected, locale: " + UnicodeString(locales[locIndex]) + " style: " + (int)styles[styleIndex] + " units: " + (int)tunits[unitIndex], expected[counter], str)) {
31327f654740f2a26ad62a5c155af9199af9e69b889claireho                        delete tfmt;
31427f654740f2a26ad62a5c155af9199af9e69b889claireho                        str.remove();
31527f654740f2a26ad62a5c155af9199af9e69b889claireho                        return;
31627f654740f2a26ad62a5c155af9199af9e69b889claireho                    }
31727f654740f2a26ad62a5c155af9199af9e69b889claireho                    delete tfmt;
31827f654740f2a26ad62a5c155af9199af9e69b889claireho                    str.remove();
31927f654740f2a26ad62a5c155af9199af9e69b889claireho                    ++counter;
32027f654740f2a26ad62a5c155af9199af9e69b889claireho                }
32127f654740f2a26ad62a5c155af9199af9e69b889claireho            }
32227f654740f2a26ad62a5c155af9199af9e69b889claireho        }
32327f654740f2a26ad62a5c155af9199af9e69b889claireho    }
32427f654740f2a26ad62a5c155af9199af9e69b889claireho}
32585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
32685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif
327