Annotation of embedaddon/confuse/tests/suite_list.c, revision 1.1
1.1 ! misho 1: #include "check_confuse.h"
! 2: #include <string.h>
! 3:
! 4: static cfg_t *cfg;
! 5: static int numopts = 0;
! 6:
! 7: static void list_setup(void)
! 8: {
! 9: cfg_opt_t subsec_opts[] =
! 10: {
! 11: CFG_STR_LIST("subsubstring", 0, CFGF_NONE),
! 12: CFG_INT_LIST("subsubinteger", 0, CFGF_NONE),
! 13: CFG_FLOAT_LIST("subsubfloat", 0, CFGF_NONE),
! 14: CFG_BOOL_LIST("subsubbool", 0, CFGF_NONE),
! 15: CFG_END()
! 16: };
! 17:
! 18: cfg_opt_t sec_opts[] =
! 19: {
! 20: CFG_STR_LIST("substring", "{subdefault1, subdefault2}", CFGF_NONE),
! 21: CFG_INT_LIST("subinteger", "{17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 300}", CFGF_NONE), /* 14 values */
! 22: CFG_FLOAT_LIST("subfloat", "{8.37}", CFGF_NONE),
! 23: CFG_BOOL_LIST("subbool", "{true}", CFGF_NONE),
! 24: CFG_SEC("subsection", subsec_opts, CFGF_MULTI | CFGF_TITLE),
! 25: CFG_END()
! 26: };
! 27:
! 28: cfg_opt_t opts[] =
! 29: {
! 30: CFG_STR_LIST("string", "{default1, default2, default3}", CFGF_NONE),
! 31: CFG_INT_LIST("integer", "{4711, 123456789}", CFGF_NONE),
! 32: CFG_FLOAT_LIST("float", "{0.42}", CFGF_NONE),
! 33: CFG_BOOL_LIST("bool", "{false, true, no, yes, off, on}", CFGF_NONE),
! 34: CFG_SEC("section", sec_opts, CFGF_MULTI),
! 35: CFG_END()
! 36: };
! 37:
! 38: cfg = cfg_init(opts, 0);
! 39: numopts = cfg_numopts(opts);
! 40: fail_unless(numopts == 5);
! 41:
! 42: memset(opts, 0, sizeof(opts));
! 43: memset(sec_opts, 0, sizeof(sec_opts));
! 44: memset(subsec_opts, 0, sizeof(subsec_opts));
! 45: }
! 46:
! 47: static void list_teardown(void)
! 48: {
! 49: cfg_free(cfg);
! 50: }
! 51:
! 52: static void list_string_test(void)
! 53: {
! 54: char *buf;
! 55:
! 56: fail_unless(cfg_size(cfg, "string") == 3);
! 57: fail_unless(cfg_opt_size(cfg_getopt(cfg, "string")) == 3);
! 58: fail_unless(strcmp(cfg_getnstr(cfg, "string", 0), "default1") == 0);
! 59: fail_unless(strcmp(cfg_getnstr(cfg, "string", 1), "default2") == 0);
! 60: fail_unless(strcmp(cfg_getnstr(cfg, "string", 2), "default3") == 0);
! 61: buf = "string = {\"manually\", 'set'}";
! 62: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 63: fail_unless(cfg_size(cfg, "string") == 2);
! 64: fail_unless(strcmp(cfg_getstr(cfg, "string"), "manually") == 0);
! 65: fail_unless(strcmp(cfg_getnstr(cfg, "string", 1), "set") == 0);
! 66: cfg_setstr(cfg, "string", "manually set");
! 67: fail_unless(strcmp(cfg_getstr(cfg, "string"), "manually set") == 0);
! 68: cfg_setnstr(cfg, "string", "foobar", 1);
! 69: fail_unless(strcmp(cfg_getnstr(cfg, "string", 1), "foobar") == 0);
! 70:
! 71: cfg_addlist(cfg, "string", 3, "foo", "bar", "baz");
! 72: fail_unless(cfg_size(cfg, "string") == 5);
! 73: fail_unless(strcmp(cfg_getnstr(cfg, "string", 3), "bar") == 0);
! 74:
! 75: cfg_setlist(cfg, "string", 3, "baz", "foo", "bar");
! 76: fail_unless(cfg_size(cfg, "string") == 3);
! 77: fail_unless(strcmp(cfg_getnstr(cfg, "string", 0), "baz") == 0);
! 78:
! 79: buf = "string += {gaz, 'onk'}";
! 80: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 81: fail_unless(cfg_size(cfg, "string") == 5);
! 82: fail_unless(strcmp(cfg_getnstr(cfg, "string", 3), "gaz") == 0);
! 83: fail_unless(strcmp(cfg_getnstr(cfg, "string", 4), "onk") == 0);
! 84: }
! 85:
! 86: static void list_integer_test(void)
! 87: {
! 88: char *buf;
! 89:
! 90: fail_unless(cfg_size(cfg, "integer") == 2);
! 91: fail_unless(cfg_opt_size(cfg_getopt(cfg, "integer")) == 2);
! 92:
! 93: fail_unless(cfg_getint(cfg, "integer") == 4711);
! 94: fail_unless(cfg_getnint(cfg, "integer", 1) == 123456789);
! 95: buf = "integer = {-46}";
! 96: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 97: fail_unless(cfg_size(cfg, "integer") == 1);
! 98: fail_unless(cfg_getnint(cfg, "integer", 0) == -46);
! 99: cfg_setnint(cfg, "integer", 999999, 1);
! 100: fail_unless(cfg_size(cfg, "integer") == 2);
! 101: fail_unless(cfg_getnint(cfg, "integer", 1) == 999999);
! 102:
! 103: cfg_addlist(cfg, "integer", 3, 11, 22, 33);
! 104: fail_unless(cfg_size(cfg, "integer") == 5);
! 105: fail_unless(cfg_getnint(cfg, "integer", 3) == 22);
! 106:
! 107: cfg_setlist(cfg, "integer", 3, 11, 22, 33);
! 108: fail_unless(cfg_size(cfg, "integer") == 3);
! 109: fail_unless(cfg_getnint(cfg, "integer", 0) == 11);
! 110:
! 111: buf = "integer += {-1234567890, 1234567890}";
! 112: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 113: fail_unless(cfg_size(cfg, "integer") == 5);
! 114: fail_unless(cfg_getnint(cfg, "integer", 3) == -1234567890);
! 115: fail_unless(cfg_getnint(cfg, "integer", 4) == 1234567890);
! 116: }
! 117:
! 118: static void list_float_test(void)
! 119: {
! 120: char *buf;
! 121:
! 122: fail_unless(cfg_size(cfg, "float") == 1);
! 123: fail_unless(cfg_opt_size(cfg_getopt(cfg, "float")) == 1);
! 124:
! 125: fail_unless(cfg_getfloat(cfg, "float") == 0.42);
! 126: fail_unless(cfg_getnfloat(cfg, "float", 0) == 0.42);
! 127:
! 128: buf = "float = {-46.777, 0.1, 0.2, 0.17, 17.123}";
! 129: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 130: fail_unless(cfg_opt_size(cfg_getopt(cfg, "float")) == 5);
! 131: fail_unless(cfg_getnfloat(cfg, "float", 0) == -46.777);
! 132: fail_unless(cfg_getnfloat(cfg, "float", 1) == 0.1);
! 133: fail_unless(cfg_getnfloat(cfg, "float", 2) == 0.2);
! 134: fail_unless(cfg_getnfloat(cfg, "float", 3) == 0.17);
! 135: fail_unless(cfg_getnfloat(cfg, "float", 4) == 17.123);
! 136:
! 137: cfg_setnfloat(cfg, "float", 5.1234e2, 1);
! 138: fail_unless(cfg_getnfloat(cfg, "float", 1) == 5.1234e2);
! 139:
! 140: cfg_addlist(cfg, "float", 1, 11.2233);
! 141: fail_unless(cfg_size(cfg, "float") == 6);
! 142: fail_unless(cfg_getnfloat(cfg, "float", 5) == 11.2233);
! 143:
! 144: cfg_setlist(cfg, "float", 2, .3, -18.17e-7);
! 145: fail_unless(cfg_size(cfg, "float") == 2);
! 146: fail_unless(cfg_getnfloat(cfg, "float", 0) == 0.3);
! 147: fail_unless(cfg_getnfloat(cfg, "float", 1) == -18.17e-7);
! 148:
! 149: buf = "float += {64.64, 1234.567890}";
! 150: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 151: fail_unless(cfg_size(cfg, "float") == 4);
! 152: fail_unless(cfg_getnfloat(cfg, "float", 2) == 64.64);
! 153: fail_unless(cfg_getnfloat(cfg, "float", 3) == 1234.567890);
! 154: }
! 155:
! 156: static void list_bool_test(void)
! 157: {
! 158: char *buf;
! 159:
! 160: fail_unless(cfg_size(cfg, "bool") == 6);
! 161: fail_unless(cfg_opt_size(cfg_getopt(cfg, "bool")) == 6);
! 162: fail_unless(cfg_getnbool(cfg, "bool", 0) == cfg_false);
! 163: fail_unless(cfg_getnbool(cfg, "bool", 1) == cfg_true);
! 164: fail_unless(cfg_getnbool(cfg, "bool", 2) == cfg_false);
! 165: fail_unless(cfg_getnbool(cfg, "bool", 3) == cfg_true);
! 166: fail_unless(cfg_getnbool(cfg, "bool", 4) == cfg_false);
! 167: fail_unless(cfg_getnbool(cfg, "bool", 5) == cfg_true);
! 168:
! 169: buf = "bool = {yes, yes, no, false, true}";
! 170: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 171: fail_unless(cfg_size(cfg, "bool") == 5);
! 172: fail_unless(cfg_getbool(cfg, "bool") == cfg_true);
! 173: fail_unless(cfg_getnbool(cfg, "bool", 1) == cfg_true);
! 174: fail_unless(cfg_getnbool(cfg, "bool", 2) == cfg_false);
! 175: fail_unless(cfg_getnbool(cfg, "bool", 3) == cfg_false);
! 176: fail_unless(cfg_getnbool(cfg, "bool", 4) == cfg_true);
! 177:
! 178: cfg_setbool(cfg, "bool", cfg_false);
! 179: fail_unless(cfg_getbool(cfg, "bool") == cfg_false);
! 180: cfg_setnbool(cfg, "bool", cfg_false, 1);
! 181: fail_unless(cfg_getnbool(cfg, "bool", 1) == cfg_false);
! 182:
! 183: cfg_addlist(cfg, "bool", 2, cfg_true, cfg_false);
! 184: fail_unless(cfg_opt_size(cfg_getopt(cfg, "bool")) == 7);
! 185: fail_unless(cfg_getnbool(cfg, "bool", 5) == cfg_true);
! 186:
! 187: cfg_setlist(cfg, "bool", 4, cfg_true, cfg_true, cfg_false, cfg_true);
! 188: fail_unless(cfg_size(cfg, "bool") == 4);
! 189: fail_unless(cfg_getnbool(cfg, "bool", 0) == cfg_true);
! 190: fail_unless(cfg_getnbool(cfg, "bool", 1) == cfg_true);
! 191: fail_unless(cfg_getnbool(cfg, "bool", 2) == cfg_false);
! 192: fail_unless(cfg_getnbool(cfg, "bool", 3) == cfg_true);
! 193:
! 194: buf = "bool += {false, false}";
! 195: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 196: fail_unless(cfg_size(cfg, "bool") == 6);
! 197: fail_unless(cfg_getnbool(cfg, "bool", 4) == cfg_false);
! 198: fail_unless(cfg_getnbool(cfg, "bool", 5) == cfg_false);
! 199: }
! 200:
! 201: static void list_section_test(void)
! 202: {
! 203: char *buf;
! 204: cfg_t *sec, *subsec;
! 205: cfg_opt_t *opt;
! 206:
! 207: /* size should be 0 before any section has been parsed. Since the
! 208: * CFGF_MULTI flag is set, there are no default sections.
! 209: */
! 210: fail_unless(cfg_size(cfg, "section") == 0);
! 211: fail_unless(cfg_opt_size(cfg_getopt(cfg, "section")) == 0);
! 212: fail_unless(cfg_size(cfg, "section|subsection") == 0);
! 213: fail_unless(cfg_opt_size(cfg_getopt(cfg, "section|subsection")) == 0);
! 214:
! 215: buf = "section {}"; /* add a section with default values */
! 216: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 217: fail_unless(cfg_size(cfg, "section") == 1);
! 218:
! 219: sec = cfg_getsec(cfg, "section");
! 220: fail_unless(sec != 0);
! 221: fail_unless(strcmp(sec->name, "section") == 0);
! 222: fail_unless(cfg_title(sec) == 0);
! 223:
! 224: opt = cfg_getopt(sec, "subsection");
! 225: fail_unless(opt != 0);
! 226: fail_unless(cfg_opt_size(opt) == 0);
! 227: fail_unless(cfg_size(sec, "subsection") == 0);
! 228:
! 229: fail_unless(strcmp(cfg_getnstr(sec, "substring", 0), "subdefault1") == 0);
! 230: subsec = cfg_getsec(cfg, "section|subsection");
! 231: fail_unless(subsec == 0);
! 232:
! 233: buf = "section { subsection 'foo' { subsubfloat = {1.2, 3.4, 5.6} } }";
! 234: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 235: fail_unless(cfg_size(cfg, "section") == 2);
! 236:
! 237: sec = cfg_getnsec(cfg, "section", 1);
! 238: fail_unless(sec != 0);
! 239: fail_unless(strcmp(cfg_title(cfg_getnsec(sec, "subsection", 0)), "foo") == 0);
! 240: fail_unless(cfg_size(sec, "subinteger") == 14);
! 241:
! 242: subsec = cfg_getsec(sec, "subsection");
! 243: fail_unless(cfg_size(subsec, "subsubfloat") == 3);
! 244: fail_unless(cfg_getnfloat(subsec, "subsubfloat", 2) == 5.6);
! 245: fail_unless(cfg_getnstr(subsec, "subsubstring", 0) == 0);
! 246:
! 247: sec = cfg_getnsec(cfg, "section", 0);
! 248: fail_unless(sec != 0);
! 249: fail_unless(cfg_size(sec, "subsection") == 0);
! 250: buf = "subsection 'bar' {}";
! 251: fail_unless(cfg_parse_buf(sec, buf) == CFG_SUCCESS);
! 252: fail_unless(cfg_size(sec, "subsection") == 1);
! 253: subsec = cfg_getnsec(sec, "subsection", 0);
! 254: fail_unless(subsec != 0);
! 255: fail_unless(strcmp(cfg_title(subsec), "bar") == 0);
! 256: fail_unless(cfg_getnfloat(subsec, "subsubfloat", 2) == 0);
! 257:
! 258: buf = "subsection 'baz' {}";
! 259: fail_unless(cfg_parse_buf(sec, buf) == CFG_SUCCESS);
! 260: fail_unless(cfg_gettsec(sec, "subsection", "bar") == subsec);
! 261: opt = cfg_getopt(sec, "subsection");
! 262: fail_unless(opt != 0);
! 263: fail_unless(cfg_gettsec(sec, "subsection", "baz") == cfg_opt_gettsec(opt, "baz"));
! 264: fail_unless(cfg_opt_gettsec(opt, "bar") == subsec);
! 265: fail_unless(cfg_opt_gettsec(opt, "foo") == 0);
! 266: fail_unless(cfg_gettsec(sec, "subsection", "section") == 0);
! 267:
! 268: fail_unless(cfg_gettsec(cfg, "section", "baz") == 0);
! 269: }
! 270:
! 271: static void parse_buf_test(void)
! 272: {
! 273: char *buf;
! 274:
! 275: fail_unless(cfg_parse_buf(cfg, 0) == CFG_SUCCESS);
! 276: fail_unless(cfg_parse_buf(cfg, "") == CFG_SUCCESS);
! 277:
! 278: buf = "bool = {true, true, false, wrong}";
! 279: fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
! 280: buf = "string = {foo, bar";
! 281: fail_unless(cfg_parse_buf(cfg, buf) == CFG_PARSE_ERROR);
! 282:
! 283: buf = "/* this is a comment */ bool = {true} /*// another comment */";
! 284: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 285:
! 286: buf = "/*/*/ bool = {true}// */";
! 287: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 288:
! 289: buf = "/////// this is a comment\nbool = {true} // another /* comment */";
! 290: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 291:
! 292: buf = "# this is a comment\nbool = {true} # another //* comment *//";
! 293: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 294:
! 295: buf = "string={/usr/local/}";
! 296: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 297: fail_unless(strcmp(cfg_getnstr(cfg, "string", 0), "/usr/local/") == 0);
! 298: }
! 299:
! 300: static void nonexistent_option_test(void)
! 301: {
! 302: char *buf;
! 303:
! 304: fail_unless(cfg_numopts(cfg->opts) == numopts);
! 305: fail_unless(cfg_getopt(cfg, "nonexistent") == 0);
! 306:
! 307: buf = "section {}";
! 308: fail_unless(cfg_parse_buf(cfg, buf) == CFG_SUCCESS);
! 309: fail_unless(cfg_getopt(cfg, "section|subnonexistent") == 0);
! 310: }
! 311:
! 312: int
! 313: main(void)
! 314: {
! 315: list_setup();
! 316:
! 317: list_string_test();
! 318: list_integer_test();
! 319: list_float_test();
! 320: list_bool_test();
! 321: list_section_test();
! 322: parse_buf_test();
! 323: nonexistent_option_test();
! 324:
! 325: list_teardown();
! 326:
! 327: return 0;
! 328: }
! 329:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>