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>