add test_char_convert_loader.c

pull/10/head
Yu Qing 2016-11-27 18:34:52 +08:00
parent 2d123299a9
commit beab8dad5a
4 changed files with 89 additions and 2 deletions

View File

@ -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);

View File

@ -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:

22
src/tests/test.ini Normal file
View File

@ -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"
\\ = "\\"

View File

@ -0,0 +1,62 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <inttypes.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/stat.h>
#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;
}