test_common.c test_list.c tinytest.c test_cbtree.c \
test_utf8.c test_strpool.c test_pgutil.c test_regex.c \
test_cxalloc.c test_bits.c test_base.c test_netdb.c \
- test_cfparser.c test_endian.c test_hashtab.c
+ test_cfparser.c test_endian.c test_hashtab.c test_mdict.c
OBJS = $(addprefix obj/, $(SRCS:.c=.o))
HDRS = test_common.h test_config.h tinytest.h tinytest_macros.h
LIBS =
--- /dev/null
+#include <usual/mdict.h>
+
+#include <usual/string.h>
+
+#include "test_common.h"
+
+static const char *xget(struct MDict *d, const char *k)
+{
+ const char *val = mdict_get(d, k);
+ return val ? val : "NULL";
+}
+
+static void test_mdict(void *p)
+{
+ struct MDict *d;
+ struct MBuf buf;
+ const char *s;
+
+ d = mdict_new(USUAL_ALLOC);
+ str_check(xget(d, "key"), "NULL");
+ int_check(mdict_put(d, "key", "val"), 1);
+ int_check(mdict_put(d, "key2", ""), 1);
+ int_check(mdict_put(d, "key3", NULL), 1);
+ str_check(xget(d, "key"), "val");
+ str_check(xget(d, "key2"), "");
+ str_check(xget(d, "key3"), "NULL");
+
+ mbuf_init_dynamic(&buf);
+ int_check(mdict_urlencode(d, &buf), 1);
+ int_check(mbuf_write_byte(&buf, 0), 1);
+ str_check(mbuf_data(&buf), "key=val&key2=&key3");
+ mbuf_free(&buf);
+
+ mdict_free(d);
+
+ d = mdict_new(USUAL_ALLOC);
+ s = "key=val&key2=&key3";
+ int_check(mdict_urldecode(d, s, strlen(s)), 1);
+ str_check(xget(d, "key"), "val");
+ str_check(xget(d, "key2"), "");
+ str_check(xget(d, "key3"), "NULL");
+ mdict_free(d);
+end:;
+}
+
+
+/*
+ * Describe
+ */
+
+struct testcase_t mdict_tests[] = {
+ { "basic", test_mdict },
+ END_OF_TESTCASES
+};
+
+