--- /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"));
+}
+