about summary refs log tree commit diff
path: root/Test/07cond.ztst
blob: 260e60b5ea9b90564045954688e196f716709f4b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# Tests corresponding to the texinfo node `Conditional Expressions'

%prep

  umask 077

  mkdir cond.tmp

  cd cond.tmp

  touch	unmodified

  touch zerolength
  print 'Garbuglio' >nonzerolength

  mkdir modish
  chmod g+s 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

# there may be strange cases where this doesn't work, e.g.
# inherited funny groups for directories via setgid.
  [[ -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