45 #include "CUnit/Basic.h"
69 static void CmpDtTm(
struct tm* datetime,
int year,
int month,
int day,
int hour,
70 int minute,
int second)
72 if (year != -1) CU_ASSERT_EQUAL(year, 1900 + datetime->tm_year);
73 if (month != -1) CU_ASSERT_EQUAL(month, datetime->tm_mon + 1);
74 if (day != -1) CU_ASSERT_EQUAL(day, datetime->tm_mday);
75 if (hour != -1) CU_ASSERT_EQUAL(hour, datetime->tm_hour);
76 if (minute != -1) CU_ASSERT_EQUAL(minute, datetime->tm_min);
77 if (second != -1) CU_ASSERT_EQUAL(second, datetime->tm_sec);
91 static void TestDtNumeric(
void)
98 status =
DtNumeric(
"20080102030405", &datetime);
99 CU_ASSERT_EQUAL(status, 0);
100 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
102 status =
DtNumeric(
"200801020304", &datetime);
103 CU_ASSERT_EQUAL(status, 0);
104 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
106 status =
DtNumeric(
"2008010203", &datetime);
107 CU_ASSERT_EQUAL(status, 0);
108 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
110 status =
DtNumeric(
"20080102", &datetime);
111 CU_ASSERT_EQUAL(status, 0);
112 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
117 CU_ASSERT_NOT_EQUAL(status, 0);
119 status =
DtNumeric(
"2008010203040506", &datetime);
120 CU_ASSERT_NOT_EQUAL(status, 0);
122 status =
DtNumeric(
"200801020", &datetime);
123 CU_ASSERT_NOT_EQUAL(status, 0);
136 static void TestDtAppendTime(
void)
143 CU_ASSERT_EQUAL(status, 0);
144 CU_ASSERT_STRING_EQUAL(fulldt,
"A 00:00:00");
148 CU_ASSERT_EQUAL(status, 0);
149 CU_ASSERT_STRING_EQUAL(fulldt,
"A 00:00:00");
153 CU_ASSERT_EQUAL(status, 0);
154 CU_ASSERT_STRING_EQUAL(fulldt,
"A 12:00:00");
158 CU_ASSERT_EQUAL(status, 0);
159 CU_ASSERT_STRING_EQUAL(fulldt,
"A:12:00:00");
163 CU_ASSERT_EQUAL(status, 0);
164 CU_ASSERT_STRING_EQUAL(fulldt,
"A:12:34:00");
168 CU_ASSERT_EQUAL(status, 0);
169 CU_ASSERT_STRING_EQUAL(fulldt,
"A:12:34:56");
173 CU_ASSERT_NOT_EQUAL(status, 0);
177 CU_ASSERT_NOT_EQUAL(status, 0);
191 static void TestDtGeneral(
void)
198 status =
DtGeneral(
"2-Jan-2008 03:04:05", &datetime);
199 CU_ASSERT_EQUAL(status, 0);
200 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
202 status =
DtGeneral(
"02-Jan-2008 03:04:05", &datetime);
203 CU_ASSERT_EQUAL(status, 0);
204 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
206 status =
DtGeneral(
"02-Jan-2008:03:04:05", &datetime);
207 CU_ASSERT_EQUAL(status, 0);
208 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
210 status =
DtGeneral(
"02-Jan-2008:03:04", &datetime);
211 CU_ASSERT_EQUAL(status, 0);
212 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
214 status =
DtGeneral(
"02-Jan-2008:03", &datetime);
215 CU_ASSERT_EQUAL(status, 0);
216 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
218 status =
DtGeneral(
"02-Jan-2008", &datetime);
219 CU_ASSERT_EQUAL(status, 0);
220 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
224 status =
DtGeneral(
"2-01-2008 03:04:05", &datetime);
225 CU_ASSERT_EQUAL(status, 0);
226 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
228 status =
DtGeneral(
"02-01-2008 03:04:05", &datetime);
229 CU_ASSERT_EQUAL(status, 0);
230 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
232 status =
DtGeneral(
"02-01-2008:03:04:05", &datetime);
233 CU_ASSERT_EQUAL(status, 0);
234 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
236 status =
DtGeneral(
"02-01-2008:03:04", &datetime);
237 CU_ASSERT_EQUAL(status, 0);
238 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
240 status =
DtGeneral(
"02-01-2008:03", &datetime);
241 CU_ASSERT_EQUAL(status, 0);
242 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
244 status =
DtGeneral(
"02-01-2008", &datetime);
245 CU_ASSERT_EQUAL(status, 0);
246 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
250 status =
DtGeneral(
"2008-Jan-02 03:04:05", &datetime);
251 CU_ASSERT_EQUAL(status, 0);
252 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
254 status =
DtGeneral(
"2008-Jan-02:03:04:05", &datetime);
255 CU_ASSERT_EQUAL(status, 0);
256 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
258 status =
DtGeneral(
"2008-Jan-02:03:04", &datetime);
259 CU_ASSERT_EQUAL(status, 0);
260 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
262 status =
DtGeneral(
"2008-Jan-02:03", &datetime);
263 CU_ASSERT_EQUAL(status, 0);
264 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
266 status =
DtGeneral(
"2008-Jan-02", &datetime);
267 CU_ASSERT_EQUAL(status, 0);
268 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
272 status =
DtGeneral(
"2008-01-02 03:04:05", &datetime);
273 CU_ASSERT_EQUAL(status, 0);
274 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
276 status =
DtGeneral(
"2008-01-02:03:04:05", &datetime);
277 CU_ASSERT_EQUAL(status, 0);
278 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
280 status =
DtGeneral(
"2008-01-02:03:04", &datetime);
281 CU_ASSERT_EQUAL(status, 0);
282 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
284 status =
DtGeneral(
"2008-01-02:03", &datetime);
285 CU_ASSERT_EQUAL(status, 0);
286 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
288 status =
DtGeneral(
"2008-01-02", &datetime);
289 CU_ASSERT_EQUAL(status, 0);
290 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
294 status =
DtGeneral(
"00-00-0000:00:00:00", &datetime);
295 CU_ASSERT_NOT_EQUAL(status, 0);
297 status =
DtGeneral(
"0000-00-00", &datetime);
298 CU_ASSERT_NOT_EQUAL(status, 0);
300 status =
DtGeneral(
"00000000", &datetime);
301 CU_ASSERT_NOT_EQUAL(status, 0);
306 CU_ASSERT_NOT_EQUAL(status, 0);
308 status =
DtGeneral(
"02-Xxx-2008", &datetime);
309 CU_ASSERT_NOT_EQUAL(status, 0);
311 status =
DtGeneral(
"02-Feb-2008:", &datetime);
312 CU_ASSERT_NOT_EQUAL(status, 0);
314 status =
DtGeneral(
"02-Jan-2008:03-04-05", &datetime);
315 CU_ASSERT_NOT_EQUAL(status, 0);
329 static void GeneralStringTest(
const char* what,
const char* expected)
334 if (expected == NULL) {
335 CU_ASSERT_PTR_NULL(actual);
338 CU_ASSERT_PTR_NOT_NULL(actual);
339 CU_ASSERT_STRING_EQUAL(actual, expected);
353 static void TestDtGeneralString(
void)
357 GeneralStringTest(
"2-Jan-2008 03:04:05",
"2008-01-02 03:04:05");
358 GeneralStringTest(
"02-Jan-2008 03:04:05",
"2008-01-02 03:04:05");
359 GeneralStringTest(
"02-Jan-2008:03:04:05",
"2008-01-02 03:04:05");
360 GeneralStringTest(
"02-Jan-2008:03:04",
"2008-01-02 03:04:00");
361 GeneralStringTest(
"02-Jan-2008:03",
"2008-01-02 03:00:00");
362 GeneralStringTest(
"02-Jan-2008",
"2008-01-02 00:00:00");
366 GeneralStringTest(
"2-01-2008 03:04:05",
"2008-01-02 03:04:05");
367 GeneralStringTest(
"02-01-2008 03:04:05",
"2008-01-02 03:04:05");
368 GeneralStringTest(
"02-01-2008:03:04:05",
"2008-01-02 03:04:05");
369 GeneralStringTest(
"02-01-2008:03:04",
"2008-01-02 03:04:00");
370 GeneralStringTest(
"02-01-2008:03",
"2008-01-02 03:00:00");
371 GeneralStringTest(
"02-01-2008",
"2008-01-02 00:00:00");
375 GeneralStringTest(
"2008-Jan-02 03:04:05",
"2008-01-02 03:04:05");
376 GeneralStringTest(
"2008-Jan-02:03:04:05",
"2008-01-02 03:04:05");
377 GeneralStringTest(
"2008-Jan-02:03:04",
"2008-01-02 03:04:00");
378 GeneralStringTest(
"2008-Jan-02:03",
"2008-01-02 03:00:00");
379 GeneralStringTest(
"2008-Jan-02",
"2008-01-02 00:00:00");
383 GeneralStringTest(
"2008-01-02 03:04:05",
"2008-01-02 03:04:05");
384 GeneralStringTest(
"2008-01-02:03:04:05",
"2008-01-02 03:04:05");
385 GeneralStringTest(
"2008-01-02:03:04",
"2008-01-02 03:04:00");
386 GeneralStringTest(
"2008-01-02:03",
"2008-01-02 03:00:00");
387 GeneralStringTest(
"2008-01-02",
"2008-01-02 00:00:00");
391 GeneralStringTest(
"00-00-0000:00:00:00", NULL);
392 GeneralStringTest(
"0000-00-00", NULL);
393 GeneralStringTest(
"00000000", NULL);
397 GeneralStringTest(
"13-Jan", NULL);
398 GeneralStringTest(
"02-Xxx-2008", NULL);
399 GeneralStringTest(
"02-Feb-2008:", NULL);
400 GeneralStringTest(
"02-Jan-2008:03-04-05", NULL);
415 static void TestDtParseDateTime(
void)
423 CU_ASSERT_EQUAL(status, 0);
424 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
427 CU_ASSERT_EQUAL(status, 0);
428 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
431 CU_ASSERT_EQUAL(status, 0);
432 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
435 CU_ASSERT_EQUAL(status, 0);
436 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
439 CU_ASSERT_EQUAL(status, 0);
440 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
443 CU_ASSERT_EQUAL(status, 0);
444 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
447 CU_ASSERT_EQUAL(status, 0);
448 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
451 CU_ASSERT_EQUAL(status, 0);
452 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
455 CU_ASSERT_EQUAL(status, 0);
456 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
459 CU_ASSERT_EQUAL(status, 0);
460 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
465 CU_ASSERT_NOT_EQUAL(status, 0);
468 CU_ASSERT_NOT_EQUAL(status, 0);
471 CU_ASSERT_NOT_EQUAL(status, 0);
474 CU_ASSERT_NOT_EQUAL(status, 0);
477 CU_ASSERT_NOT_EQUAL(status, 0);
480 CU_ASSERT_NOT_EQUAL(status, 0);
483 CU_ASSERT_NOT_EQUAL(status, 0);
486 CU_ASSERT_NOT_EQUAL(status, 0);
489 CU_ASSERT_NOT_EQUAL(status, 0);
492 CU_ASSERT_NOT_EQUAL(status, 0);
508 static void TestDtNow(
void)
516 (void) time(&curtime);
517 (void) localtime_r(&curtime, &time1);
518 status =
DtNow(&test);
519 (void) time(&curtime);
520 (void) localtime_r(&curtime, &time2);
522 CU_ASSERT_EQUAL(status, 0);
524 time1.tm_year == time2.tm_year ? time1.tm_year + 1900 : -1,
525 time1.tm_mon == time2.tm_mon ? time1.tm_mon + 1 : -1,
526 time1.tm_mday == time2.tm_mday ? time1.tm_mday : -1,
527 time1.tm_hour == time2.tm_hour ? time1.tm_hour : -1,
528 time1.tm_min == time2.tm_min ? time1.tm_min : -1,
529 time1.tm_sec == time2.tm_sec ? time1.tm_sec : -1
532 (void) time(&curtime);
533 (void) localtime_r(&curtime, &time1);
535 (void) time(&curtime);
536 (void) localtime_r(&curtime, &time2);
538 CU_ASSERT_EQUAL(status, 0);
540 time1.tm_year == time2.tm_year ? time1.tm_year + 1900 : -1,
541 time1.tm_mon == time2.tm_mon ? time1.tm_mon + 1 : -1,
542 time1.tm_mday == time2.tm_mday ? time1.tm_mday : -1,
543 time1.tm_hour == time2.tm_hour ? time1.tm_hour : -1,
544 time1.tm_min == time2.tm_min ? time1.tm_min : -1,
545 time1.tm_sec == time2.tm_sec ? time1.tm_sec : -1
568 static void CheckValidIntervalSeconds(
const char*
string,
int einterval)
574 CU_ASSERT_EQUAL(status, 0);
575 CU_ASSERT_EQUAL(interval, einterval);
584 static void TestDtIntervalSeconds(
void)
591 CheckValidIntervalSeconds(
"1", 1L);
592 CheckValidIntervalSeconds(
"234", 234L);
593 CheckValidIntervalSeconds(
"1223s", 1223L);
594 CheckValidIntervalSeconds(
"1m", 60L);
595 CheckValidIntervalSeconds(
"15m", 900L);
596 CheckValidIntervalSeconds(
"2h", 7200L);
597 CheckValidIntervalSeconds(
"24h", 86400L);
598 CheckValidIntervalSeconds(
"1d", 86400L);
599 CheckValidIntervalSeconds(
"7d", 604800L);
600 CheckValidIntervalSeconds(
"1w", 604800L);
601 CheckValidIntervalSeconds(
"52w", 31449600L);
606 CU_ASSERT_EQUAL(status, 4);
608 CU_ASSERT_EQUAL(status, 4);
610 CU_ASSERT_EQUAL(status, 4);
612 CU_ASSERT_EQUAL(status, 4);
616 CU_ASSERT_EQUAL(status, 3);
619 CU_ASSERT_EQUAL(status, 2);
622 CU_ASSERT_EQUAL(status, 2);
624 CU_ASSERT_EQUAL(status, 2);
627 CU_ASSERT_EQUAL(status, 1);
637 static void TestDtSecondsInterval(
void)
642 CU_ASSERT_STRING_EQUAL(buffer,
"1209601s");
645 CU_ASSERT_STRING_EQUAL(buffer,
"2w");
648 CU_ASSERT_STRING_EQUAL(buffer,
"1209599s");
651 CU_ASSERT_STRING_EQUAL(buffer,
"259201s");
654 CU_ASSERT_STRING_EQUAL(buffer,
"3d");
657 CU_ASSERT_STRING_EQUAL(buffer,
"259199s");
660 CU_ASSERT_STRING_EQUAL(buffer,
"14401s");
663 CU_ASSERT_STRING_EQUAL(buffer,
"4h");
666 CU_ASSERT_STRING_EQUAL(buffer,
"14399s");
669 CU_ASSERT_STRING_EQUAL(buffer,
"301s");
672 CU_ASSERT_STRING_EQUAL(buffer,
"5m");
675 CU_ASSERT_STRING_EQUAL(buffer,
"299s");
678 CU_ASSERT_STRING_EQUAL(buffer,
"0s");
701 static void CheckDtDateDiff(
const char* date1,
const char* date2,
int status,
707 act_status =
DtDateDiff(date1, date2, &act_result);
708 CU_ASSERT_EQUAL(status, act_status);
710 CU_ASSERT_EQUAL(result, act_result);
716 static void TestDtDateDiff(
void)
720 CheckDtDateDiff(
"2001-01-01 00:00:02",
"2001-01-01 00:00:01", 0, 1);
721 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-01 00:00:02", 0, -1);
723 CheckDtDateDiff(
"2001-01-01 00:01:02",
"2001-01-01 00:00:01", 0, 61);
724 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-01 00:01:02", 0, -61);
726 CheckDtDateDiff(
"2001-01-01 02:01:02",
"2001-01-01 00:00:01", 0, 7261);
727 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-01 02:01:02", 0, -7261);
729 CheckDtDateDiff(
"2001-01-02 02:01:02",
"2001-01-01 00:00:01", 0, 93661);
730 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-02 02:01:02", 0, -93661);
734 CheckDtDateDiff(NULL, NULL, 3, 0);
735 CheckDtDateDiff(
"2001-01-01 23:12:22", NULL, 3, 0);
736 CheckDtDateDiff(
"2001-01-01 23:12:22",
"", 3, 0);
737 CheckDtDateDiff(NULL,
"2001-01-01 23:12:22", 3, 0);
738 CheckDtDateDiff(
"",
"2001-01-01 23:12:22", 3, 0);
739 CheckDtDateDiff(
"2001-01-01 23:12:22",
"fred", 2, 0);
740 CheckDtDateDiff(
"fred",
"2001-01-01 23:12:22", 1, 0);
758 static void CheckValidXMLIntervalSeconds(
const char*
string,
int einterval,
int estatus)
764 CU_ASSERT_EQUAL(status, estatus);
765 CU_ASSERT_EQUAL(interval, einterval);
774 static void TestDtXMLIntervalSeconds(
void)
783 CU_ASSERT_EQUAL(status, 0);
784 CU_ASSERT_EQUAL(interval, 1);
788 CU_ASSERT_EQUAL(status, 0);
789 CU_ASSERT_EQUAL(interval, 234);
791 CheckValidXMLIntervalSeconds(
"P1223S", 1223L, 0);
792 CheckValidXMLIntervalSeconds(
"PT1M", 60L, 0);
793 CheckValidXMLIntervalSeconds(
"PT15M", 900L, 0);
794 CheckValidXMLIntervalSeconds(
"P2H", 7200L, 0);
795 CheckValidXMLIntervalSeconds(
"PT2H", 7200L, 0);
796 CheckValidXMLIntervalSeconds(
"P24H", 86400L, 0);
797 CheckValidXMLIntervalSeconds(
"PT24H", 86400L, 0);
798 CheckValidXMLIntervalSeconds(
"P1D", 86400L, 0);
799 CheckValidXMLIntervalSeconds(
"P7D", 604800L, 0);
800 CheckValidXMLIntervalSeconds(
"P1W", 604800L, 0);
801 CheckValidXMLIntervalSeconds(
"P52W", 31449600L, 0);
804 CU_ASSERT_EQUAL(status, 0);
805 CU_ASSERT_EQUAL(interval, -60);
807 CheckValidXMLIntervalSeconds(
"PT1223S", 1223L, 0);
810 CheckValidXMLIntervalSeconds(
"P1W1DT2H2M7S", 698527L, 0);
811 CheckValidXMLIntervalSeconds(
"P1Y1W1DT2H2M7S", 32234527L, -1);
812 CheckValidXMLIntervalSeconds(
"P1Y2M1W1DT2H2M7S", 37591327L, -1);
815 CheckValidXMLIntervalSeconds(
"P1M", 2678400L, -1);
816 CheckValidXMLIntervalSeconds(
"P15M", 40176000L, -1);
820 CU_ASSERT_EQUAL(status, -1);
821 CU_ASSERT_EQUAL(interval, 31536000);
827 CU_ASSERT_EQUAL(status, 4);
829 CU_ASSERT_EQUAL(status, 4);
831 CU_ASSERT_EQUAL(status, 4);
833 CU_ASSERT_EQUAL(status, 4);
837 CU_ASSERT_EQUAL(status, 3);
840 CU_ASSERT_EQUAL(status, 3);
847 CU_ASSERT_EQUAL(status, 2);
849 CU_ASSERT_EQUAL(status, 2);
852 CU_ASSERT_EQUAL(status, 2);
876 {
"DtNumeric", TestDtNumeric},
877 {
"DtAppendTime", TestDtAppendTime},
878 {
"DtGeneral", TestDtGeneral},
879 {
"DtGeneralString", TestDtGeneralString},
880 {
"DtParseDateTime", TestDtParseDateTime},
881 {
"DtNow", TestDtNow},
882 {
"DtIntervalSeconds", TestDtIntervalSeconds},
883 {
"DtSecondsInterval", TestDtSecondsInterval},
884 {
"DtDateDiff", TestDtDateDiff},
885 {
"DtXMLIntervalSeconds",TestDtXMLIntervalSeconds},
int TcuCreateSuite(const char *title, int(*init)(), int(*teardown)(), struct test_testdef *tests)
int DtGeneral(const char *string, struct tm *datetime)
char * DtGeneralString(const char *string)
int DtAppendTime(char *fulldt, const char *timepart)
int DtIntervalSeconds(const char *text, int *interval)
int DtParseDateTime(const char *string, struct tm *datetime)
int DtNumeric(const char *string, struct tm *datetime)
void DtSecondsInterval(int interval, char *text, size_t textlen)
int DtNow(struct tm *datetime)
int DtXMLIntervalSeconds(const char *text, int *interval)
int DtDateDiff(const char *date1, const char *date2, int *result)