test: timestring2timeval: Add positive zone without subseconds
[libisds.git] / test / isds-timestring2timeval.c
blob751d669984d5609201036d1cefec43be46908a1b
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=%d, got=%d",
38 correct_timeval->tv_usec, (*new_timeval)->tv_usec);
40 PASS_TEST;
44 int main(int argc, char **argv) {
45 INIT_TEST("ISO date-time string to timeval conversion");
47 /* Generic */
48 struct timeval *output = NULL;
49 char *input = "2001-02-03T04:05:06.123456+01:45";
50 struct timeval time = {.tv_sec = 981166806, .tv_usec = 123456};
51 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
52 &output);
54 /* Negative time zone */
55 input = "2001-02-03T04:05:06.123456-01:45";
56 time.tv_sec = 981179406; time.tv_usec = 123456;
57 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
58 &output);
60 /* Shorten subseconds */
61 input = "2001-02-03T04:05:06.01-01:45";
62 time.tv_sec = 981179406; time.tv_usec = 10000;
63 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
64 &output);
66 /* No subseconds */
67 input = "2001-02-03T04:05:06+01:45";
68 time.tv_sec = 981166806; time.tv_usec = 0;
69 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
70 &output);
72 input = "2001-02-03T04:05:06-01:45";
73 time.tv_sec = 981179406; time.tv_usec = 0;
74 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
75 &output);
77 input = "2001-02-03T04:05:06Z";
78 time.tv_sec = 981173106; time.tv_usec = 0;
79 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
80 &output);
82 input = "2001-02-03T04:05:06";
83 time.tv_sec = 981173106; time.tv_usec = 0;
84 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
85 &output);
87 /* Zulu with subseconds */
88 input = "2001-02-03T04:05:06.123456+00:00";
89 time.tv_sec = 981173106; time.tv_usec = 123456;
90 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
91 &output);
93 input = "2001-02-03T04:05:06.123456Z";
94 time.tv_sec = 981173106; time.tv_usec = 123456;
95 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
96 &output);
98 input = "2001-02-03T04:05:06.123456";
99 time.tv_sec = 981173106; time.tv_usec = 123456;
100 TEST(input, test_timestring2timeval, BAD_CAST input, IE_SUCCESS, &time,
101 &output);
103 /* Invalid invocation */
104 input = "foo bar";
105 TEST(input, test_timestring2timeval, BAD_CAST input, IE_DATE, &time,
106 &output);
108 TEST("Empty input", test_timestring2timeval, BAD_CAST "", IE_DATE, &time,
109 &output);
111 TEST("NULL input", test_timestring2timeval, NULL, IE_INVAL, &time,
112 &output);
114 TEST("NULL output pointer", test_timestring2timeval, BAD_CAST "", IE_INVAL,
115 NULL, NULL);
117 SUM_TEST();