Skip to content

Commit

Permalink
test: run testcases with POSIX absolute paths on Windows
Browse files Browse the repository at this point in the history
Some test cases are skipped on Windows by marking with POSIX prereq.
This is because arguments look like absolute paths (such as /a/b)
for regular Windows programs (*.exe executables, no bash scripts)
are changed to Windows paths (like C:/msysgit/a/b).

There is no cygpath nor equivalent on msysGit, but it is easy to
write one. New subcommand "mingw_path" is added in test-path-utils,
so that we can get the expected absolute paths on Windows. E.g.

    COMMAND LINE                        Linux output  Windows output
    ==================================  ============  ===============
    test-path-utils mingw_path /        /             C:/msysgit
    test-path-utils mingw_path /a/b/    /a/b/         C:/msysgit/a/b/

With this utility, most skipped test cases in t0060 can be turned on
to be tested correctly on Windows.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jiang Xin authored and Junio C Hamano committed Jun 26, 2013
1 parent db627fd commit abd4284
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 21 deletions.
44 changes: 23 additions & 21 deletions t/t0060-path-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ test_description='Test various path utilities'
. ./test-lib.sh

norm_path() {
expected=$(test-path-utils mingw_path "$2")
test_expect_success $3 "normalize path: $1 => $2" \
"test \"\$(test-path-utils normalize_path_copy '$1')\" = '$2'"
"test \"\$(test-path-utils normalize_path_copy '$1')\" = '$expected'"
}

relative_path() {
expected=$(test-path-utils mingw_path "$3")
test_expect_success $4 "relative path: $1 $2 => $3" \
"test \"\$(test-path-utils relative_path '$1' '$2')\" = '$3'"
"test \"\$(test-path-utils relative_path '$1' '$2')\" = '$expected'"
}

# On Windows, we are using MSYS's bash, which mangles the paths.
Expand All @@ -39,8 +41,8 @@ ancestor() {
test \"\$actual\" = '$expected'"
}

# Absolute path tests must be skipped on Windows because due to path mangling
# the test program never sees a POSIX-style absolute path
# Some absolute path tests should be skipped on Windows due to path mangling
# on POSIX-style absolute paths
case $(uname -s) in
*MINGW*)
;;
Expand Down Expand Up @@ -73,30 +75,30 @@ norm_path d1/s1//../s2/../../d2 d2
norm_path d1/.../d2 d1/.../d2
norm_path d1/..././../d2 d1/d2

norm_path / / POSIX
norm_path / /
norm_path // / POSIX
norm_path /// / POSIX
norm_path /. / POSIX
norm_path /. /
norm_path /./ / POSIX
norm_path /./.. ++failed++ POSIX
norm_path /../. ++failed++ POSIX
norm_path /../. ++failed++
norm_path /./../.// ++failed++ POSIX
norm_path /dir/.. / POSIX
norm_path /dir/sub/../.. / POSIX
norm_path /dir/sub/../../.. ++failed++ POSIX
norm_path /dir /dir POSIX
norm_path /dir// /dir/ POSIX
norm_path /./dir /dir POSIX
norm_path /dir/. /dir/ POSIX
norm_path /dir///./ /dir/ POSIX
norm_path /dir//sub/.. /dir/ POSIX
norm_path /dir/sub/../ /dir/ POSIX
norm_path /dir /dir
norm_path /dir// /dir/
norm_path /./dir /dir
norm_path /dir/. /dir/
norm_path /dir///./ /dir/
norm_path /dir//sub/.. /dir/
norm_path /dir/sub/../ /dir/
norm_path //dir/sub/../. /dir/ POSIX
norm_path /dir/s1/../s2/ /dir/s2/ POSIX
norm_path /d1/s1///s2/..//../s3/ /d1/s3/ POSIX
norm_path /d1/s1//../s2/../../d2 /d2 POSIX
norm_path /d1/.../d2 /d1/.../d2 POSIX
norm_path /d1/..././../d2 /d1/d2 POSIX
norm_path /dir/s1/../s2/ /dir/s2/
norm_path /d1/s1///s2/..//../s3/ /d1/s3/
norm_path /d1/s1//../s2/../../d2 /d2
norm_path /d1/.../d2 /d1/.../d2
norm_path /d1/..././../d2 /d1/d2

ancestor / / -1
ancestor /foo / 0
Expand Down Expand Up @@ -198,8 +200,8 @@ relative_path / /a/b/ ../../
relative_path /a/c /a/b/ ../c
relative_path /a/c /a/b ../c
relative_path /x/y /a/b/ ../../x/y
relative_path /a/b "<empty>" /a/b POSIX
relative_path /a/b "<null>" /a/b POSIX
relative_path /a/b "<empty>" /a/b
relative_path /a/b "<null>" /a/b
relative_path a/b/c/ a/b/ c/
relative_path a/b/c/ a/b c/
relative_path a/b//c a//b c
Expand Down
5 changes: 5 additions & 0 deletions test-path-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,11 @@ int main(int argc, char **argv)
return 0;
}

if (argc == 3 && !strcmp(argv[1], "mingw_path")) {
puts(argv[2]);
return 0;
}

if (argc == 4 && !strcmp(argv[1], "relative_path")) {
struct strbuf sb = STRBUF_INIT;
const char *in, *prefix, *rel;
Expand Down

0 comments on commit abd4284

Please sign in to comment.