xref: /aosp_15_r20/external/toybox/tests/test.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
6*cf5a6c84SAndroid Build Coastguard Worker
7*cf5a6c84SAndroid Build Coastguard Workertestcmd "-- isn't parsed" "-- == -- && echo yes" "yes\n" "" ""
8*cf5a6c84SAndroid Build Coastguard Worker
9*cf5a6c84SAndroid Build Coastguard Worker# Number and position of args is important
10*cf5a6c84SAndroid Build Coastguard Workertestcmd 'no args is false' '; echo $?'  '1\n' '' ''
11*cf5a6c84SAndroid Build Coastguard Workertestcmd 'empty string is false' '""; echo $?' '1\n' '' ''
12*cf5a6c84SAndroid Build Coastguard Workertestcmd '1 arg is true if not empty string' '== ; echo $?' '0\n' '' ''
13*cf5a6c84SAndroid Build Coastguard Workertestcmd "1 arg isn't an operand" '-t 2>&1; echo $?' '0\n' '' ''
14*cf5a6c84SAndroid Build Coastguard Workertestcmd '2 args' '-e == ; echo $?' '1\n' '' ''
15*cf5a6c84SAndroid Build Coastguard Workertestcmd '3 args' '-e == -e ; echo $?' '0\n' '' ''
16*cf5a6c84SAndroid Build Coastguard Worker
17*cf5a6c84SAndroid Build Coastguard Worker# parse as operator before parsing as parentheses around one argument
18*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '\( == \) ; echo $?' '1\n' '' ''
19*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '\( == \( ; echo $?' '0\n' '' ''
20*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '\( "" \) ; echo $?' '1\n' '' ''
21*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '\( x \) ; echo $?' '0\n' '' ''
22*cf5a6c84SAndroid Build Coastguard Worker
23*cf5a6c84SAndroid Build Coastguard Worker# TODO: Should also have device and socket files, but requires root
24*cf5a6c84SAndroid Build Coastguard Worker
25*cf5a6c84SAndroid Build Coastguard Workermkdir d
26*cf5a6c84SAndroid Build Coastguard Workertouch f
27*cf5a6c84SAndroid Build Coastguard Workerln -s /dev/null L
28*cf5a6c84SAndroid Build Coastguard Workerecho nonempty > s
29*cf5a6c84SAndroid Build Coastguard Workermkfifo p
30*cf5a6c84SAndroid Build Coastguard Worker
31*cf5a6c84SAndroid Build Coastguard Workertype_test()
32*cf5a6c84SAndroid Build Coastguard Worker{
33*cf5a6c84SAndroid Build Coastguard Worker  for i in d f L s p n
34*cf5a6c84SAndroid Build Coastguard Worker  do
35*cf5a6c84SAndroid Build Coastguard Worker    "$C" $* $i && echo -n $i
36*cf5a6c84SAndroid Build Coastguard Worker  done
37*cf5a6c84SAndroid Build Coastguard Worker}
38*cf5a6c84SAndroid Build Coastguard Worker
39*cf5a6c84SAndroid Build Coastguard Workertesting "-b" "type_test -b" "" "" ""
40*cf5a6c84SAndroid Build Coastguard Workertesting "-c" "type_test -c" "L" "" ""
41*cf5a6c84SAndroid Build Coastguard Workertesting "-d" "type_test -d" "d" "" ""
42*cf5a6c84SAndroid Build Coastguard Workertesting "-e" "type_test -e" "dfLsp" "" ""
43*cf5a6c84SAndroid Build Coastguard Workertesting "-f" "type_test -f" "fs" "" ""
44*cf5a6c84SAndroid Build Coastguard Workertesting "-h" "type_test -h" "L" "" ""
45*cf5a6c84SAndroid Build Coastguard Workertesting "-L" "type_test -L" "L" "" ""
46*cf5a6c84SAndroid Build Coastguard Workertesting "-p" "type_test -p" "p" "" ""
47*cf5a6c84SAndroid Build Coastguard Workertesting "-S" "type_test -S" "" "" ""
48*cf5a6c84SAndroid Build Coastguard Workertesting "-s" "type_test -s" "ds" "" ""
49*cf5a6c84SAndroid Build Coastguard Workertesting "! -e" 'type_test ! -e' "n" "" ""
50*cf5a6c84SAndroid Build Coastguard Worker
51*cf5a6c84SAndroid Build Coastguard Workerrm f L s p
52*cf5a6c84SAndroid Build Coastguard Workerrmdir d
53*cf5a6c84SAndroid Build Coastguard Worker
54*cf5a6c84SAndroid Build Coastguard Worker# Alas can't expand to a redirect, so just test one success/fail
55*cf5a6c84SAndroid Build Coastguard Workertestcmd "-t" '-t 0 < /dev/null; echo $?' '1\n' '' ''
56*cf5a6c84SAndroid Build Coastguard Workertestcmd "-t2" '-t 0 < /dev/ptmx; echo $?' '0\n' '' ''
57*cf5a6c84SAndroid Build Coastguard Worker
58*cf5a6c84SAndroid Build Coastguard Worker# test -rwx each bit position and failure
59*cf5a6c84SAndroid Build Coastguard Workertouch walrus
60*cf5a6c84SAndroid Build Coastguard WorkerMASK=111
61*cf5a6c84SAndroid Build Coastguard Workerfor i in x w r k g u; do
62*cf5a6c84SAndroid Build Coastguard Worker  [ $i == k ] && MASK=1000
63*cf5a6c84SAndroid Build Coastguard Worker  XX=no
64*cf5a6c84SAndroid Build Coastguard Worker  [ $(id -u) -eq 0 ] && [ $i == r -o $i == w ] && XX=yes  # Root always has access
65*cf5a6c84SAndroid Build Coastguard Worker  # test everything off produces "off"
66*cf5a6c84SAndroid Build Coastguard Worker  chmod 000 walrus
67*cf5a6c84SAndroid Build Coastguard Worker  testcmd "-$i 0" "-$i walrus && echo yes || echo no" "$XX\n" "" ""
68*cf5a6c84SAndroid Build Coastguard Worker  chmod $((7777-$MASK)) walrus
69*cf5a6c84SAndroid Build Coastguard Worker  testcmd "-$i inverted" "-$i walrus && echo yes || echo no" "$XX\n" "" ""
70*cf5a6c84SAndroid Build Coastguard Worker  MASK=$(($MASK<<1))
71*cf5a6c84SAndroid Build Coastguard Workerdone
72*cf5a6c84SAndroid Build Coastguard Workerunset MASK
73*cf5a6c84SAndroid Build Coastguard Worker# Test setuid setgid sticky enabled
74*cf5a6c84SAndroid Build Coastguard Workerfor i in uu+s gg+s k+t; do
75*cf5a6c84SAndroid Build Coastguard Worker  chmod 000 walrus
76*cf5a6c84SAndroid Build Coastguard Worker  chmod ${i:1}+s walrus
77*cf5a6c84SAndroid Build Coastguard Worker  testcmd "-${i:0:1}" "-${i:0:1} walrus && echo yes" "yes\n" "" ""
78*cf5a6c84SAndroid Build Coastguard Workerdone
79*cf5a6c84SAndroid Build Coastguard Worker# test each ugo+rwx bit position individually
80*cf5a6c84SAndroid Build Coastguard WorkerXX=no
81*cf5a6c84SAndroid Build Coastguard Worker# Note: chmod 007 means everybody EXCEPT owner/group can access it. (Unix!)
82*cf5a6c84SAndroid Build Coastguard Worker[ $(id -u) -eq 0 ] && XX=yes  # Root always has access
83*cf5a6c84SAndroid Build Coastguard Workerfor i in 1 10 100; do for j in x w r; do
84*cf5a6c84SAndroid Build Coastguard Worker  chmod $i walrus
85*cf5a6c84SAndroid Build Coastguard Worker
86*cf5a6c84SAndroid Build Coastguard Worker  [ $i == 100 ] && XX=yes
87*cf5a6c84SAndroid Build Coastguard Worker  testcmd "-$j $i" "-$j walrus && echo yes || echo no" "$XX\n" "" ""
88*cf5a6c84SAndroid Build Coastguard Worker  i=$((i<<1))
89*cf5a6c84SAndroid Build Coastguard Workerdone; done
90*cf5a6c84SAndroid Build Coastguard Workerrm -f walrus
91*cf5a6c84SAndroid Build Coastguard Worker
92*cf5a6c84SAndroid Build Coastguard Worker# Not zero length, zero length, equals, not equals
93*cf5a6c84SAndroid Build Coastguard Workertestcmd "-n" "-n '' || echo yes" "yes\n" "" ""
94*cf5a6c84SAndroid Build Coastguard Workertestcmd "-n2" "-n a && echo yes" "yes\n" "" ""
95*cf5a6c84SAndroid Build Coastguard Workertestcmd "-z" "-z '' && echo yes" "yes\n" "" ""
96*cf5a6c84SAndroid Build Coastguard Workertestcmd "-z2" "-z a || echo yes" "yes\n" "" ""
97*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "a = b || echo yes" "yes\n" "" ""
98*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "'' = '' && echo yes" "yes\n" "" ""
99*cf5a6c84SAndroid Build Coastguard Workertestcmd "a != b" "a != b && echo yes" "yes\n" "" ""
100*cf5a6c84SAndroid Build Coastguard Workertestcmd "a != b" "a != a || echo yes" "yes\n" "" ""
101*cf5a6c84SAndroid Build Coastguard Worker
102*cf5a6c84SAndroid Build Coastguard Workerarith_test()
103*cf5a6c84SAndroid Build Coastguard Worker{
104*cf5a6c84SAndroid Build Coastguard Worker  $C -1 $1 1 && echo -n l
105*cf5a6c84SAndroid Build Coastguard Worker  $C 0 $1 0 && echo -n e
106*cf5a6c84SAndroid Build Coastguard Worker  $C -3 $1 -5 && echo -n g
107*cf5a6c84SAndroid Build Coastguard Worker}
108*cf5a6c84SAndroid Build Coastguard Worker
109*cf5a6c84SAndroid Build Coastguard Workertesting "-eq" "arith_test -eq" "e" "" ""
110*cf5a6c84SAndroid Build Coastguard Workertesting "-ne" "arith_test -ne" "lg" "" ""
111*cf5a6c84SAndroid Build Coastguard Workertesting "-gt" "arith_test -gt" "g" "" ""
112*cf5a6c84SAndroid Build Coastguard Workertesting "-ge" "arith_test -ge" "eg" "" ""
113*cf5a6c84SAndroid Build Coastguard Workertesting "-lt" "arith_test -lt" "l" "" ""
114*cf5a6c84SAndroid Build Coastguard Workertesting "-le" "arith_test -le" "le" "" ""
115*cf5a6c84SAndroid Build Coastguard Worker
116*cf5a6c84SAndroid Build Coastguard Workertouch oldfile -d 1970-01-01
117*cf5a6c84SAndroid Build Coastguard Workertouch newfile -d 2031-01-01
118*cf5a6c84SAndroid Build Coastguard Worker
119*cf5a6c84SAndroid Build Coastguard Workertestcmd "-ef" "newfile -ef newfile && echo yes" "yes\n" "" ""
120*cf5a6c84SAndroid Build Coastguard Workertestcmd "-ef2" "newfile -ef oldfile || echo no" "no\n" "" ""
121*cf5a6c84SAndroid Build Coastguard Workertestcmd "-ot" "oldfile -ot newfile && echo yes" "yes\n" "" ""
122*cf5a6c84SAndroid Build Coastguard Workertestcmd "-ot2" "oldfile -ot oldfile || echo no" "no\n" "" ""
123*cf5a6c84SAndroid Build Coastguard Workertestcmd "-nt" "newfile -nt oldfile && echo yes" "yes\n" "" ""
124*cf5a6c84SAndroid Build Coastguard Workertestcmd "-nt2" "oldfile -nt newfile || echo no" "no\n" "" ""
125*cf5a6c84SAndroid Build Coastguard Worker
126*cf5a6c84SAndroid Build Coastguard Workertesting "positional" "test -a == -a && echo yes" "yes\n" "" ""
127*cf5a6c84SAndroid Build Coastguard Workertesting "! stacks" 'test \! \! \! \! 2 -eq 2 && echo yes' "yes\n" "" ""
128*cf5a6c84SAndroid Build Coastguard Worker
129*cf5a6c84SAndroid Build Coastguard Worker# bash builtin "test" has these, but /usr/bin/test does not.
130*cf5a6c84SAndroid Build Coastguard Workertesting "<1" 'test abc \< def && echo yes' "yes\n" "" ""
131*cf5a6c84SAndroid Build Coastguard Workertesting "<2" 'test def \< abc || echo yes' "yes\n" "" ""
132*cf5a6c84SAndroid Build Coastguard Workertesting ">1" 'test abc \> def || echo yes' "yes\n" "" ""
133*cf5a6c84SAndroid Build Coastguard Workertesting ">2" 'test def \> abc && echo yes' "yes\n" "" ""
134*cf5a6c84SAndroid Build Coastguard Worker
135*cf5a6c84SAndroid Build Coastguard Worker# toyonly doesn't work with TOYFLAG_NOHELP
136*cf5a6c84SAndroid Build Coastguard Worker# bash only has this for [[ ]] but extra tests to _exclude_ silly...
137*cf5a6c84SAndroid Build Coastguard Worker#toyonly testcmd "=~" 'abc =~ a.c && echo yes' "yes\n" "" ""
138*cf5a6c84SAndroid Build Coastguard Worker#toyonly testcmd "=~ fail" 'abc =~ d.c; echo $?' '1\n' "" ""
139*cf5a6c84SAndroid Build Coastguard Worker#toyonly testcmd "=~ zero length match" 'abc =~ "1*" && echo yes' 'yes\n' '' ''
140*cf5a6c84SAndroid Build Coastguard Worker
141*cf5a6c84SAndroid Build Coastguard Worker# test ! = -o a
142*cf5a6c84SAndroid Build Coastguard Worker# test ! \( = -o a \)
143*cf5a6c84SAndroid Build Coastguard Worker# test \( ! = \) -o a
144*cf5a6c84SAndroid Build Coastguard Worker# test \( \)
145*cf5a6c84SAndroid Build Coastguard Worker
146*cf5a6c84SAndroid Build Coastguard Worker
147*cf5a6c84SAndroid Build Coastguard Worker# -e == -a
148*cf5a6c84SAndroid Build Coastguard Worker# -e == -a -o -d != -o
149*cf5a6c84SAndroid Build Coastguard Worker# \( "x" \) -a \) == \)
150*cf5a6c84SAndroid Build Coastguard Worker# \( ! ! ! -e \) \)
151*cf5a6c84SAndroid Build Coastguard Worker
152*cf5a6c84SAndroid Build Coastguard Worker#  // () -a (() -a () -o ()) -o ()
153*cf5a6c84SAndroid Build Coastguard Worker#  // x -a ( x -o x ) -a x
154*cf5a6c84SAndroid Build Coastguard Worker#  // x -o ( x -a x ) -a x -o x
155*cf5a6c84SAndroid Build Coastguard Worker
156*cf5a6c84SAndroid Build Coastguard Worker# trailing ! and (
157*cf5a6c84SAndroid Build Coastguard Worker# test \( ! ! ! -e \) \)
158*cf5a6c84SAndroid Build Coastguard Worker# test \( \( "" \) -a "" \) -a ""
159*cf5a6c84SAndroid Build Coastguard Worker# test !
160*cf5a6c84SAndroid Build Coastguard Worker# test \( \) == \) \) -a x
161*cf5a6c84SAndroid Build Coastguard Worker
162*cf5a6c84SAndroid Build Coastguard Worker# test \( "" \) -a \) == \)
163*cf5a6c84SAndroid Build Coastguard Worker# test \( "x" \) -a \) == \)
164*cf5a6c84SAndroid Build Coastguard Worker# test -e == -a
165*cf5a6c84SAndroid Build Coastguard Worker# test \( "" \)
166