which01.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0-or-later
  3. # Copyright (c) 2015 Fujitsu Ltd.
  4. # Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
  5. #
  6. # Test which command with some basic options.
  7. TST_CNT=10
  8. TST_SETUP=setup
  9. TST_TESTFUNC=do_test
  10. TST_NEEDS_TMPDIR=1
  11. TST_NEEDS_CMDS="which"
  12. . tst_test.sh
  13. setup()
  14. {
  15. touch pname
  16. chmod +x pname
  17. PATH=$PATH:.
  18. mkdir bin
  19. touch bin/pname
  20. chmod +x bin/pname
  21. PATH=$PATH:./bin
  22. alias pname='pname -i'
  23. }
  24. which_verify()
  25. {
  26. local IFS i j
  27. IFS="$IFS_FIRST_LEVEL"
  28. for i in $1; do
  29. found="no"
  30. IFS="$IFS_SECOND_LEVEL"
  31. for j in $i; do
  32. if grep -F -q "$j" temp; then
  33. found="yes"
  34. fi
  35. done
  36. if [ "$found" != "yes" ]; then
  37. echo "'$i' not found in:"
  38. cat temp
  39. echo
  40. return 1
  41. fi
  42. done
  43. }
  44. which_test()
  45. {
  46. local which_op=$1
  47. local prog_name=$2
  48. local which_cmd="which $which_op $prog_name"
  49. if [ "$which_op" = "--read-alias" ] || [ "$which_op" = "-i" ] || \
  50. [ "$which_op" = "--skip-alias" ]; then
  51. which_cmd="alias | $which_cmd"
  52. fi
  53. eval ${which_cmd} >temp 2>&1
  54. if [ $? -ne 0 ]; then
  55. grep -q -E "unknown option|invalid option|Usage" temp
  56. if [ $? -eq 0 ]; then
  57. tst_res TCONF "'${which_cmd}' not supported."
  58. return
  59. fi
  60. tst_res TFAIL "'${which_cmd}' failed."
  61. cat temp
  62. return
  63. fi
  64. if [ $# -gt 2 ]; then
  65. shift 2
  66. which_verify "$@"
  67. if [ $? -ne 0 ]; then
  68. tst_res TFAIL "'${which_cmd}' failed, not expected."
  69. return
  70. fi
  71. fi
  72. tst_res TPASS "'${which_cmd}' passed."
  73. }
  74. IFS_FIRST_LEVEL='^'
  75. IFS_SECOND_LEVEL='|'
  76. do_test()
  77. {
  78. case $1 in
  79. 1) which_test "" "pname" "$PWD/pname|./pname";;
  80. 2) which_test "-all" "pname" "$PWD/bin/pname|./bin/pname^$PWD/pname|./pname";;
  81. 3) which_test "-a" "pname" "$PWD/bin/pname|./bin/pname^$PWD/pname|./pname";;
  82. 4) which_test "--read-alias" "pname" "pname='pname -i'^$PWD/pname";;
  83. 5) which_test "-i" "pname" "pname='pname -i'^$PWD/pname";;
  84. 6) alias which='which --read-alias';
  85. which_test "--skip-alias" "pname" "$PWD/pname";
  86. unalias which;;
  87. 7) which_test "--version";;
  88. 8) which_test "-v";;
  89. 9) which_test "-V";;
  90. 10) which_test "--help";;
  91. esac
  92. }
  93. tst_run