blob: 73304168e76a8a02fedbc256cf8ba28ae6ea94ec [file]
/*------------------------------------------------------------------------------
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
*
* Distributable under the terms of either the Apache License (Version 2.0) or
* the GNU Lesser General Public License, as specified in the COPYING file.
------------------------------------------------------------------------------*/
#include "test.h"
void assertDateTimeEquals(CuTest* tc, const TCHAR* isoFormat, int64_t d){
TCHAR* tmp = DateTools::getISOFormat(d);
int res = _tcscmp(isoFormat, tmp);
_CLDELETE_LCARRAY(tmp);
CLUCENE_ASSERT(res == 0);
}
void testStringToDate(CuTest *tc) {
int64_t d = DateTools::stringToTime(_T("2004"));
assertDateTimeEquals(tc, _T("2004-01-01 00:00:00:000"), d);
d = DateTools::stringToTime(_T("20040705"));
assertDateTimeEquals(tc, _T("2004-07-05 00:00:00:000"), d);
d = DateTools::stringToTime(_T("200407050910"));
assertDateTimeEquals(tc, _T("2004-07-05 09:10:00:000"), d);
d = DateTools::stringToTime(_T("20040705091055990"));
assertDateTimeEquals(tc, _T("2004-07-05 09:10:55:990"), d);
try {
d = DateTools::stringToTime(_T("97")); // no date
CuFail(tc, _T("Expected an exception on DateTools::stringToTime(\"97\")"));
} catch(...) { /* expected exception */ }
try {
d = DateTools::stringToTime(_T("200401011235009999")); // no date
CuFail(tc, _T("Expected an exception on DateTools::stringToTime(\"200401011235009999\")"));
} catch(...) { /* expected exception */ }
try {
d = DateTools::stringToTime(_T("aaaa")); // no date
CuFail(tc, _T("Expected an exception on DateTools::stringToTime(\"aaaa\")"));
} catch(...) { /* expected exception */ }
}
void testDateAndTimetoString(CuTest* tc) {
int64_t cal = DateTools::getTime(2004, 2, 3, 22, 8, 56, 333);
TCHAR* dateString;
dateString = DateTools::timeToString(cal, DateTools::YEAR_FORMAT);
CLUCENE_ASSERT( _tcscmp(_T("2004"), dateString) == 0 );
assertDateTimeEquals(tc, _T("2004-01-01 00:00:00:000"), DateTools::stringToTime(dateString));
_CLDELETE_LCARRAY(dateString);
dateString = DateTools::timeToString(cal, DateTools::MONTH_FORMAT);
CLUCENE_ASSERT( _tcscmp(_T("200402"), dateString) == 0 );
assertDateTimeEquals(tc, _T("2004-02-01 00:00:00:000"), DateTools::stringToTime(dateString));
_CLDELETE_LCARRAY(dateString);
dateString = DateTools::timeToString(cal, DateTools::DAY_FORMAT);
CLUCENE_ASSERT( _tcscmp(_T("20040203"), dateString) == 0 );
assertDateTimeEquals(tc, _T("2004-02-03 00:00:00:000"), DateTools::stringToTime(dateString));
_CLDELETE_LCARRAY(dateString);
dateString = DateTools::timeToString(cal, DateTools::HOUR_FORMAT);
CLUCENE_ASSERT( _tcscmp(_T("2004020322"), dateString) == 0 );
assertDateTimeEquals(tc, _T("2004-02-03 22:00:00:000"), DateTools::stringToTime(dateString));
_CLDELETE_LCARRAY(dateString);
dateString = DateTools::timeToString(cal, DateTools::MINUTE_FORMAT);
CLUCENE_ASSERT( _tcscmp(_T("200402032208"), dateString) == 0 );
assertDateTimeEquals(tc, _T("2004-02-03 22:08:00:000"), DateTools::stringToTime(dateString));
_CLDELETE_LCARRAY(dateString);
dateString = DateTools::timeToString(cal, DateTools::SECOND_FORMAT);
CLUCENE_ASSERT( _tcscmp(_T("20040203220856"), dateString) == 0 );
assertDateTimeEquals(tc, _T("2004-02-03 22:08:56:000"), DateTools::stringToTime(dateString));
_CLDELETE_LCARRAY(dateString);
dateString = DateTools::timeToString(cal, DateTools::MILLISECOND_FORMAT);
CLUCENE_ASSERT( _tcscmp(_T("20040203220856333"), dateString) == 0 );
assertDateTimeEquals(tc, _T("2004-02-03 22:08:56:333"), DateTools::stringToTime(dateString));
_CLDELETE_LCARRAY(dateString);
/*
// TODO: Allow this
// date before 1970:
cal.set(1961, 2, 5, // year=1961, month=march(!), day=5
23, 9, 51); // hour, minute, second
cal.set(Calendar.MILLISECOND, 444);
dateString = DateTools.dateToString(cal.getTime(), DateTools.Resolution.MILLISECOND);
assertDateTimeEquals("19610305230951444", dateString);
assertDateTimeEquals("1961-03-05 23:09:51:444", isoFormat(DateTools.stringToDate(dateString)));
dateString = DateTools.dateToString(cal.getTime(), DateTools.Resolution.HOUR);
assertDateTimeEquals("1961030523", dateString);
assertDateTimeEquals("1961-03-05 23:00:00:000", isoFormat(DateTools.stringToDate(dateString)));
// timeToString:
cal.set(1970, 0, 1, // year=1970, month=january, day=1
0, 0, 0); // hour, minute, second
cal.set(Calendar.MILLISECOND, 0);
dateString = DateTools.timeToString(cal.getTime().getTime(),
DateTools.Resolution.MILLISECOND);
assertDateTimeEquals("19700101000000000", dateString);
cal.set(1970, 0, 1, // year=1970, month=january, day=1
1, 2, 3); // hour, minute, second
cal.set(Calendar.MILLISECOND, 0);
dateString = DateTools.timeToString(cal.getTime().getTime(),
DateTools.Resolution.MILLISECOND);
assertDateTimeEquals("19700101010203000", dateString);
*/
}
CuSuite *testDateTools(void)
{
CuSuite *suite = CuSuiteNew(_T("CLucene DateTools Test"));
SUITE_ADD_TEST(suite, testStringToDate);
// SUITE_ADD_TEST(suite, testStringtoTime); -- tests against a calendar object - irrelevant to clucene
SUITE_ADD_TEST(suite, testDateAndTimetoString);
return suite;
}