File: section_getopt.c

package info (click to toggle)
libconfuse 3.3-2%2Bdeb11u1
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 1,060 kB
  • sloc: ansic: 5,532; lex: 451; xml: 439; makefile: 211; sh: 39
file content (109 lines) | stat: -rw-r--r-- 3,894 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "check_confuse.h"
#include <string.h>

int main(void)
{
	static cfg_opt_t sub_opts[] = {
		CFG_INT("int", 1, CFGF_NONE),
		CFG_END()
	};

	cfg_opt_t opts[] = {
		CFG_SEC("single", sub_opts, CFGF_NONE),
		CFG_SEC("multi", sub_opts, CFGF_MULTI),
		CFG_SEC("multi-title", sub_opts, CFGF_TITLE | CFGF_MULTI),
		CFG_SEC("multi-title-no-dupes", sub_opts,
			CFGF_TITLE | CFGF_MULTI | CFGF_NO_TITLE_DUPES),
		CFG_END()
	};

	const char *config_data =
		"single { int = 11 }\n"
		"multi { int = 21 }\n"
		"multi { int = 22 }\n"
		"multi { int = 23 }\n"
		"multi-title name { int = 30 }\n"
		"multi-title name { int = 31 }\n"
		"multi-title odd  { int = 32 }\n"
		"multi-title-no-dupes name1 { int = 41 }\n"
		"multi-title-no-dupes name2 { int = 42 }\n"
		"multi-title-no-dupes name3 { int = 43 }\n";

	int rc;
	cfg_t *cfg = cfg_init(opts, CFGF_NONE);
	cfg_t *sec;

	fail_unless(cfg);

	rc = cfg_parse_buf(cfg, config_data);
	fail_unless(rc == CFG_SUCCESS);

	fail_unless(cfg_addtsec(cfg, "multi-title", "'a-very'silly|option\\title") != NULL);

	fail_unless(cfg_getint(cfg, "single|int") == 11);
	fail_unless(cfg_getint(cfg, "multi=0|int") == 21);
	fail_unless(cfg_getint(cfg, "multi=1|int") == 22);
	fail_unless(cfg_getint(cfg, "multi=2|int") == 23);
	fail_unless(cfg_getint(cfg, "multi-title=name|int") == 31);
	fail_unless(cfg_getint(cfg, "multi-title=odd|int") == 32);
	fail_unless(cfg_getint(cfg, "multi-title='\\'a-very\\'silly|option\\\\title'|int") == 1);
	fail_unless(cfg_getint(cfg, "multi-title-no-dupes=name1|int") == 41);
	fail_unless(cfg_getint(cfg, "multi-title-no-dupes=name2|int") == 42);
	fail_unless(cfg_getint(cfg, "multi-title-no-dupes=name3|int") == 43);
	sec = cfg_getsec(cfg, "single");
	fail_unless(cfg_getint(sec, "int") == 11);
	sec = cfg_getsec(cfg, "multi=0");
	fail_unless(cfg_getint(sec, "int") == 21);
	sec = cfg_getsec(cfg, "multi=1");
	fail_unless(cfg_getint(sec, "int") == 22);
	sec = cfg_getsec(cfg, "multi=2");
	fail_unless(cfg_getint(sec, "int") == 23);
	sec = cfg_getsec(cfg, "multi-title=name");
	fail_unless(cfg_getint(sec, "int") == 31);
	sec = cfg_getsec(cfg, "multi-title=odd");
	fail_unless(cfg_getint(sec, "int") == 32);
	sec = cfg_getsec(cfg, "multi-title='\\'a-very\\'silly|option\\\\title'");
	fail_unless(cfg_getint(sec, "int") == 1);
	sec = cfg_getsec(cfg, "multi-title-no-dupes=name1");
	fail_unless(cfg_getint(sec, "int") == 41);
	sec = cfg_getsec(cfg, "multi-title-no-dupes=name2");
	fail_unless(cfg_getint(sec, "int") == 42);
	sec = cfg_getsec(cfg, "multi-title-no-dupes=name3");
	fail_unless(cfg_getint(sec, "int") == 43);

	/* for backwards compat */
	fail_unless(cfg_getint(cfg, "multi|int") == 21);
	fail_unless(cfg_getint(cfg, "multi-title|int") == 31);
	fail_unless(cfg_getint(cfg, "multi-title-no-dupes|int") == 41);
	sec = cfg_getsec(cfg, "multi");
	fail_unless(cfg_getint(sec, "int") == 21);
	sec = cfg_getsec(cfg, "multi-title");
	fail_unless(cfg_getint(sec, "int") == 31);
	sec = cfg_getsec(cfg, "multi-title-no-dupes");
	fail_unless(cfg_getint(sec, "int") == 41);

	/* expected failures */
	fail_unless(cfg_getopt(cfg, "single=0|int") == NULL);
	fail_unless(cfg_getopt(cfg, "multi=4|int") == NULL);
	fail_unless(cfg_getopt(cfg, "multi-title=0|int") == NULL);
	fail_unless(cfg_getopt(cfg, "multi-title=bad|int") == NULL);
	fail_unless(cfg_getopt(cfg, "multi-title-no-dupes=0|int") == NULL);
	fail_unless(cfg_getopt(cfg, "multi-title-no-dupes=bad|int") == NULL);
	fail_unless(cfg_getsec(cfg, "single=0") == NULL);
	fail_unless(cfg_getsec(cfg, "multi=4") == NULL);
	fail_unless(cfg_getsec(cfg, "multi-title=0") == NULL);
	fail_unless(cfg_getsec(cfg, "multi-title=bad") == NULL);
	fail_unless(cfg_getsec(cfg, "multi-title-no-dupes=0") == NULL);
	fail_unless(cfg_getsec(cfg, "multi-title-no-dupes=bad") == NULL);

	cfg_free(cfg);

	return 0;
}

/**
 * Local Variables:
 *  indent-tabs-mode: t
 *  c-file-style: "linux"
 * End:
 */