From beab8dad5a3fe9e9c5058fbcbf3dca07bbbfc98c Mon Sep 17 00:00:00 2001 From: Yu Qing Date: Sun, 27 Nov 2016 18:34:52 +0800 Subject: [PATCH] add test_char_convert_loader.c --- src/char_convert_loader.c | 5 ++- src/tests/Makefile | 2 +- src/tests/test.ini | 22 ++++++++++ src/tests/test_char_convert_loader.c | 62 ++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 src/tests/test.ini create mode 100644 src/tests/test_char_convert_loader.c diff --git a/src/char_convert_loader.c b/src/char_convert_loader.c index 01be465..eaf72f2 100644 --- a/src/char_convert_loader.c +++ b/src/char_convert_loader.c @@ -19,7 +19,7 @@ int char_convert_loader_init(FastCharConverter *pCharConverter, const IniItem *items, const int count) { - char_convert_loader_init(pCharConverter, NULL, 0); + char_converter_init(pCharConverter, NULL, 0); return char_convert_loader_add(pCharConverter, items, count); } @@ -85,6 +85,9 @@ static int char_convert_loader_parse(const char *s, unsigned char *out_char) case 's': *out_char = ' '; break; + case '\\': + *out_char = '\\'; + break; default: logError("file: "__FILE__", line: %d, " "invalid char string: %s", __LINE__, s); diff --git a/src/tests/Makefile b/src/tests/Makefile index 3977c77..a62a9cb 100644 --- a/src/tests/Makefile +++ b/src/tests/Makefile @@ -5,7 +5,7 @@ INC_PATH = -I/usr/include/fastcommon LIB_PATH = -lfastcommon -lpthread ALL_PRGS = test_allocator test_skiplist test_multi_skiplist test_mblock test_blocked_queue \ - test_id_generator test_ini_parser test_char_convert + test_id_generator test_ini_parser test_char_convert test_char_convert_loader all: $(ALL_PRGS) .c: diff --git a/src/tests/test.ini b/src/tests/test.ini new file mode 100644 index 0000000..aa54ed2 --- /dev/null +++ b/src/tests/test.ini @@ -0,0 +1,22 @@ + +[AccessLogSpaceCharConvert] +# format: src = dest +# src can be a printable char or a backslash char pair such as \t +# src and dest can be ASCII code as \x##, such as \x20 for the SPACE char + +# dest can be a printable char, ASCII code as \x##, +# or quoted two chars as backslash follow by a char, such as "\t" + +# extended backslash char pairs: +# \0 for the ASCII 0 character +# \s for the SPACE character + +\0 = "\0" +\t = "\t" +\n = "\n" +\v = "\v" +\f = "\f" +\r = "\r" +\s = "\s" +\\ = "\\" + diff --git a/src/tests/test_char_convert_loader.c b/src/tests/test_char_convert_loader.c new file mode 100644 index 0000000..32bc398 --- /dev/null +++ b/src/tests/test_char_convert_loader.c @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "logger.h" +#include "ini_file_reader.h" +#include "char_convert_loader.h" +#include "char_converter.h" + +int main(int argc, char *argv[]) +{ + IniContext context; + IniItem *items; + int result; + int count; + int input_len; + int out_len; + char input[8 * 1024]; + char output[10 * 1024]; + FastCharConverter converter; + + if (argc >= 2) { + input_len = snprintf(input, sizeof(input), "%s", argv[1]); + } else { + input_len = read(0, input, sizeof(input) - 1); + if (input_len < 0) { + fprintf(stderr, "read from stdin fail"); + return errno; + } + *(input + input_len) = '\0'; + } + log_init(); + + if ((result=iniLoadFromFile("test.ini", &context)) != 0) + { + return result; + } + + iniPrintItems(&context); + + printf("input_len: %d\n%s\n\n", (int)strlen(input), input); + + items = iniGetSectionItems("AccessLogSpaceCharConvert", &context, &count); + result = char_convert_loader_init(&converter, items, count); + if (result != 0) { + return result; + } + + iniFreeContext(&context); + + count = fast_char_convert(&converter, input, input_len, + output, &out_len, sizeof(output)); + printf("count: %d\n", count); + printf("out_len: %d\n%.*s\n", out_len, out_len, output); + return 0; +} +