1#!/bin/sh 2# 3# Copyright (c) 2015 Fujitsu Ltd. 4# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com> 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 2 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 14# the GNU General Public License for more details. 15# 16# Test which command with some basic options. 17# 18 19TST_ID="which01" 20TST_CNT=10 21TST_SETUP=setup 22TST_TESTFUNC=do_test 23TST_NEEDS_TMPDIR=1 24TST_NEEDS_CMDS="which" 25. tst_test.sh 26 27setup() 28{ 29 touch pname 30 chmod +x pname 31 PATH=$PATH:. 32 33 mkdir bin 34 touch bin/pname 35 chmod +x bin/pname 36 PATH=$PATH:./bin 37 38 alias pname='pname -i' 39} 40 41which_verify() 42{ 43 until [ -z "$1" ] 44 do 45 found="no" 46 for i in $1; do 47 if grep -q "$i" temp; then 48 found="yes" 49 fi 50 done 51 if [ "$found" != "yes" ]; then 52 echo "'$1' not found in:" 53 cat temp 54 echo 55 return 1 56 fi 57 shift 58 done 59} 60 61which_test() 62{ 63 local which_op=$1 64 local prog_name=$2 65 66 local which_cmd="which $which_op $prog_name" 67 68 if [ "$which_op" = "--read-alias" ] || [ "$which_op" = "-i" ] || \ 69 [ "$which_op" = "--skip-alias" ]; then 70 which_cmd="alias | $which_cmd" 71 fi 72 73 eval ${which_cmd} >temp 2>&1 74 if [ $? -ne 0 ]; then 75 grep -q -E "unknown option|invalid option|Usage" temp 76 if [ $? -eq 0 ]; then 77 tst_res TCONF "'${which_cmd}' not supported." 78 return 79 fi 80 81 tst_res TFAIL "'${which_cmd}' failed." 82 cat temp 83 return 84 fi 85 86 if [ $# -gt 2 ]; then 87 shift 2 88 which_verify "$@" 89 if [ $? -ne 0 ]; then 90 tst_res TFAIL "'${which_cmd}' failed, not expected." 91 return 92 fi 93 fi 94 95 tst_res TPASS "'${which_cmd}' passed." 96} 97 98do_test() 99{ 100 case $1 in 101 1) which_test "" "pname" "$PWD/pname ./pname";; 102 2) which_test "--all" "pname" "$PWD/bin/pname" "$PWD/pname";; 103 3) which_test "-a" "pname" "$PWD/bin/pname ./bin/pname" "$PWD/pname ./pname";; 104 4) which_test "--read-alias" "pname" "pname='pname -i'" "$PWD/pname";; 105 5) which_test "-i" "pname" "pname='pname -i'" "$PWD/pname";; 106 6) alias which='which --read-alias'; 107 which_test "--skip-alias" "pname" "$PWD/pname"; 108 unalias which;; 109 7) which_test "--version";; 110 8) which_test "-v";; 111 9) which_test "-V";; 112 10) which_test "--help";; 113 esac 114} 115 116tst_run 117