#!/bin/sh
#
# Copyright (c) 2015 Fujitsu Ltd.
# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
# the GNU General Public License for more details.
#
# Test which command with some basic options.
#
TST_CNT=10
TST_SETUP=setup
TST_TESTFUNC=do_test
TST_NEEDS_TMPDIR=1
TST_NEEDS_CMDS="which"
. tst_test.sh
setup()
{
touch pname
chmod +x pname
PATH=$PATH:.
mkdir bin
touch bin/pname
chmod +x bin/pname
PATH=$PATH:./bin
alias pname='pname -i'
}
which_verify()
{
local IFS i j
IFS="$IFS_FIRST_LEVEL"
for i in $1; do
found="no"
IFS="$IFS_SECOND_LEVEL"
for j in $i; do
if grep -F -q "$j" temp; then
found="yes"
fi
done
if [ "$found" != "yes" ]; then
echo "'$i' not found in:"
cat temp
echo
return 1
fi
done
}
which_test()
{
local which_op=$1
local prog_name=$2
local which_cmd="which $which_op $prog_name"
if [ "$which_op" = "--read-alias" ] || [ "$which_op" = "-i" ] || \
[ "$which_op" = "--skip-alias" ]; then
which_cmd="alias | $which_cmd"
fi
eval ${which_cmd} >temp 2>&1
if [ $? -ne 0 ]; then
grep -q -E "unknown option|invalid option|Usage" temp
if [ $? -eq 0 ]; then
tst_res TCONF "'${which_cmd}' not supported."
return
fi
tst_res TFAIL "'${which_cmd}' failed."
cat temp
return
fi
if [ $# -gt 2 ]; then
shift 2
which_verify "$@"
if [ $? -ne 0 ]; then
tst_res TFAIL "'${which_cmd}' failed, not expected."
return
fi
fi
tst_res TPASS "'${which_cmd}' passed."
}
IFS_FIRST_LEVEL='^'
IFS_SECOND_LEVEL='|'
do_test()
{
case $1 in
1) which_test "" "pname" "$PWD/pname|./pname";;
2) which_test "-all" "pname" "$PWD/bin/pname|./bin/pname^$PWD/pname|./pname";;
3) which_test "-a" "pname" "$PWD/bin/pname|./bin/pname^$PWD/pname|./pname";;
4) which_test "--read-alias" "pname" "pname='pname -i'^$PWD/pname";;
5) which_test "-i" "pname" "pname='pname -i'^$PWD/pname";;
6) alias which='which --read-alias';
which_test "--skip-alias" "pname" "$PWD/pname";
unalias which;;
7) which_test "--version";;
8) which_test "-v";;
9) which_test "-V";;
10) which_test "--help";;
esac
}
tst_run