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