X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftal%2Fpath%2Ftest%2Frun-simplify.c;fp=ccan%2Ftal%2Fpath%2Ftest%2Frun-simplify.c;h=3d1b3514bf587e550d6617cb293bce9fcd040031;hp=0000000000000000000000000000000000000000;hb=892f59bdc1830443f87ad3aaeddaab2eeefb5937;hpb=1322fd3377cc817720f7552a80d56dba447bcfea diff --git a/ccan/tal/path/test/run-simplify.c b/ccan/tal/path/test/run-simplify.c new file mode 100644 index 00000000..3d1b3514 --- /dev/null +++ b/ccan/tal/path/test/run-simplify.c @@ -0,0 +1,244 @@ +#include +#include +#include + +int main(void) +{ + char cwd[1024], *path, *ctx = tal_strdup(NULL, "ctx"); + + plan_tests(87); + + if (!getcwd(cwd, sizeof(cwd))) + abort(); + + rmdir("run-simplify-foo"); + unlink("run-simplify-link"); + if (mkdir("run-simplify-foo", 0700) != 0) + abort(); + if (symlink("run-simplify-foo", "run-simplify-link") != 0) + abort(); + + /* Handling of . and .. */ + path = path_simplify(ctx, "."); + ok1(streq(path, ".")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./"); + ok1(streq(path, ".")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, ".."); + ok1(streq(path, "..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "../"); + ok1(streq(path, "..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./.."); + ok1(streq(path, "..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./../"); + ok1(streq(path, "..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./../."); + ok1(streq(path, "..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./.././"); + ok1(streq(path, "..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./../.."); + ok1(streq(path, "../..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./../../"); + ok1(streq(path, "../..")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + /* Handling of /. and /.. */ + path = path_simplify(ctx, "/"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "//"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/."); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/.."); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/../"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./.."); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./../"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./../."); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./.././"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./../.."); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./../../"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + /* Don't trace back over a symlink link */ + path = path_simplify(ctx, "run-simplify-foo"); + ok1(streq(path, "run-simplify-foo")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./run-simplify-foo"); + ok1(streq(path, "run-simplify-foo")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./run-simplify-foo/."); + ok1(streq(path, "run-simplify-foo")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "run-simplify-link"); + ok1(streq(path, "run-simplify-link")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./run-simplify-link"); + ok1(streq(path, "run-simplify-link")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "./run-simplify-link/."); + ok1(streq(path, "run-simplify-link")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "run-simplify-foo/.."); + ok1(streq(path, ".")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "run-simplify-foo//.."); + ok1(streq(path, ".")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "run-simplify-foo//../"); + ok1(streq(path, ".")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + /* This is expected to be a real directory. */ + path = path_simplify(ctx, "/tmp"); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/tmp/"); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/tmp/."); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/./tmp/."); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/../tmp/."); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/tmp/.."); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/tmp/../"); + ok1(streq(path, "/")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/tmp/../tmp"); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/tmp/../tmp/"); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + path = path_simplify(ctx, "/tmp/../tmp/."); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + + /* take tests */ + path = path_simplify(ctx, take(tal_strdup(ctx, "/tmp/../tmp/."))); + ok1(streq(path, "/tmp")); + ok1(tal_parent(path) == ctx); + tal_free(path); + ok1(tal_first(ctx) == NULL); + + path = path_simplify(ctx, take(NULL)); + ok1(!path); + ok1(tal_first(ctx) == NULL); + + tal_free(ctx); + + return exit_status(); +}