Skip to content

Commit

Permalink
tests/unittests/uri_parse: generate more sophisticated error message
Browse files Browse the repository at this point in the history
  • Loading branch information
miri64 committed Apr 1, 2020
1 parent 4131537 commit 004126a
Showing 1 changed file with 31 additions and 20 deletions.
51 changes: 31 additions & 20 deletions tests/unittests/tests-uri_parser/tests-uri_parser.c
Expand Up @@ -24,22 +24,31 @@
{ .uri = u, .scheme = s, .userinfo = us, .host = h, .port = po, \
.path = pa, .query = q, .expected = e}

#define VEC_CHECK(comp, i) \
do { \
if (ures.comp == NULL) { \
TEST_ASSERT(validate_uris[i].comp[0] == '\0'); \
} \
else { \
TEST_ASSERT_EQUAL_INT(strlen(validate_uris[i].comp), \
ures.comp##_len); \
TEST_ASSERT_MESSAGE(0 == \
strncmp(ures.comp, \
validate_uris[i].comp, \
strlen(validate_uris[i].comp)), \
"Unexpected " # comp " member"); \
} \
#define VEC_CHECK(comp, i, vec_msg) \
do { \
if (ures.comp == NULL) { \
TEST_ASSERT(validate_uris[i].comp[0] == '\0'); \
} \
else { \
TEST_ASSERT_EQUAL_INT(strlen(validate_uris[i].comp), \
ures.comp##_len); \
vec_msg[0] = '\0'; \
stdimpl_strcat(vec_msg, "Unexpected " # comp " member \""); \
stdimpl_strcat(vec_msg, validate_uris[i].comp); \
stdimpl_strcat(vec_msg, "\" for \""); \
stdimpl_strcat(vec_msg, validate_uris[i].uri); \
stdimpl_strcat(vec_msg, "\""); \
TEST_ASSERT_MESSAGE(0 == \
strncmp(ures.comp, \
validate_uris[i].comp, \
strlen(validate_uris[i].comp)), \
vec_msg); \
} \
} while (0)

#define VEC_MSG_LEN (sizeof("Unexpected userinfo member \"\" for \"\"") + \
64U + 8U)

typedef struct {
char uri[64];
char scheme[8];
Expand Down Expand Up @@ -275,19 +284,21 @@ static const validate_t validate_uris[26] = {
0),
};

static char _failure_msg[VEC_MSG_LEN];

static void test_uri_parser__validate(void)
{
uri_parser_result_t ures;
for (unsigned i = 0; i < ARRAY_SIZE(validate_uris); i++) {
int res = uri_parser_process_string(&ures, validate_uris[i].uri);
TEST_ASSERT_EQUAL_INT(validate_uris[i].expected, res);
if (res == 0) {
VEC_CHECK(scheme, i);
VEC_CHECK(userinfo, i);
VEC_CHECK(host, i);
VEC_CHECK(port, i);
VEC_CHECK(path, i);
VEC_CHECK(query, i);
VEC_CHECK(scheme, i, _failure_msg);
VEC_CHECK(userinfo, i, _failure_msg);
VEC_CHECK(host, i, _failure_msg);
VEC_CHECK(port, i, _failure_msg);
VEC_CHECK(path, i, _failure_msg);
VEC_CHECK(query, i, _failure_msg);
}
}
}
Expand Down

0 comments on commit 004126a

Please sign in to comment.