1d30d7573SAndrew Jeffery
2d30d7573SAndrew Jeffery #include <assert.h>
3d30d7573SAndrew Jeffery #include <stdlib.h>
4d30d7573SAndrew Jeffery #include <stdint.h>
5d30d7573SAndrew Jeffery #include <stdio.h>
6d30d7573SAndrew Jeffery
7d30d7573SAndrew Jeffery #ifndef SYSCONFDIR
8d30d7573SAndrew Jeffery // Bypass compilation error due to -DSYSCONFDIR not provided
9d30d7573SAndrew Jeffery #define SYSCONFDIR
10d30d7573SAndrew Jeffery #endif
11d30d7573SAndrew Jeffery
12d30d7573SAndrew Jeffery #include "config.c"
13d30d7573SAndrew Jeffery
execute_test(const char * input,const char * key,const char * expected)14a72711afSAndrew Jeffery static void execute_test(const char *input, const char *key,
15a72711afSAndrew Jeffery const char *expected)
16d30d7573SAndrew Jeffery {
17d30d7573SAndrew Jeffery struct config *ctx;
18d30d7573SAndrew Jeffery const char *found;
19d30d7573SAndrew Jeffery char *buf;
20d30d7573SAndrew Jeffery
21d30d7573SAndrew Jeffery ctx = calloc(1, sizeof(*ctx));
22d30d7573SAndrew Jeffery buf = strdup(input);
23d30d7573SAndrew Jeffery config_parse(ctx, buf);
24d30d7573SAndrew Jeffery free(buf);
25d30d7573SAndrew Jeffery found = config_get_value(ctx, key);
26*2834c5b1SAndrew Jeffery if (!expected) {
27d30d7573SAndrew Jeffery assert(!found);
28*2834c5b1SAndrew Jeffery }
29d30d7573SAndrew Jeffery if (expected) {
30d30d7573SAndrew Jeffery assert(found);
31d30d7573SAndrew Jeffery assert(!strcmp(expected, found));
32d30d7573SAndrew Jeffery }
33d30d7573SAndrew Jeffery config_fini(ctx);
34d30d7573SAndrew Jeffery }
35d30d7573SAndrew Jeffery
test_config_parse_basic(void)36d30d7573SAndrew Jeffery static void test_config_parse_basic(void)
37d30d7573SAndrew Jeffery {
38d30d7573SAndrew Jeffery execute_test("tty = ttyS0", "tty", "ttyS0");
39d30d7573SAndrew Jeffery }
40d30d7573SAndrew Jeffery
test_config_parse_no_key(void)41d30d7573SAndrew Jeffery static void test_config_parse_no_key(void)
42d30d7573SAndrew Jeffery {
43d30d7573SAndrew Jeffery execute_test("= ttyS0", "tty", NULL);
44d30d7573SAndrew Jeffery }
45d30d7573SAndrew Jeffery
test_config_parse_no_value(void)46d30d7573SAndrew Jeffery static void test_config_parse_no_value(void)
47d30d7573SAndrew Jeffery {
48d30d7573SAndrew Jeffery execute_test("tty =", "tty", NULL);
49d30d7573SAndrew Jeffery }
50d30d7573SAndrew Jeffery
test_config_parse_no_operator(void)51d30d7573SAndrew Jeffery static void test_config_parse_no_operator(void)
52d30d7573SAndrew Jeffery {
53d30d7573SAndrew Jeffery execute_test("tty ttyS0", "tty", NULL);
54d30d7573SAndrew Jeffery }
55d30d7573SAndrew Jeffery
test_config_parse_no_spaces(void)56d30d7573SAndrew Jeffery static void test_config_parse_no_spaces(void)
57d30d7573SAndrew Jeffery {
58d30d7573SAndrew Jeffery execute_test("tty=ttyS0", "tty", "ttyS0");
59d30d7573SAndrew Jeffery }
60d30d7573SAndrew Jeffery
test_config_parse_empty(void)61d30d7573SAndrew Jeffery static void test_config_parse_empty(void)
62d30d7573SAndrew Jeffery {
63d30d7573SAndrew Jeffery execute_test("", "tty", NULL);
64d30d7573SAndrew Jeffery }
65d30d7573SAndrew Jeffery
main(void)66d30d7573SAndrew Jeffery int main(void)
67d30d7573SAndrew Jeffery {
68d30d7573SAndrew Jeffery test_config_parse_basic();
69d30d7573SAndrew Jeffery test_config_parse_no_key();
70d30d7573SAndrew Jeffery test_config_parse_no_value();
71d30d7573SAndrew Jeffery test_config_parse_no_operator();
72d30d7573SAndrew Jeffery test_config_parse_no_spaces();
73d30d7573SAndrew Jeffery test_config_parse_empty();
74d30d7573SAndrew Jeffery
75d30d7573SAndrew Jeffery return EXIT_SUCCESS;
76d30d7573SAndrew Jeffery }
77