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