src/test/str.c
branchnew-transport
changeset 168 a58ad50911fc
child 171 b54f393c3df0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/str.c	Mon May 04 20:55:04 2009 +0300
@@ -0,0 +1,83 @@
+/**
+ * @file
+ *
+ * Test functions for the str module.
+ */
+#include "assert.h"
+
+void assert_str_quote (size_t buf_size, const char *data, ssize_t len, const char *target, size_t out)
+{
+    char buf[buf_size];
+    
+    size_t ret = str_quote(buf, buf_size, data, len);
+
+    log_debug("str_quote(%zu, %zd) -> %s:%zu / %s:%zu", buf_size, len, buf, ret, target, out);
+
+    assert_strcmp(buf, target);
+    assert(ret == out);
+}
+
+void test_str_quote (void)
+{
+    log_info("testing str_quote()");
+
+    assert_str_quote(5,     NULL,           -1,     "NULL",         4   );
+    assert_str_quote(16,    "foo",          -1,     "'foo'",        5   );
+    assert_str_quote(16,    "foobar",       3,      "'foo'",        5   );
+    assert_str_quote(16,    "\r\n",         -1,     "'\\r\\n'",     6   );
+    assert_str_quote(16,    "\x13",         -1,     "'\\x13'",      6   );
+    assert_str_quote(16,    "x'y",          -1,     "'x\\'y'",      6   );
+    assert_str_quote(7,     "1234567890",   -1,     "'1'...",       12  );
+    assert_str_quote(9,     "1234567890",   -1,     "'123'...",     12  );
+}
+
+struct str_format_ctx {
+    const char *name;
+
+    const char *value;
+};
+
+err_t test_str_format_cb (const char *name, const char **value, ssize_t *value_len, void *arg)
+{
+    struct str_format_ctx *ctx = arg;
+
+    assert_strcmp(name, ctx->name);
+
+    *value = ctx->value;
+    *value_len = -1;
+
+    return SUCCESS;
+}
+
+void assert_str_format (const char *format, const char *name, const char *value, const char *out)
+{
+    struct str_format_ctx ctx = { name, value };
+    char buf[512];
+
+    assert_success(str_format(buf, sizeof(buf), format, test_str_format_cb, &ctx));
+    
+    log_debug("str_format(%s), { %s:%s } -> %s / %s", format, name, value, buf, out);
+
+    assert_strcmp(buf, out);
+}
+
+void test_str_format (void)
+{
+    log_info("test str_format()");
+
+    assert_str_format("foo", NULL, NULL, "foo");
+    assert_str_format("foo {bar} quux", "bar", "XXX", "foo XXX quux");
+}
+
+void test_dump_str (void)
+{
+    log_info("dumping example strings on stdout:");
+
+    log_debug("normal: %s", dump_str("Hello World"));
+    log_debug("escapes: %s", dump_str("foo\r\nbar\a\001"));
+    log_debug("length: %s", dump_strn("<-->**", 4));
+    log_debug("overflow: %s", dump_str( "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
+    log_debug("null: %s", dump_str(NULL));
+    log_debug("quote: %s", dump_str("foo\\bar'quux"));
+}
+