readlink.test 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/bin/bash
  2. [ -f testing.sh ] && . testing.sh
  3. #testing "name" "command" "result" "infile" "stdin"
  4. APWD="$(pwd -P)"
  5. testing "missing" "readlink notfound || echo yes" "yes\n" "" ""
  6. # simple tests on a file
  7. touch file
  8. testing "file" "readlink file || echo yes" "yes\n" "" ""
  9. testing "-f dir" "readlink -f ." "$APWD\n" "" ""
  10. testing "-f missing" "readlink -f notfound" "$APWD/notfound\n" "" ""
  11. ln -sf notfound link
  12. testing "link" "readlink link" "notfound\n" "" ""
  13. testing "links" "readlink link link" "notfound\nnotfound\n" "" ""
  14. testing "link->missing" "readlink -f link" "$APWD/notfound\n" "" ""
  15. ln -sf ../../ link
  16. testing "stays relative" "readlink link" "../../\n" "" ""
  17. rm link
  18. ln -sf file link
  19. testing "-f link->file" "readlink -f link" "$APWD/file\n" "" ""
  20. ln -sf . link
  21. testing "-f link->dir" "readlink -f link" "$APWD\n" "" ""
  22. ln -snf link link
  23. testing "link->link (recursive)" "readlink link" "link\n" "" ""
  24. testing "-f link->link (recursive)" \
  25. "readlink -f link 2>/dev/null || echo yes" "yes\n" "" ""
  26. testing "-q notlink" "readlink -q file || echo yes" "yes\n" "" ""
  27. testing "-q link" "readlink -q link && echo yes" "yes\n" "" ""
  28. testing "-q notfound" "readlink -q notfound || echo yes" "yes\n" "" ""
  29. testing "-e found" "readlink -e file" "$APWD/file\n" "" ""
  30. testing "-e notfound" \
  31. "readlink -e notfound 2>/dev/null || echo yes" "yes\n" "" ""
  32. testing "-nf ." "readlink -nf ." "$APWD" "" ""
  33. mkdir sub &&
  34. ln -s . here &&
  35. ln -s ./sub dir &&
  36. touch sub/bang || exit 1
  37. testing "-f multi" "readlink -f dir/../here/dir/bang" \
  38. "$APWD/sub/bang\n" "" ""
  39. testing "-f link/missing" "readlink -f dir/boing" \
  40. "$APWD/sub/boing\n" "" ""
  41. testing "-f /dev/null/file" \
  42. "readlink -f /dev/null/file 2>/dev/null || echo yes" "yes\n" "" ""
  43. testing "-m missing/dir" "readlink -m sub/two/three" "$APWD/sub/two/three\n" "" ""
  44. testing "-m missing/../elsewhere" "readlink -m sub/two/../../three" "$APWD/three\n" "" ""
  45. testing "-m file/dir" "readlink -m sub/bang/two 2>/dev/null || echo err" "err\n" "" ""
  46. rm link
  47. ln -sf / link || exit 1
  48. testing "-f link->/" "readlink -e link/dev" "/dev\n" "" ""
  49. testing "-f /dev/null/.." \
  50. "readlink -f link/null/.. 2>/dev/null || echo yes" "yes\n" "" ""
  51. rm -f link && ln -sf link link || exit 1
  52. testing "recurse" "readlink link" "link\n" "" ""
  53. rm file link sub/bang dir here
  54. rmdir sub
  55. # Make sure circular links don't run away.
  56. ln -s link1 link2
  57. ln -s link2 link1
  58. testing "follow recursive2" "readlink -f link1 || echo yes" \
  59. "yes\n" "" ""
  60. rm link1 link2