2008-09-19 19:05:37 +00:00
|
|
|
/********************************************************************
|
2009-06-12 19:34:21 +00:00
|
|
|
* Copyright (c) 2008-2009, International Business Machines Corporation and
|
2008-09-19 19:05:37 +00:00
|
|
|
* others. All Rights Reserved.
|
|
|
|
********************************************************************/
|
|
|
|
|
|
|
|
#include "unicode/utypes.h"
|
|
|
|
|
|
|
|
#if !UCONFIG_NO_FORMATTING
|
|
|
|
|
|
|
|
#include "unicode/tmunit.h"
|
|
|
|
#include "unicode/tmutamt.h"
|
|
|
|
#include "unicode/tmutfmt.h"
|
|
|
|
#include "tufmtts.h"
|
|
|
|
|
|
|
|
|
2008-10-22 06:06:56 +00:00
|
|
|
//TODO: put as compilation flag
|
2008-09-19 19:05:37 +00:00
|
|
|
//#define TUFMTTS_DEBUG 1
|
|
|
|
|
|
|
|
#ifdef TUFMTTS_DEBUG
|
|
|
|
#include <iostream>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void TimeUnitTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) {
|
|
|
|
if (exec) logln("TestSuite TimeUnitTest");
|
|
|
|
switch (index) {
|
|
|
|
TESTCASE(0, testBasic);
|
|
|
|
TESTCASE(1, testAPI);
|
|
|
|
default: name = ""; break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test basic
|
|
|
|
*/
|
|
|
|
void TimeUnitTest::testBasic() {
|
|
|
|
const char* locales[] = {"en", "sl", "fr", "zh", "ar", "ru", "zh_Hant"};
|
|
|
|
for ( unsigned int locIndex = 0;
|
|
|
|
locIndex < sizeof(locales)/sizeof(locales[0]);
|
|
|
|
++locIndex ) {
|
|
|
|
UErrorCode status = U_ZERO_ERROR;
|
|
|
|
Locale loc(locales[locIndex]);
|
|
|
|
TimeUnitFormat** formats = new TimeUnitFormat*[2];
|
|
|
|
formats[TimeUnitFormat::kFull] = new TimeUnitFormat(loc, status);
|
2009-06-12 19:34:21 +00:00
|
|
|
if (!assertSuccess("TimeUnitFormat(full)", status, TRUE)) return;
|
2008-09-19 19:05:37 +00:00
|
|
|
formats[TimeUnitFormat::kAbbreviate] = new TimeUnitFormat(loc, TimeUnitFormat::kAbbreviate, status);
|
|
|
|
if (!assertSuccess("TimeUnitFormat(short)", status)) return;
|
|
|
|
#ifdef TUFMTTS_DEBUG
|
|
|
|
std::cout << "locale: " << locales[locIndex] << "\n";
|
|
|
|
#endif
|
|
|
|
for (int style = TimeUnitFormat::kFull;
|
|
|
|
style <= TimeUnitFormat::kAbbreviate;
|
|
|
|
++style) {
|
|
|
|
for (TimeUnit::UTimeUnitFields j = TimeUnit::UTIMEUNIT_YEAR;
|
|
|
|
j < TimeUnit::UTIMEUNIT_FIELD_COUNT;
|
|
|
|
j = (TimeUnit::UTimeUnitFields)(j+1)) {
|
|
|
|
#ifdef TUFMTTS_DEBUG
|
|
|
|
std::cout << "time unit: " << j << "\n";
|
|
|
|
#endif
|
|
|
|
double tests[] = {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 5, 10, 100, 101.35};
|
|
|
|
for (unsigned int i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) {
|
|
|
|
#ifdef TUFMTTS_DEBUG
|
|
|
|
std::cout << "number: " << tests[i] << "\n";
|
|
|
|
#endif
|
|
|
|
TimeUnitAmount* source = new TimeUnitAmount(tests[i], j, status);
|
|
|
|
if (!assertSuccess("TimeUnitAmount()", status)) return;
|
|
|
|
UnicodeString formatted;
|
|
|
|
Formattable formattable;
|
|
|
|
formattable.adoptObject(source);
|
|
|
|
formatted = ((Format*)formats[style])->format(formattable, formatted, status);
|
|
|
|
if (!assertSuccess("format()", status)) return;
|
|
|
|
#ifdef TUFMTTS_DEBUG
|
|
|
|
char formatResult[1000];
|
|
|
|
formatted.extract(0, formatted.length(), formatResult, "UTF-8");
|
|
|
|
std::cout << "format result: " << formatResult << "\n";
|
|
|
|
#endif
|
|
|
|
Formattable result;
|
|
|
|
((Format*)formats[style])->parseObject(formatted, result, status);
|
|
|
|
if (!assertSuccess("parseObject()", status)) return;
|
|
|
|
if (result != formattable) {
|
|
|
|
dataerrln("No round trip: ");
|
|
|
|
}
|
|
|
|
// other style parsing
|
|
|
|
Formattable result_1;
|
|
|
|
((Format*)formats[1-style])->parseObject(formatted, result_1, status);
|
|
|
|
if (!assertSuccess("parseObject()", status)) return;
|
|
|
|
if (result_1 != formattable) {
|
|
|
|
dataerrln("No round trip: ");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
delete formats[TimeUnitFormat::kFull];
|
|
|
|
delete formats[TimeUnitFormat::kAbbreviate];
|
|
|
|
delete[] formats;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void TimeUnitTest::testAPI() {
|
|
|
|
//================= TimeUnit =================
|
|
|
|
UErrorCode status = U_ZERO_ERROR;
|
|
|
|
|
|
|
|
TimeUnit* tmunit = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_YEAR, status);
|
|
|
|
if (!assertSuccess("TimeUnit::createInstance", status)) return;
|
|
|
|
|
|
|
|
TimeUnit* another = (TimeUnit*)tmunit->clone();
|
|
|
|
TimeUnit third(*tmunit);
|
|
|
|
TimeUnit fourth = third;
|
|
|
|
|
|
|
|
assertTrue("orig and clone are equal", (*tmunit == *another));
|
|
|
|
assertTrue("copied and assigned are equal", (third == fourth));
|
|
|
|
|
|
|
|
TimeUnit* tmunit_m = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_MONTH, status);
|
|
|
|
assertTrue("year != month", (*tmunit != *tmunit_m));
|
|
|
|
|
|
|
|
TimeUnit::UTimeUnitFields field = tmunit_m->getTimeUnitField();
|
|
|
|
assertTrue("field of month time unit is month", (field == TimeUnit::UTIMEUNIT_MONTH));
|
|
|
|
|
|
|
|
delete tmunit;
|
|
|
|
delete another;
|
|
|
|
delete tmunit_m;
|
|
|
|
//
|
|
|
|
//================= TimeUnitAmount =================
|
|
|
|
|
2008-09-22 22:43:55 +00:00
|
|
|
Formattable formattable((int32_t)2);
|
2008-09-19 19:05:37 +00:00
|
|
|
TimeUnitAmount tma_long(formattable, TimeUnit::UTIMEUNIT_DAY, status);
|
|
|
|
if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
|
|
|
|
|
|
|
|
formattable.setDouble(2);
|
|
|
|
TimeUnitAmount tma_double(formattable, TimeUnit::UTIMEUNIT_DAY, status);
|
|
|
|
if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
|
|
|
|
|
|
|
|
formattable.setDouble(3);
|
|
|
|
TimeUnitAmount tma_double_3(formattable, TimeUnit::UTIMEUNIT_DAY, status);
|
|
|
|
if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
|
|
|
|
|
|
|
|
TimeUnitAmount tma(2, TimeUnit::UTIMEUNIT_DAY, status);
|
|
|
|
if (!assertSuccess("TimeUnitAmount(number...)", status)) return;
|
|
|
|
|
|
|
|
TimeUnitAmount tma_h(2, TimeUnit::UTIMEUNIT_HOUR, status);
|
|
|
|
if (!assertSuccess("TimeUnitAmount(number...)", status)) return;
|
|
|
|
|
|
|
|
TimeUnitAmount second(tma);
|
|
|
|
TimeUnitAmount third_tma = tma;
|
|
|
|
TimeUnitAmount* fourth_tma = (TimeUnitAmount*)tma.clone();
|
|
|
|
|
|
|
|
assertTrue("orig and copy are equal", (second == tma));
|
|
|
|
assertTrue("clone and assigned are equal", (third_tma == *fourth_tma));
|
|
|
|
assertTrue("different if number diff", (tma_double != tma_double_3));
|
|
|
|
assertTrue("different if number type diff", (tma_double != tma_long));
|
|
|
|
assertTrue("different if time unit diff", (tma != tma_h));
|
|
|
|
assertTrue("same even different constructor", (tma_double == tma));
|
|
|
|
|
|
|
|
assertTrue("getTimeUnitField", (tma.getTimeUnitField() == TimeUnit::UTIMEUNIT_DAY));
|
|
|
|
delete fourth_tma;
|
|
|
|
//
|
|
|
|
//================= TimeUnitFormat =================
|
|
|
|
//
|
|
|
|
TimeUnitFormat* tmf_en = new TimeUnitFormat(Locale("en"), status);
|
2009-06-12 19:34:21 +00:00
|
|
|
if (!assertSuccess("TimeUnitFormat(en...)", status, TRUE)) return;
|
2008-09-19 19:05:37 +00:00
|
|
|
TimeUnitFormat tmf_fr(Locale("fr"), status);
|
|
|
|
if (!assertSuccess("TimeUnitFormat(fr...)", status)) return;
|
|
|
|
|
|
|
|
assertTrue("TimeUnitFormat: en and fr diff", (*tmf_en != tmf_fr));
|
|
|
|
|
|
|
|
TimeUnitFormat tmf_assign = *tmf_en;
|
|
|
|
assertTrue("TimeUnitFormat: orig and assign are equal", (*tmf_en == tmf_assign));
|
|
|
|
|
|
|
|
TimeUnitFormat tmf_copy(tmf_fr);
|
|
|
|
assertTrue("TimeUnitFormat: orig and copy are equal", (tmf_fr == tmf_copy));
|
|
|
|
|
|
|
|
TimeUnitFormat* tmf_clone = (TimeUnitFormat*)tmf_en->clone();
|
|
|
|
assertTrue("TimeUnitFormat: orig and clone are equal", (*tmf_en == *tmf_clone));
|
|
|
|
delete tmf_clone;
|
|
|
|
|
|
|
|
tmf_en->setLocale(Locale("fr"), status);
|
|
|
|
if (!assertSuccess("setLocale(fr...)", status)) return;
|
|
|
|
|
|
|
|
NumberFormat* numberFmt = NumberFormat::createInstance(
|
|
|
|
Locale("fr"), status);
|
|
|
|
if (!assertSuccess("NumberFormat::createInstance()", status)) return;
|
|
|
|
tmf_en->setNumberFormat(*numberFmt, status);
|
|
|
|
if (!assertSuccess("setNumberFormat(en...)", status)) return;
|
|
|
|
assertTrue("TimeUnitFormat: setLocale", (*tmf_en == tmf_fr));
|
|
|
|
|
|
|
|
delete tmf_en;
|
|
|
|
|
|
|
|
TimeUnitFormat* en_long = new TimeUnitFormat(Locale("en"), TimeUnitFormat::kFull, status);
|
|
|
|
if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
|
|
|
|
delete en_long;
|
|
|
|
|
|
|
|
TimeUnitFormat* en_short = new TimeUnitFormat(Locale("en"), TimeUnitFormat::kAbbreviate, status);
|
|
|
|
if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
|
|
|
|
delete en_short;
|
|
|
|
|
|
|
|
TimeUnitFormat* format = new TimeUnitFormat(status);
|
|
|
|
format->setLocale(Locale("zh"), status);
|
|
|
|
format->setNumberFormat(*numberFmt, status);
|
|
|
|
if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
|
|
|
|
delete numberFmt;
|
|
|
|
delete format;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|