File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / confuse / tests / keyval.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 00:49:17 2021 UTC (3 years, 3 months ago) by misho
Branches: confuse, MAIN
CVS tags: v3_3, HEAD
confuse 3.3

    1: /* Test key=value pairs, e.g. env vars. a program should set to children */
    2: 
    3: #include "config.h"
    4: #include <string.h>
    5: #include <stdlib.h>
    6: #include "check_confuse.h"
    7: 
    8: static void check_byname(cfg_t *cfg, const char *key, const char *val)
    9: {
   10: 	char *value;
   11: 
   12: 	printf("Checking for key:%s, expected value %s\n", key, val);
   13: 
   14: 	value = cfg_getstr(cfg, key);
   15: 	printf("Found value %s\n", value);
   16: 
   17: 	fail_unless(value != NULL);
   18: 	fail_unless(!strcmp(value, val));
   19: }
   20: 
   21: static void check_keyval(cfg_t *cfg, unsigned int index, const char *key, const char *val)
   22: {
   23: 	cfg_opt_t *opt;
   24: 	int rc;
   25: 
   26: 	printf("Checking index %u for key:%s val:%s\n", index, key, val);
   27: 
   28: 	opt = cfg_getnopt(cfg, index);
   29: 	fail_unless(opt != NULL);
   30: 
   31: 	printf("Found key:%s val:%s\n", cfg_opt_name(opt), cfg_opt_getstr(opt));
   32: 
   33: 	rc =strcmp(cfg_opt_name(opt), key);
   34: 	fail_unless(rc == 0);
   35: 
   36: 	rc =strcmp(cfg_opt_getstr(opt), val);
   37: 	fail_unless(rc == 0);
   38: }
   39: 
   40: int main(void)
   41: {
   42: 	cfg_opt_t opts[] = {
   43: 		CFG_SEC("env", NULL, CFGF_KEYSTRVAL),
   44: 		CFG_END()
   45: 	};
   46: 	unsigned int num;
   47: 	cfg_t *cfg, *sec;
   48: 	cfg_opt_t *opt;
   49: 	char *key;
   50: 	int rc;
   51: 
   52: 	cfg = cfg_init(opts, CFGF_NONE);
   53: 	fail_unless(cfg != NULL);
   54: 
   55: 	rc = cfg_parse_buf(cfg, "env {\n"
   56: 			   "	foo=bar\n"
   57: 			   "	bar=for"
   58: 			   "	baz=qux\n"
   59: 			   "	bar=xyzzy\n" /* Should replace previous 'bar' */
   60: 			   "}");
   61: 	fail_unless(rc == CFG_SUCCESS);
   62: 
   63: 	sec = cfg_getsec(cfg, "env");
   64: 	fail_unless(sec != NULL);
   65: 
   66: 	/* Fuzz internals a bit, check for non-existing key */
   67: 	cfg_getstr(sec, "some-key-not-in-the-config-file");
   68: 
   69: 	num = cfg_num(sec);
   70: 	fail_unless(num == 3);	/* { foo, bar, baz } */
   71: 
   72: 	check_keyval(sec, 0, "foo", "bar");
   73: 	check_keyval(sec, 1, "bar", "xyzzy");
   74: 	check_keyval(sec, 2, "baz", "qux");
   75: 
   76: 	check_byname(sec, "foo", "bar");
   77: 	check_byname(sec, "baz", "qux");
   78: 	check_byname(sec, "bar", "xyzzy");
   79: 
   80: 	printf("PASS\n");
   81: 	cfg_free(cfg);
   82: 
   83: 	return 0;
   84: }
   85: 
   86: /**
   87:  * Local Variables:
   88:  *  indent-tabs-mode: t
   89:  *  c-file-style: "linux"
   90:  * End:
   91:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>