[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/6] tests: cover more realpath scenarios
From: |
Eric Blake |
Subject: |
[PATCH 3/6] tests: cover more realpath scenarios |
Date: |
Wed, 14 Mar 2012 14:38:14 -0600 |
'realpath --relative-base --relative-to' is identical to
--relative-base=--relative-to, so the test wasn't covering what
it claimed. Expose recent fixes for handling of // on systems
where // is distinct, and for --relative-base=/. Add test that
exposes our design decision that --relative-base that is not a
prefix of --relative-to is a no-op (if we later change behavior,
we will also have to change that part of the test).
* tests/misc/realpath: Fix typo. Add some tests.
---
tests/misc/realpath | 61 ++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 56 insertions(+), 5 deletions(-)
diff --git a/tests/misc/realpath b/tests/misc/realpath
index 8a1f336..1b83a04 100755
--- a/tests/misc/realpath
+++ b/tests/misc/realpath
@@ -19,18 +19,35 @@
. "${srcdir=.}/init.sh"; path_prepend_ ../src
print_ver_ realpath
+stat_single=$(stat -c %d:%i /) || framework_failure_
+stat_double=$(stat -c %d:%i //) || framework_failure_
+double_slash=//
+if test x"$stat_single" = x"$stat_double"; then
+ double_slash=/
+fi
+nl='
+'
+
+test -d /dev || framework_failure_
+
# Setup dir, file, symlink structure
-mkdir -p dir1/dir2
-ln -s dir1/dir2 ldir2
-touch dir1/f dir1/dir2/f
+mkdir -p dir1/dir2 || framework_failure_
+ln -s dir1/dir2 ldir2 || framework_failure_
+touch dir1/f dir1/dir2/f || framework_failure_
+ln -s / one || framework_failure_
+ln -s // two || framework_failure_
+ln -s /// three || framework_failure_
-# Basic operaion
+# Basic operation
realpath -Pqz . >/dev/null || fail=1
+# Operand is required
+realpath >/dev/null && fail=1
# --relative-base and --relative-to require params
-realpath --relative-base --relative-to . && fail=1
+realpath --relative-base . --relative-to . && fail=1
# --relative-base requires --relative-to
realpath --relative-base=dir1 . && fail=1
+realpath --relative-base --relative-to=dir1 . && fail=1
# -e --relative-* require directories
realpath -e --relative-to=dir1/f --relative-base=. . && fail=1
@@ -38,6 +55,7 @@ realpath -e --relative-to=dir1/ --relative-base=. . || fail=1
# Note NUL params are unconditionally rejected by canonicalize_filename_mode
realpath -m '' && fail=1
+realpath --relative-base= --relative-to=. . && fail=1
# symlink resolution
this=$(realpath .)
@@ -55,4 +73,37 @@ test $(realpath -sm --relative-to=/usr /) = '..' || fail=1
# Ensure no redundant leading '../' present, as was the case in v8.15
test $(realpath -sm --relative-to=/ /usr) = 'usr' || fail=1
+# Ensure --relative-base works
+out=$(realpath -sm --relative-base=/usr --relative-to=/usr /tmp /usr) || fail=1
+test "$out" = "/tmp$nl." || fail=1
+out=$(realpath -sm --relative-base=/ --relative-to=/ / /usr) || fail=1
+test "$out" = ".${nl}usr" || fail=1
+# For now, --relative-base must be a prefix of --relative-to, or all output
+# will be absolute (compare to MacOS 'relpath -d dir start end').
+out=$(realpath -sm --relative-base=/usr/local --relative-to=/usr \
+ /usr /usr/local) || fail=1
+test "$out" = "/usr${nl}/usr/local" || fail=1
+
+# Ensure // is handled correctly.
+test "$(realpath / // ///)" = "/$nl$double_slash$nl/" || fail=1
+test "$(realpath one two three)" = "/$nl$double_slash$nl/" || fail=1
+out=$(realpath -sm --relative-to=/ / // /dev //dev) || fail=1
+if test $double_slash = //; then
+ test "$out" = ".$nl//${nl}dev$nl//dev" || fail=1
+else
+ test "$out" = ".$nl.${nl}dev${nl}dev" || fail=1
+fi
+out=$(realpath -sm --relative-to=// / // /dev //dev) || fail=1
+if test $double_slash = //; then
+ test "$out" = "/$nl.$nl/dev${nl}dev" || fail=1
+else
+ test "$out" = ".$nl.${nl}dev${nl}dev" || fail=1
+fi
+out=$(realpath --relative-base=/ --relative-to=// / //) || fail=1
+if test $double_slash = //; then
+ test "$out" = "/$nl//" || fail=1
+else
+ test "$out" = ".$nl." || fail=1
+fi
+
Exit $fail
--
1.7.7.6
- [PATCH 5/6] doc: clarify current realpath --relative-base behavior, (continued)
- [PATCH 5/6] doc: clarify current realpath --relative-base behavior, Eric Blake, 2012/03/14
- [PATCH 2/6] realpath: fix problems with root handling, Eric Blake, 2012/03/14
- [PATCH 6/6] realpath: let --relative-base work even as child of --relative-to, Eric Blake, 2012/03/14
- [PATCH 1/6] test: expose recent gnulib canonicalize bug, Eric Blake, 2012/03/14
- [PATCH 4/6] realpath: let --relative-to default to --relative-base, Eric Blake, 2012/03/14
- [PATCH 3/6] tests: cover more realpath scenarios,
Eric Blake <=
- Re: [PATCH 0/6] realpath cleanups, Pádraig Brady, 2012/03/14