From 8cfa4336fce7ad1ee3a4f73faed6ad4371ab5e27 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Fri, 2 Aug 2013 10:09:52 +0100 Subject: [PATCH] Added slre_replace() in the unit test --- slre.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/slre.c b/slre.c index 16e2a9e..3f65ff4 100644 --- a/slre.c +++ b/slre.c @@ -368,6 +368,34 @@ static int static_failed_tests = 0; if (!(expr)) FAIL(#expr, __LINE__); \ } while (0) +/* Regex must have exactly one bracket pair */ +static char *slre_replace(const char *regex, const char *buf, + const char *sub) { + char *s = NULL; + int n, n1, n2, n3, s_len, len = strlen(buf); + struct slre_cap cap = { NULL, 0 }; + + do { + s_len = s == NULL ? 0 : strlen(s); + if ((n = slre_match(regex, buf, len, &cap, NULL)) > 0) { + n1 = cap.ptr - buf, n2 = strlen(sub), + n3 = &buf[n] - &cap.ptr[cap.len]; + } else { + n1 = len, n2 = 0, n3 = 0; + } + s = realloc(s, s_len + n1 + n2 + n3 + 1); + memcpy(s + s_len, buf, n1); + memcpy(s + s_len + n1, sub, n2); + memcpy(s + s_len + n1 + n2, cap.ptr + cap.len, n3); + s[s_len + n1 + n2 + n3] = '\0'; + + buf += n > 0 ? n : len; + len -= n > 0 ? n : len; + } while (len > 0); + + return s; +} + int main(void) { const char *msg = ""; struct slre_cap caps[10]; @@ -457,6 +485,18 @@ int main(void) { } else { printf("Error parsing [%s]: [%s]\n", request, error_msg); } + + ASSERT(caps[1].len == 11); + ASSERT(memcmp(caps[1].ptr, "/index.html", caps[1].len) == 0); + } + + { + char *s = slre_replace("({{.+?}})", + "Good morning, {{foo}}. How are you, {{bar}}?", + "Bob"); + printf("%s\n", s); + ASSERT(strcmp(s, "Good morning, Bob. How are you, Bob?") == 0); + free(s); } printf("Unit test %s (total test: %d, failed tests: %d)\n",