43 #include "CUnit/Basic.h" 67 static void CmpDtTm(
struct tm* datetime,
int year,
int month,
int day,
int hour,
68 int minute,
int second)
70 if (year != -1) CU_ASSERT_EQUAL(year, 1900 + datetime->tm_year);
71 if (month != -1) CU_ASSERT_EQUAL(month, datetime->tm_mon + 1);
72 if (day != -1) CU_ASSERT_EQUAL(day, datetime->tm_mday);
73 if (hour != -1) CU_ASSERT_EQUAL(hour, datetime->tm_hour);
74 if (minute != -1) CU_ASSERT_EQUAL(minute, datetime->tm_min);
75 if (second != -1) CU_ASSERT_EQUAL(second, datetime->tm_sec);
89 static void TestDtNumeric(
void)
96 status =
DtNumeric(
"20080102030405", &datetime);
97 CU_ASSERT_EQUAL(status, 0);
98 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
100 status =
DtNumeric(
"200801020304", &datetime);
101 CU_ASSERT_EQUAL(status, 0);
102 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
104 status =
DtNumeric(
"2008010203", &datetime);
105 CU_ASSERT_EQUAL(status, 0);
106 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
108 status =
DtNumeric(
"20080102", &datetime);
109 CU_ASSERT_EQUAL(status, 0);
110 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
115 CU_ASSERT_NOT_EQUAL(status, 0);
117 status =
DtNumeric(
"2008010203040506", &datetime);
118 CU_ASSERT_NOT_EQUAL(status, 0);
120 status =
DtNumeric(
"200801020", &datetime);
121 CU_ASSERT_NOT_EQUAL(status, 0);
134 static void TestDtAppendTime(
void)
141 CU_ASSERT_EQUAL(status, 0);
142 CU_ASSERT_STRING_EQUAL(fulldt,
"A 00:00:00");
146 CU_ASSERT_EQUAL(status, 0);
147 CU_ASSERT_STRING_EQUAL(fulldt,
"A 00:00:00");
151 CU_ASSERT_EQUAL(status, 0);
152 CU_ASSERT_STRING_EQUAL(fulldt,
"A 12:00:00");
156 CU_ASSERT_EQUAL(status, 0);
157 CU_ASSERT_STRING_EQUAL(fulldt,
"A:12:00:00");
161 CU_ASSERT_EQUAL(status, 0);
162 CU_ASSERT_STRING_EQUAL(fulldt,
"A:12:34:00");
166 CU_ASSERT_EQUAL(status, 0);
167 CU_ASSERT_STRING_EQUAL(fulldt,
"A:12:34:56");
171 CU_ASSERT_NOT_EQUAL(status, 0);
175 CU_ASSERT_NOT_EQUAL(status, 0);
189 static void TestDtGeneral(
void)
196 status =
DtGeneral(
"2-Jan-2008 03:04:05", &datetime);
197 CU_ASSERT_EQUAL(status, 0);
198 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
200 status =
DtGeneral(
"02-Jan-2008 03:04:05", &datetime);
201 CU_ASSERT_EQUAL(status, 0);
202 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
204 status =
DtGeneral(
"02-Jan-2008:03:04:05", &datetime);
205 CU_ASSERT_EQUAL(status, 0);
206 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
208 status =
DtGeneral(
"02-Jan-2008:03:04", &datetime);
209 CU_ASSERT_EQUAL(status, 0);
210 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
212 status =
DtGeneral(
"02-Jan-2008:03", &datetime);
213 CU_ASSERT_EQUAL(status, 0);
214 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
216 status =
DtGeneral(
"02-Jan-2008", &datetime);
217 CU_ASSERT_EQUAL(status, 0);
218 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
222 status =
DtGeneral(
"2-01-2008 03:04:05", &datetime);
223 CU_ASSERT_EQUAL(status, 0);
224 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
226 status =
DtGeneral(
"02-01-2008 03:04:05", &datetime);
227 CU_ASSERT_EQUAL(status, 0);
228 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
230 status =
DtGeneral(
"02-01-2008:03:04:05", &datetime);
231 CU_ASSERT_EQUAL(status, 0);
232 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
234 status =
DtGeneral(
"02-01-2008:03:04", &datetime);
235 CU_ASSERT_EQUAL(status, 0);
236 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
238 status =
DtGeneral(
"02-01-2008:03", &datetime);
239 CU_ASSERT_EQUAL(status, 0);
240 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
242 status =
DtGeneral(
"02-01-2008", &datetime);
243 CU_ASSERT_EQUAL(status, 0);
244 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
248 status =
DtGeneral(
"2008-Jan-02 03:04:05", &datetime);
249 CU_ASSERT_EQUAL(status, 0);
250 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
252 status =
DtGeneral(
"2008-Jan-02:03:04:05", &datetime);
253 CU_ASSERT_EQUAL(status, 0);
254 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
256 status =
DtGeneral(
"2008-Jan-02:03:04", &datetime);
257 CU_ASSERT_EQUAL(status, 0);
258 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
260 status =
DtGeneral(
"2008-Jan-02:03", &datetime);
261 CU_ASSERT_EQUAL(status, 0);
262 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
264 status =
DtGeneral(
"2008-Jan-02", &datetime);
265 CU_ASSERT_EQUAL(status, 0);
266 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
270 status =
DtGeneral(
"2008-01-02 03:04:05", &datetime);
271 CU_ASSERT_EQUAL(status, 0);
272 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
274 status =
DtGeneral(
"2008-01-02:03:04:05", &datetime);
275 CU_ASSERT_EQUAL(status, 0);
276 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
278 status =
DtGeneral(
"2008-01-02:03:04", &datetime);
279 CU_ASSERT_EQUAL(status, 0);
280 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
282 status =
DtGeneral(
"2008-01-02:03", &datetime);
283 CU_ASSERT_EQUAL(status, 0);
284 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
286 status =
DtGeneral(
"2008-01-02", &datetime);
287 CU_ASSERT_EQUAL(status, 0);
288 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
292 status =
DtGeneral(
"00-00-0000:00:00:00", &datetime);
293 CU_ASSERT_NOT_EQUAL(status, 0);
295 status =
DtGeneral(
"0000-00-00", &datetime);
296 CU_ASSERT_NOT_EQUAL(status, 0);
298 status =
DtGeneral(
"00000000", &datetime);
299 CU_ASSERT_NOT_EQUAL(status, 0);
304 CU_ASSERT_NOT_EQUAL(status, 0);
306 status =
DtGeneral(
"02-Xxx-2008", &datetime);
307 CU_ASSERT_NOT_EQUAL(status, 0);
309 status =
DtGeneral(
"02-Feb-2008:", &datetime);
310 CU_ASSERT_NOT_EQUAL(status, 0);
312 status =
DtGeneral(
"02-Jan-2008:03-04-05", &datetime);
313 CU_ASSERT_NOT_EQUAL(status, 0);
327 static void GeneralStringTest(
const char* what,
const char* expected)
332 if (expected == NULL) {
333 CU_ASSERT_PTR_NULL(actual);
336 CU_ASSERT_PTR_NOT_NULL(actual);
337 CU_ASSERT_STRING_EQUAL(actual, expected);
351 static void TestDtGeneralString(
void)
355 GeneralStringTest(
"2-Jan-2008 03:04:05",
"2008-01-02 03:04:05");
356 GeneralStringTest(
"02-Jan-2008 03:04:05",
"2008-01-02 03:04:05");
357 GeneralStringTest(
"02-Jan-2008:03:04:05",
"2008-01-02 03:04:05");
358 GeneralStringTest(
"02-Jan-2008:03:04",
"2008-01-02 03:04:00");
359 GeneralStringTest(
"02-Jan-2008:03",
"2008-01-02 03:00:00");
360 GeneralStringTest(
"02-Jan-2008",
"2008-01-02 00:00:00");
364 GeneralStringTest(
"2-01-2008 03:04:05",
"2008-01-02 03:04:05");
365 GeneralStringTest(
"02-01-2008 03:04:05",
"2008-01-02 03:04:05");
366 GeneralStringTest(
"02-01-2008:03:04:05",
"2008-01-02 03:04:05");
367 GeneralStringTest(
"02-01-2008:03:04",
"2008-01-02 03:04:00");
368 GeneralStringTest(
"02-01-2008:03",
"2008-01-02 03:00:00");
369 GeneralStringTest(
"02-01-2008",
"2008-01-02 00:00:00");
373 GeneralStringTest(
"2008-Jan-02 03:04:05",
"2008-01-02 03:04:05");
374 GeneralStringTest(
"2008-Jan-02:03:04:05",
"2008-01-02 03:04:05");
375 GeneralStringTest(
"2008-Jan-02:03:04",
"2008-01-02 03:04:00");
376 GeneralStringTest(
"2008-Jan-02:03",
"2008-01-02 03:00:00");
377 GeneralStringTest(
"2008-Jan-02",
"2008-01-02 00:00:00");
381 GeneralStringTest(
"2008-01-02 03:04:05",
"2008-01-02 03:04:05");
382 GeneralStringTest(
"2008-01-02:03:04:05",
"2008-01-02 03:04:05");
383 GeneralStringTest(
"2008-01-02:03:04",
"2008-01-02 03:04:00");
384 GeneralStringTest(
"2008-01-02:03",
"2008-01-02 03:00:00");
385 GeneralStringTest(
"2008-01-02",
"2008-01-02 00:00:00");
389 GeneralStringTest(
"00-00-0000:00:00:00", NULL);
390 GeneralStringTest(
"0000-00-00", NULL);
391 GeneralStringTest(
"00000000", NULL);
395 GeneralStringTest(
"13-Jan", NULL);
396 GeneralStringTest(
"02-Xxx-2008", NULL);
397 GeneralStringTest(
"02-Feb-2008:", NULL);
398 GeneralStringTest(
"02-Jan-2008:03-04-05", NULL);
413 static void TestDtParseDateTime(
void)
421 CU_ASSERT_EQUAL(status, 0);
422 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
425 CU_ASSERT_EQUAL(status, 0);
426 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
429 CU_ASSERT_EQUAL(status, 0);
430 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
433 CU_ASSERT_EQUAL(status, 0);
434 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
437 CU_ASSERT_EQUAL(status, 0);
438 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
441 CU_ASSERT_EQUAL(status, 0);
442 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
445 CU_ASSERT_EQUAL(status, 0);
446 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 5);
449 CU_ASSERT_EQUAL(status, 0);
450 CmpDtTm(&datetime, 2008, 1, 2, 3, 4, 0);
453 CU_ASSERT_EQUAL(status, 0);
454 CmpDtTm(&datetime, 2008, 1, 2, 3, 0, 0);
457 CU_ASSERT_EQUAL(status, 0);
458 CmpDtTm(&datetime, 2008, 1, 2, 0, 0, 0);
463 CU_ASSERT_NOT_EQUAL(status, 0);
466 CU_ASSERT_NOT_EQUAL(status, 0);
469 CU_ASSERT_NOT_EQUAL(status, 0);
472 CU_ASSERT_NOT_EQUAL(status, 0);
475 CU_ASSERT_NOT_EQUAL(status, 0);
478 CU_ASSERT_NOT_EQUAL(status, 0);
481 CU_ASSERT_NOT_EQUAL(status, 0);
484 CU_ASSERT_NOT_EQUAL(status, 0);
487 CU_ASSERT_NOT_EQUAL(status, 0);
490 CU_ASSERT_NOT_EQUAL(status, 0);
506 static void TestDtNow(
void)
514 (void) time(&curtime);
515 (void) localtime_r(&curtime, &time1);
516 status =
DtNow(&test);
517 (void) time(&curtime);
518 (void) localtime_r(&curtime, &time2);
520 CU_ASSERT_EQUAL(status, 0);
522 time1.tm_year == time2.tm_year ? time1.tm_year + 1900 : -1,
523 time1.tm_mon == time2.tm_mon ? time1.tm_mon + 1 : -1,
524 time1.tm_mday == time2.tm_mday ? time1.tm_mday : -1,
525 time1.tm_hour == time2.tm_hour ? time1.tm_hour : -1,
526 time1.tm_min == time2.tm_min ? time1.tm_min : -1,
527 time1.tm_sec == time2.tm_sec ? time1.tm_sec : -1
530 (void) time(&curtime);
531 (void) localtime_r(&curtime, &time1);
533 (void) time(&curtime);
534 (void) localtime_r(&curtime, &time2);
536 CU_ASSERT_EQUAL(status, 0);
538 time1.tm_year == time2.tm_year ? time1.tm_year + 1900 : -1,
539 time1.tm_mon == time2.tm_mon ? time1.tm_mon + 1 : -1,
540 time1.tm_mday == time2.tm_mday ? time1.tm_mday : -1,
541 time1.tm_hour == time2.tm_hour ? time1.tm_hour : -1,
542 time1.tm_min == time2.tm_min ? time1.tm_min : -1,
543 time1.tm_sec == time2.tm_sec ? time1.tm_sec : -1
566 static void CheckValidIntervalSeconds(
const char*
string,
int einterval)
572 CU_ASSERT_EQUAL(status, 0);
573 CU_ASSERT_EQUAL(interval, einterval);
582 static void TestDtIntervalSeconds(
void)
589 CheckValidIntervalSeconds(
"1", 1L);
590 CheckValidIntervalSeconds(
"234", 234L);
591 CheckValidIntervalSeconds(
"1223s", 1223L);
592 CheckValidIntervalSeconds(
"1m", 60L);
593 CheckValidIntervalSeconds(
"15m", 900L);
594 CheckValidIntervalSeconds(
"2h", 7200L);
595 CheckValidIntervalSeconds(
"24h", 86400L);
596 CheckValidIntervalSeconds(
"1d", 86400L);
597 CheckValidIntervalSeconds(
"7d", 604800L);
598 CheckValidIntervalSeconds(
"1w", 604800L);
599 CheckValidIntervalSeconds(
"52w", 31449600L);
604 CU_ASSERT_EQUAL(status, 4);
606 CU_ASSERT_EQUAL(status, 4);
608 CU_ASSERT_EQUAL(status, 4);
610 CU_ASSERT_EQUAL(status, 4);
614 CU_ASSERT_EQUAL(status, 3);
617 CU_ASSERT_EQUAL(status, 2);
620 CU_ASSERT_EQUAL(status, 2);
622 CU_ASSERT_EQUAL(status, 2);
625 CU_ASSERT_EQUAL(status, 1);
635 static void TestDtSecondsInterval(
void)
640 CU_ASSERT_STRING_EQUAL(buffer,
"1209601s");
643 CU_ASSERT_STRING_EQUAL(buffer,
"2w");
646 CU_ASSERT_STRING_EQUAL(buffer,
"1209599s");
649 CU_ASSERT_STRING_EQUAL(buffer,
"259201s");
652 CU_ASSERT_STRING_EQUAL(buffer,
"3d");
655 CU_ASSERT_STRING_EQUAL(buffer,
"259199s");
658 CU_ASSERT_STRING_EQUAL(buffer,
"14401s");
661 CU_ASSERT_STRING_EQUAL(buffer,
"4h");
664 CU_ASSERT_STRING_EQUAL(buffer,
"14399s");
667 CU_ASSERT_STRING_EQUAL(buffer,
"301s");
670 CU_ASSERT_STRING_EQUAL(buffer,
"5m");
673 CU_ASSERT_STRING_EQUAL(buffer,
"299s");
676 CU_ASSERT_STRING_EQUAL(buffer,
"0s");
699 static void CheckDtDateDiff(
const char* date1,
const char* date2,
int status,
705 act_status =
DtDateDiff(date1, date2, &act_result);
706 CU_ASSERT_EQUAL(status, act_status);
708 CU_ASSERT_EQUAL(result, act_result);
714 static void TestDtDateDiff(
void)
718 CheckDtDateDiff(
"2001-01-01 00:00:02",
"2001-01-01 00:00:01", 0, 1);
719 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-01 00:00:02", 0, -1);
721 CheckDtDateDiff(
"2001-01-01 00:01:02",
"2001-01-01 00:00:01", 0, 61);
722 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-01 00:01:02", 0, -61);
724 CheckDtDateDiff(
"2001-01-01 02:01:02",
"2001-01-01 00:00:01", 0, 7261);
725 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-01 02:01:02", 0, -7261);
727 CheckDtDateDiff(
"2001-01-02 02:01:02",
"2001-01-01 00:00:01", 0, 93661);
728 CheckDtDateDiff(
"2001-01-01 00:00:01",
"2001-01-02 02:01:02", 0, -93661);
732 CheckDtDateDiff(NULL, NULL, 3, 0);
733 CheckDtDateDiff(
"2001-01-01 23:12:22", NULL, 3, 0);
734 CheckDtDateDiff(
"2001-01-01 23:12:22",
"", 3, 0);
735 CheckDtDateDiff(NULL,
"2001-01-01 23:12:22", 3, 0);
736 CheckDtDateDiff(
"",
"2001-01-01 23:12:22", 3, 0);
737 CheckDtDateDiff(
"2001-01-01 23:12:22",
"fred", 2, 0);
738 CheckDtDateDiff(
"fred",
"2001-01-01 23:12:22", 1, 0);
756 static void CheckValidXMLIntervalSeconds(
const char*
string,
int einterval,
int estatus)
762 CU_ASSERT_EQUAL(status, estatus);
763 CU_ASSERT_EQUAL(interval, einterval);
772 static void TestDtXMLIntervalSeconds(
void)
781 CU_ASSERT_EQUAL(status, 0);
782 CU_ASSERT_EQUAL(interval, 1);
786 CU_ASSERT_EQUAL(status, 0);
787 CU_ASSERT_EQUAL(interval, 234);
789 CheckValidXMLIntervalSeconds(
"P1223S", 1223L, 0);
790 CheckValidXMLIntervalSeconds(
"PT1M", 60L, 0);
791 CheckValidXMLIntervalSeconds(
"PT15M", 900L, 0);
792 CheckValidXMLIntervalSeconds(
"P2H", 7200L, 0);
793 CheckValidXMLIntervalSeconds(
"PT2H", 7200L, 0);
794 CheckValidXMLIntervalSeconds(
"P24H", 86400L, 0);
795 CheckValidXMLIntervalSeconds(
"PT24H", 86400L, 0);
796 CheckValidXMLIntervalSeconds(
"P1D", 86400L, 0);
797 CheckValidXMLIntervalSeconds(
"P7D", 604800L, 0);
798 CheckValidXMLIntervalSeconds(
"P1W", 604800L, 0);
799 CheckValidXMLIntervalSeconds(
"P52W", 31449600L, 0);
802 CU_ASSERT_EQUAL(status, 0);
803 CU_ASSERT_EQUAL(interval, -60);
805 CheckValidXMLIntervalSeconds(
"PT1223S", 1223L, 0);
808 CheckValidXMLIntervalSeconds(
"P1W1DT2H2M7S", 698527L, 0);
809 CheckValidXMLIntervalSeconds(
"P1Y1W1DT2H2M7S", 32234527L, -1);
810 CheckValidXMLIntervalSeconds(
"P1Y2M1W1DT2H2M7S", 37591327L, -1);
813 CheckValidXMLIntervalSeconds(
"P1M", 2678400L, -1);
814 CheckValidXMLIntervalSeconds(
"P15M", 40176000L, -1);
818 CU_ASSERT_EQUAL(status, -1);
819 CU_ASSERT_EQUAL(interval, 31536000);
825 CU_ASSERT_EQUAL(status, 4);
827 CU_ASSERT_EQUAL(status, 4);
829 CU_ASSERT_EQUAL(status, 4);
831 CU_ASSERT_EQUAL(status, 4);
835 CU_ASSERT_EQUAL(status, 3);
838 CU_ASSERT_EQUAL(status, 3);
845 CU_ASSERT_EQUAL(status, 2);
847 CU_ASSERT_EQUAL(status, 2);
850 CU_ASSERT_EQUAL(status, 2);
874 {
"DtNumeric", TestDtNumeric},
875 {
"DtAppendTime", TestDtAppendTime},
876 {
"DtGeneral", TestDtGeneral},
877 {
"DtGeneralString", TestDtGeneralString},
878 {
"DtParseDateTime", TestDtParseDateTime},
879 {
"DtNow", TestDtNow},
880 {
"DtIntervalSeconds", TestDtIntervalSeconds},
881 {
"DtSecondsInterval", TestDtSecondsInterval},
882 {
"DtDateDiff", TestDtDateDiff},
883 {
"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)