[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: added support for "chmod -r -w file", plus test cases
From: |
Paul Eggert |
Subject: |
Re: added support for "chmod -r -w file", plus test cases |
Date: |
Fri, 24 Sep 2004 17:01:20 -0700 |
User-agent: |
Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) |
Sorry, my previous email forgot to include the new file tests/chmod/usage.
Here it is:
#!/bin/sh
# Verify that chmod works correctly with odd option combinations.
if test "$VERBOSE" = yes; then
set -x
chmod --version
fi
. $srcdir/../lang-default
pwd=`pwd`
tmp=equals.$$
trap 'status=$?; cd $pwd; rm -rf $tmp && exit $status' 0
trap '(exit $?); exit' 1 2 13 15
framework_failure=0
mkdir $tmp || framework_failure=1
cd $tmp || framework_failure=1
if test $framework_failure = 1; then
echo "$0: failure in testing framework" 1>&2
(exit 1); exit 1
fi
fail=0
# Each line in this list is a set of arguments, followed by :,
# followed by the set of files it will attempt to chmod,
# or empty if the usage is erroneous.
# Many of these test cases are due to Glenn Fowler.
# These test cases assume GNU behavior for "options" like -w.
cases='
-- :
-- -- :
-- -- -- f : -- f
-- -- -w f : -w f
-- -- f : f
-- -w :
-- -w -- f : -- f
-- -w -w f : -w f
-- -w f : f
-- f :
-w :
-w -- :
-w -- -- f : -- f
-w -- -w f : -w f
-w -- f : f
-w -w :
-w -w -- f : f
-w -w -w f : f
-w -w f : f
-w f : f
f :
f -- :
f -w : f
f f :
'
all_files=`echo "$cases" | sed 's/.*://'`
old_IFS=$IFS
IFS='
'
for case in $cases; do
IFS=$old_IFS
args=`expr "$case" : ' *\(.*[^ ]\) *:'`
files=`expr "$case" : '.*: *\(.*\)'`
case $files in
'')
touch -- $all_files || framework_failure=1
chmod $args 2>/dev/null && fail=1
;;
?*)
touch -- $files || framework_failure=1
chmod $args || fail=1
for file in $files; do
rm -f -- $files && touch -- $files && rm -- $file || framework_failure=1
chmod $args 2>/dev/null && fail=1
done
;;
esac
done
if test $framework_failure = 1; then
echo "$0: failure in testing framework" 1>&2
fail=1
fi
(exit $fail); exit $fail