diff -r 008c75a5e08d -r 644b648173b0 librazor/test-pfu.c --- a/librazor/test-pfu.c Mon Jul 04 10:48:18 2016 +0100 +++ b/librazor/test-pfu.c Thu Jul 14 11:43:16 2016 +0100 @@ -25,6 +25,7 @@ #include #endif #include "razor.h" +#include "razor-internal.h" #ifdef MSWIN_API static int is_ascii_letter(char c) @@ -104,6 +105,64 @@ return r; } +static int test_abs(const char *abspath, const char *path) +{ + char *s; + int r; + + s = razor_abspath(path); + + if (s && abspath) + r = strcmp(s, abspath); + else + r = (s != abspath); + + if (r) { + fprintf(stderr, "Fail: razor_abspath(\"%s\")", path); + if (s) + fprintf(stderr, " returns \"%s\", expected", s); + else + fprintf(stderr, " fails, expected"); + if (abspath) + fprintf(stderr, " \"%s\"\n", abspath); + else + fprintf(stderr, " failure\n"); + } + + free(s); + + return r; +} + +static int test_ptu(const char *uri, const char *path) +{ + char *s; + int r; + + s = razor_path_to_uri(path); + + if (s && uri) + r = strcmp(s, uri); + else + r = (s != uri); + + if (r) { + fprintf(stderr, "Fail: razor_path_to_uri(\"%s\")", path); + if (s) + fprintf(stderr, " returns \"%s\", expected", s); + else + fprintf(stderr, " fails, expected"); + if (uri) + fprintf(stderr, " \"%s\"\n", uri); + else + fprintf(stderr, " failure\n"); + } + + free(s); + + return r; +} + #ifdef MSWIN_API UINT saved_cp; @@ -116,6 +175,20 @@ int main(int argc, char *argv[]) { int r = 0; + const char *tmpdir; + char *tempdir, *s; + + tmpdir = getenv("TMPDIR"); + if (!tmpdir || !*tmpdir) + tmpdir = "/tmp"; + + tempdir = razor_concat(tmpdir, "/test-pfu-XXXXXX", NULL); + + if (!mkdtemp(tempdir) || chdir(tempdir) < 0) { + perror(tempdir); + free(tempdir); + exit(1); + } #ifdef MSWIN_API atexit(cleanup_on_exit); @@ -136,5 +209,31 @@ r |= test_pfu("file:///var/log/22%20%e0%b8%aa%e0%b8%b4%e0%b8%87%e0%b8%ab%e0%b8%b2%e0%b8%84%e0%b8%a1%202014", "/var/log/22 สิงหาคม 2014"); + s = razor_concat(tempdir, "/file.txt", NULL); + r |= test_abs(s, "file.txt"); + free(s); + + s = razor_concat(tempdir, "/dir/../file.txt", NULL); + r |= test_abs(s, "dir/../file.txt"); + free(s); + + s = razor_concat(tempdir, "/../file.txt", NULL); + r |= test_abs(s, "../file.txt"); + free(s); + + s = razor_concat(tempdir, "/dir/../../file.txt", NULL); + r |= test_abs(s, "dir/../../file.txt"); + free(s); + + r |= test_ptu("file:file.txt", "file.txt"); + r |= test_ptu("file:file.txt", "dir/../file.txt"); + + s = razor_concat("file:", tmpdir, "/file.txt", NULL); + r |= test_ptu(s, "../file.txt"); + r |= test_ptu(s, "dir/../../file.txt"); + free(s); + + free(tempdir); + exit(r ? 1 : 0); }