# Tests corresponding to the texinfo node `Conditional Expressions' %prep umask 077 mkdir cond.tmp cd cond.tmp touch unmodified touch zerolength chgrp $EGID zerolength print 'Garbuglio' >nonzerolength mkdir modish chmod g+xs modish chmod u+s modish chmod +t modish touch unmodish chmod 000 unmodish %test [[ -a zerolength && ! -a nonexistent ]] 0:-a cond # Find a block special file system. This is a little tricky. block=$(df / | awk ' $NF == "/" {print $1} $1 == "/" && substr($2,0,1) == "(" { if((l = index($2,")") - 2) < 0) l = length($2) - 1; print substr($2,2,l)}') && [[ -b $block && ! -b zerolength ]] 0:-b cond char=(/dev/tty*([1])) [[ -c $char && ! -c $block ]] 0:-c cond [[ -d . && ! -d zerolength ]] 0:-d cond [[ -e zerolength && ! -e nonexistent ]] 0:-e cond [[ -f zerolength && ! -f cond && ! -f $char && ! -f $block && ! -f . ]] 0:-f cond [[ -g modish && ! -g zerolength ]] 0:-g cond ln -s zerolength link [[ -h link && ! -h zerolength ]] 0:-h cond [[ -k modish && ! -k zerolength ]] 0:-k cond foo=foo bar= [[ -n $foo && ! -n $bar && ! -n '' ]] 0:-n cond [[ -o rcs && ! -o norcs && -o noerrexit && ! -o errexit ]] 0:-o cond if whence mkfifo >/dev/null; then mkfifo pipe else mknod pipe p fi [[ -p pipe && ! -p zerolength ]] 0:-p cond [[ -r zerolength && ! -r unmodish ]] 0:-r cond [[ -s nonzerolength && ! -s zerolength ]] 0:-s cond # no simple way of guaranteeing test for -t [[ -u modish && ! -u zerolength ]] 0:-u cond [[ -x $ZTST_srcdir/ztst.zsh && ! -x zerolength ]] 0:-x cond [[ -z $bar && -z '' && ! -z $foo ]] 0:-z cond [[ -L link && ! -L zerolength ]] 0:-L cond # hard to guarantee a file not owned by current uid [[ -O zerolength ]] 0:-O cond [[ -G zerolength ]] 0:-G cond # can't be bothered with -S cat unmodified touch newnewnew [[ -N newnewnew && ! -N unmodified ]] 0:-N cond [[ newnewnew -nt zerolength && ! (unmodified -nt zerolength) ]] 0:-nt cond [[ zerolength -ot newnewnew && ! (zerolength -ot unmodified) ]] 0:-ot cond [[ link -ef zerolength && ! (link -ef nonzerolength) ]] 0:-ef cond [[ foo = foo && foo != bar && foo == foo && foo != '' ]] 0:=, == and != conds [[ bar < foo && foo > bar ]] 0:< and > conds [[ $(( 3 + 4 )) -eq 0x07 && $(( 5 * 2 )) -ne 0x10 ]] 0:-eq and -ne conds [[ 3 -lt 04 && 05 -gt 2 ]] 0:-lt and -gt conds [[ 3 -le 3 && ! (4 -le 3) ]] 0:-le cond [[ 3 -ge 3 && ! (3 -ge 4) ]] 0:-ge cond [[ 1 -lt 2 || 2 -lt 2 && 3 -gt 4 ]] 0:|| and && in conds [[ -e /dev/fd/0 ]] 0:/dev/fd support in conds [[ ( -z foo && -z foo ) || -z foo ]] 1:complex conds with skipping [ '' != bar -a '' = '' ] 0:strings with `[' builtin [ `echo 0` -lt `echo 1` ] 0:substituion in `[' builtin