diff options
Diffstat (limited to 'src/tc-strquote.c')
-rw-r--r-- | src/tc-strquote.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/tc-strquote.c b/src/tc-strquote.c new file mode 100644 index 0000000..f26ff54 --- /dev/null +++ b/src/tc-strquote.c @@ -0,0 +1,70 @@ +/* + * Behavior Correctness Test for HX_strquote + * Copyright Jan Engelhardt, 2013 + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the WTF Public License version 2 or + * (at your option) any later version. + */ +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <libHX/string.h> + +static const char input1[] = "\"Good\" ol' \\'escaped\\' strings"; +static const char output1a[] = "\"Good\" ol\\' \\\\\\'escaped\\\\\\' strings"; +static const char output1b[] = "\\\"Good\\\" ol' \\\\'escaped\\\\' strings"; +static const char output1c[] = "\"Good\" ol'' \\''escaped\\'' strings"; +static const char input2[] = "<p style=\"height: 1;\">Foo & \"bar\"</p>"; +static const char output2[] = + "<p style="height: 1;">Foo &amp; "bar"</p>"; +static const char input3[] = " #o=foo(*),ba\\r "; +static const char output3a[] = " #o=foo\\28\\2A\\29,ba\\5Cr "; +static const char output3b[] = "\\20\\23o\\3Dfoo(*)\\2Cba\\5Cr\\20"; +static const char output3c[] = "ICNvPWZvbygqKSxiYVxyIA=="; +static const char input4[] = "http://user:pass@host.de/~path/file(msvc);stuff.php?query[phpindex]=value&another=one;stuff"; +static const char output4[] = "http%3A%2F%2Fuser%3Apass%40host.de%2F~path%2Ffile%28msvc%29%3Bstuff.php%3Fquery%5Bphpindex%5D%3Dvalue%26another%3Done%3Bstuff"; +static const char input5[] = "echo hello `echo world`"; +static const char output5[] = "echo hello ``echo world``"; + +static int test(const char *input, unsigned int mode, const char *expect) +{ + char *output = HX_strquote(input, mode, NULL); + + if (output == NULL) { + fprintf(stderr, "HX_strquote returned NULL\n"); + return EXIT_FAILURE; + } + if (strcmp(output, expect) != 0) { + fprintf(stderr, "Input: %s\nOutput: %s\nExpected: %s\n", + input, output, expect); + free(output); + return EXIT_FAILURE; + } + free(output); + return EXIT_SUCCESS; +} + +int main(void) +{ +#define tst(a, b, c) \ + do { \ + int ret = test((a), (b), (c)); \ + if (ret != EXIT_SUCCESS) \ + return ret; \ + } while (false); + + if (HX_strquote(input1, ~0U, NULL) != NULL) + return EXIT_FAILURE; + tst(input1, HXQUOTE_SQUOTE, output1a); + tst(input1, HXQUOTE_DQUOTE, output1b); + tst(input1, HXQUOTE_SQLSQUOTE, output1c); + tst(input2, HXQUOTE_HTML, output2); + tst(input3, HXQUOTE_LDAPFLT, output3a); + tst(input3, HXQUOTE_LDAPRDN, output3b); + tst(input3, HXQUOTE_BASE64, output3c); + tst(input4, HXQUOTE_URIENC, output4); + tst(input5, HXQUOTE_SQLBQUOTE, output5); + return 0; +#undef tst +} |