summaryrefslogtreecommitdiffstats
path: root/Test/C02cond.ztst
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2005-02-02 17:02:16 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2005-02-02 17:02:16 +0000
commitc30917f6bb3a78a001d2928730d6b701da69bf5c (patch)
tree5f83d2af3c47bbf2ae24b9b5b46a56e25c6f4662 /Test/C02cond.ztst
parentUpdate files to 4.2.4 (diff)
downloadzsh-4.2.4.tar
zsh-4.2.4.tar.gz
zsh-4.2.4.tar.bz2
zsh-4.2.4.tar.lz
zsh-4.2.4.tar.xz
zsh-4.2.4.tar.zst
zsh-4.2.4.zip
Test -nt and FOO=BAR BAR=FOO echo bugszsh-4.2.4
Diffstat (limited to 'Test/C02cond.ztst')
-rw-r--r--Test/C02cond.ztst210
1 files changed, 210 insertions, 0 deletions
diff --git a/Test/C02cond.ztst b/Test/C02cond.ztst
new file mode 100644
index 000000000..3104a8680
--- /dev/null
+++ b/Test/C02cond.ztst
@@ -0,0 +1,210 @@
+# 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
+ chgrp $EGID modish
+
+ chmod 7710 modish # g+xs,u+s,+t
+ chmod g+s modish # two lines combined work around chmod bugs
+
+ touch unmodish
+ chmod 000 unmodish
+
+ print 'MZ' > cmd.exe
+ chmod +x cmd.exe
+%test
+
+ [[ -a zerolength && ! -a nonexistent ]]
+0:-a cond
+
+ # Find a block special file system. This is a little tricky.
+ block=$(find /dev(|ices)/ -type b -print)
+ if [[ -n $block ]]; then
+ [[ -b $block[(f)1] && ! -b zerolength ]]
+ else
+ print -u8 'Warning: Not testing [[ -b blockdevice ]] (no devices found)'
+ [[ ! -b zerolength ]]
+ fi
+0D:-b cond
+
+ # Use hardcoded /dev/tty because globbing inside /dev fails on Cygwin
+ char=/dev/tty
+ [[ -c $char && ! -c $zerolength ]]
+0:-c cond
+
+ [[ -d . && ! -d zerolength ]]
+0:-d cond
+
+ [[ -e zerolength && ! -e nonexistent ]]
+0:-e cond
+
+ if [[ -n $block ]]; then
+ [[ -f zerolength && ! -f cond && ! -f $char && ! -f $block[(f)1] && ! -f . ]]
+ else
+ print -u8 'Warning: Not testing [[ -f blockdevice ]] (no devices found)'
+ [[ -f zerolength && ! -f cond && ! -f $char && ! -f . ]]
+ fi
+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 ! grep '#define HAVE_FIFOS' $ZTST_testdir/../config.h; then
+ print -u8 'Warning: Not testing [[ -p pipe ]] (FIFOs not supported)'
+ [[ ! -p zerolength ]]
+ else
+ if whence mkfifo && mkfifo pipe || mknod pipe p; then
+ [[ -p pipe && ! -p zerolength ]]
+ else
+ print -u8 'Warning: Not testing [[ -p pipe ]] (cannot create FIFO)'
+ [[ ! -p zerolength ]]
+ fi
+ fi
+0dD:-p cond
+
+ if (( EUID == 0 )); then
+ print -u8 'Warning: Not testing [[ ! -r file ]] (root reads anything)'
+ [[ -r zerolength && -r unmodish ]]
+ else
+ [[ -r zerolength && ! -r unmodish ]]
+ fi
+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 cmd.exe && ! -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
+
+ sleep 1
+ cat unmodified
+ touch newnewnew
+ if [[ $OSTYPE == "cygwin" ]]; then
+ print -u8 "Warning: not testing [[ -N file ]] (not supported on Cygwin)"
+ true
+ else
+ [[ -N newnewnew && ! -N unmodified ]]
+ fi
+0:-N cond
+F:This test can fail on NFS-mounted filesystems as the access and
+F:modification times are not updated separately. The test will fail
+F:on HFS+ (Apple Mac OS X default) filesystems because access times
+F:are not recorded. This does not indicate a problem in the shell.
+
+ [[ 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
+
+ if ! grep '#define PATH_DEV_FD' $ZTST_testdir/../config.h; then
+ print -u8 "Warning: not testing [[ -e /dev/fd/0 ]] (/dev/fd not supported)"
+ true
+ else
+ [[ -e /dev/fd/0 ]]
+ fi
+0dD:/dev/fd support in conds handled by access
+
+ if ! grep '#define PATH_DEV_FD' $ZTST_testdir/../config.h; then
+ print -u8 "Warning: not testing [[ -O /dev/fd/0 ]] (/dev/fd not supported)"
+ true
+ else
+ [[ -O /dev/fd/0 ]]
+ fi
+0dD:/dev/fd support in conds handled by stat
+
+ [[ ( -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
+
+ fn() {
+ # careful: first file must exist to trigger bug
+ [[ -e unmodified ]] || print Where\'s my file\?
+ [[ unmodified -nt NonExistentFile ]]
+ print status = $?
+ }
+ fn
+0:-nt shouldn't abort on non-existent files
+>status = 1
+
+%clean
+ # This works around a bug in rm -f in some versions of Cygwin
+ chmod 644 unmodish