Fix su_seconds_t handling
[libisds.git] / test / offline / isds-timestring2timeval.c
blob84600cd917351836fd1448ff45bb3e7a6f1716ad
1 #include "../test.h"
2 #include "isds.c"
4 static int test_timestring2timeval(const xmlChar *time, const isds_error error,
5 const struct timeval *correct_timeval, struct timeval **new_timeval) {
6 isds_error err;
8 err = timestring2timeval(time, new_timeval);
9 if (err != error)
10 FAIL_TEST("timestring2timeval() returned unexpected code: "
11 "expected=%s got=%s", isds_strerror(error), isds_strerror(err));
13 if (err) {
14 if (new_timeval && *new_timeval)
15 FAIL_TEST("timestring2timeval() failed as exprected "
16 "but did not freed output timeval structure")
17 else
18 PASS_TEST;
21 if (!correct_timeval) {
22 if (!new_timeval || !*new_timeval)
23 PASS_TEST
24 else
25 FAIL_TEST("timestring2timeval() did not returned NULL output "
26 "timeval struct as expected");
29 if (new_timeval && !*new_timeval)
30 FAIL_TEST("timestring2timeval() freed output timeval struct "
31 "unexpectedly");
33 if (correct_timeval->tv_sec != (*new_timeval)->tv_sec)
34 FAIL_TEST("Returned struct timeval differs in tv_sec: expected=%d, got=%d",
35 correct_timeval->tv_sec, (*new_timeval)->tv_sec);
36 if (correct_timeval->tv_usec != (*new_timeval)->tv_usec)
37 FAIL_TEST("Returned struct timeval differs in tv_usec: expected=%jd, got=%jd",
38 (intmax_t)correct_timeval->tv_usec,
39 (intmax_t)(*new_timeval)->tv_usec);
41 PASS_TEST;
45 int main(int argc, char **argv) {
46 INIT_TEST("ISO date-time string to timeval conversion");
48 /* Generic */
49 struct timeval *output = NULL;
50 char *input = "2001-02-03T04:05:06.123456+01:45";
51 struct timeval time = {.tv_sec = 981166806, .tv_usec = 123456};
52 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
53 &output);
55 /* Negative time zone */
56 input = "2001-02-03T04:05:06.123456-01:45";
57 time.tv_sec = 981179406; time.tv_usec = 123456;
58 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
59 &output);
61 /* Shorten subseconds */
62 input = "2001-02-03T04:05:06.01-01:45";
63 time.tv_sec = 981179406; time.tv_usec = 10000;
64 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
65 &output);
67 /* No subseconds */
68 input = "2001-02-03T04:05:06+01:45";
69 time.tv_sec = 981166806; time.tv_usec = 0;
70 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
71 &output);
73 input = "2001-02-03T04:05:06-01:45";
74 time.tv_sec = 981179406; time.tv_usec = 0;
75 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
76 &output);
78 input = "2001-02-03T04:05:06Z";
79 time.tv_sec = 981173106; time.tv_usec = 0;
80 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
81 &output);
83 input = "2001-02-03T04:05:06";
84 time.tv_sec = 981173106; time.tv_usec = 0;
85 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
86 &output);
88 /* Zulu with subseconds */
89 input = "2001-02-03T04:05:06.123456+00:00";
90 time.tv_sec = 981173106; time.tv_usec = 123456;
91 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
92 &output);
94 input = "2001-02-03T04:05:06.123456Z";
95 time.tv_sec = 981173106; time.tv_usec = 123456;
96 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
97 &output);
99 input = "2001-02-03T04:05:06.123456";
100 time.tv_sec = 981173106; time.tv_usec = 123456;
101 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
102 &output);
104 /* Invalid invocation */
105 input = "foo bar";
106 TEST(input, test_timestring2timeval, BAD_CAST input, IE_DATE, &time,
107 &output);
109 TEST("Empty input", test_timestring2timeval, BAD_CAST "", IE_DATE, &time,
110 &output);
112 TEST("NULL input", test_timestring2timeval, NULL, IE_INVAL, &time,
113 &output);
115 TEST("NULL output pointer", test_timestring2timeval, BAD_CAST "", IE_INVAL,
116 NULL, NULL);
118 SUM_TEST();