From 32c8f08f624a6c0902329c7b7464ba9d535c52bd Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Mon, 5 May 2008 01:14:11 +0000 Subject: Match expected token data with that output by the lexer. Fix test #44's expected token data. svn path=/trunk/libcss/; revision=4125 --- test/data/lex/tests1.dat | 2 +- test/lex-auto.c | 61 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/test/data/lex/tests1.dat b/test/data/lex/tests1.dat index 8f7783c..86bad2b 100644 --- a/test/data/lex/tests1.dat +++ b/test/data/lex/tests1.dat @@ -352,7 +352,7 @@ EOF 'blah \ xyz' #expected -STRING:blah\n xyz +STRING:blah \n\txyz S EOF #reset diff --git a/test/lex-auto.c b/test/lex-auto.c index 9e2d018..82533d1 100644 --- a/test/lex-auto.c +++ b/test/lex-auto.c @@ -16,6 +16,9 @@ typedef struct exp_entry { css_token_type type; +#define EXP_ENTRY_TEXT_LEN (128) + char text[EXP_ENTRY_TEXT_LEN]; + size_t textLen; } exp_entry; typedef struct line_ctx { @@ -141,8 +144,6 @@ void parse_expected(line_ctx *ctx, const char *data, size_t len) css_token_type type = string_to_type(data, colon - data); - /** \todo expected token data */ - /* Append to list of expected tokens */ if (ctx->expused == ctx->explen) { size_t num = ctx->explen == 0 ? 4 : ctx->explen; @@ -158,6 +159,44 @@ void parse_expected(line_ctx *ctx, const char *data, size_t len) } ctx->exp[ctx->expused].type = type; + ctx->exp[ctx->expused].textLen = 0; + if (colon != data + len) { + const char *p = colon + 1; + bool escape = false; + + for (len = len - (colon + 1 - data); len > 0; len--, p++) { + char c; + + if (*p == '\\') { + escape = true; + continue; + } + + if (escape) { + switch (*p) { + case 'n': + c = 0xa; + break; + case 't': + c = 0x9; + break; + default: + c = *p; + break; + } + escape = false; + } else { + c = *p; + } + + ctx->exp[ctx->expused].text[ + ctx->exp[ctx->expused].textLen] = c; + ctx->exp[ctx->expused].textLen++; + + assert(ctx->exp[ctx->expused].textLen < + EXP_ENTRY_TEXT_LEN); + } + } ctx->expused++; } @@ -252,7 +291,23 @@ void run_test(const uint8_t *data, size_t len, exp_entry *exp, size_t explen) testnum, string_from_type(tok->type), string_from_type(exp[e].type), tok->line, tok->col); - assert(0); + assert(0 && "Types differ"); + } + + if (exp[e].textLen > 0) { + if (tok->data.len != exp[e].textLen) { + printf("%d: Got length %d, Expected %d\n", + testnum, tok->data.len, exp[e].textLen); + assert(0 && "Text lengths differ"); + } + + if (strncmp((char *) tok->data.ptr, exp[e].text, + tok->data.len) != 0) { + printf("%d: Got data '%.*s', Expected '%.*s'\n", + testnum, tok->data.len, tok->data.ptr, + exp[e].textLen, exp[e].text); + assert(0 && "Text differs"); + } } e++; -- cgit v1.2.3