xref: /minix3/external/bsd/bind/dist/unit/atf-src/atf-sh/atf-check_test.sh (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#
2*00b67f09SDavid van Moolenbroek# Automated Testing Framework (atf)
3*00b67f09SDavid van Moolenbroek#
4*00b67f09SDavid van Moolenbroek# Copyright (c) 2008 The NetBSD Foundation, Inc.
5*00b67f09SDavid van Moolenbroek# All rights reserved.
6*00b67f09SDavid van Moolenbroek#
7*00b67f09SDavid van Moolenbroek# Redistribution and use in source and binary forms, with or without
8*00b67f09SDavid van Moolenbroek# modification, are permitted provided that the following conditions
9*00b67f09SDavid van Moolenbroek# are met:
10*00b67f09SDavid van Moolenbroek# 1. Redistributions of source code must retain the above copyright
11*00b67f09SDavid van Moolenbroek#    notice, this list of conditions and the following disclaimer.
12*00b67f09SDavid van Moolenbroek# 2. Redistributions in binary form must reproduce the above copyright
13*00b67f09SDavid van Moolenbroek#    notice, this list of conditions and the following disclaimer in the
14*00b67f09SDavid van Moolenbroek#    documentation and/or other materials provided with the distribution.
15*00b67f09SDavid van Moolenbroek#
16*00b67f09SDavid van Moolenbroek# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17*00b67f09SDavid van Moolenbroek# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18*00b67f09SDavid van Moolenbroek# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19*00b67f09SDavid van Moolenbroek# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*00b67f09SDavid van Moolenbroek# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21*00b67f09SDavid van Moolenbroek# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*00b67f09SDavid van Moolenbroek# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23*00b67f09SDavid van Moolenbroek# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*00b67f09SDavid van Moolenbroek# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25*00b67f09SDavid van Moolenbroek# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26*00b67f09SDavid van Moolenbroek# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27*00b67f09SDavid van Moolenbroek# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*00b67f09SDavid van Moolenbroek#
29*00b67f09SDavid van Moolenbroek
30*00b67f09SDavid van Moolenbroek# The Atf_Check and Atf-Shell variables are set by atf-sh.
31*00b67f09SDavid van Moolenbroek
32*00b67f09SDavid van Moolenbroekh_pass()
33*00b67f09SDavid van Moolenbroek{
34*00b67f09SDavid van Moolenbroek    cmd="$1"; shift
35*00b67f09SDavid van Moolenbroek
36*00b67f09SDavid van Moolenbroek    echo "Running [atf-check $*] against [${cmd}]"
37*00b67f09SDavid van Moolenbroek
38*00b67f09SDavid van Moolenbroek    cat >script.sh <<EOF
39*00b67f09SDavid van Moolenbroek#! ${Atf_Shell}
40*00b67f09SDavid van Moolenbroek${cmd}
41*00b67f09SDavid van MoolenbroekEOF
42*00b67f09SDavid van Moolenbroek    chmod +x script.sh
43*00b67f09SDavid van Moolenbroek
44*00b67f09SDavid van Moolenbroek    if ! ${Atf_Check} "${@}" ./script.sh >tmp; then
45*00b67f09SDavid van Moolenbroek        cat tmp
46*00b67f09SDavid van Moolenbroek        atf_fail "atf-check failed"
47*00b67f09SDavid van Moolenbroek    fi
48*00b67f09SDavid van Moolenbroek}
49*00b67f09SDavid van Moolenbroek
50*00b67f09SDavid van Moolenbroekh_fail()
51*00b67f09SDavid van Moolenbroek{
52*00b67f09SDavid van Moolenbroek    cmd="$1"; shift
53*00b67f09SDavid van Moolenbroek
54*00b67f09SDavid van Moolenbroek    echo "Running [atf-check $*] against [${cmd}]"
55*00b67f09SDavid van Moolenbroek
56*00b67f09SDavid van Moolenbroek    cat >script.sh <<EOF
57*00b67f09SDavid van Moolenbroek#! ${Atf_Shell}
58*00b67f09SDavid van Moolenbroek${cmd}
59*00b67f09SDavid van MoolenbroekEOF
60*00b67f09SDavid van Moolenbroek    chmod +x script.sh
61*00b67f09SDavid van Moolenbroek
62*00b67f09SDavid van Moolenbroek    if ${Atf_Check} "${@}" ./script.sh 2>tmp; then
63*00b67f09SDavid van Moolenbroek        cat tmp
64*00b67f09SDavid van Moolenbroek        atf_fail "atf-check succeeded but should fail"
65*00b67f09SDavid van Moolenbroek    fi
66*00b67f09SDavid van Moolenbroek}
67*00b67f09SDavid van Moolenbroek
68*00b67f09SDavid van Moolenbroekatf_test_case sflag_eq_ne
69*00b67f09SDavid van Moolenbroeksflag_eq_ne_head()
70*00b67f09SDavid van Moolenbroek{
71*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -s option using the 'eq' and 'ne' qualifiers"
72*00b67f09SDavid van Moolenbroek}
73*00b67f09SDavid van Moolenbroeksflag_eq_ne_body()
74*00b67f09SDavid van Moolenbroek{
75*00b67f09SDavid van Moolenbroek    h_pass "true" -s eq:0
76*00b67f09SDavid van Moolenbroek    h_pass "false" -s ne:0
77*00b67f09SDavid van Moolenbroek    h_pass "exit 255" -s eq:255
78*00b67f09SDavid van Moolenbroek    h_pass "exit 0" -s ne:255
79*00b67f09SDavid van Moolenbroek
80*00b67f09SDavid van Moolenbroek    h_fail "exit 256" -s eq:256
81*00b67f09SDavid van Moolenbroek    h_fail "exit -1" -s eq:-1
82*00b67f09SDavid van Moolenbroek    h_fail "true" -s ne:256
83*00b67f09SDavid van Moolenbroek    h_fail "true" -s ne:-1
84*00b67f09SDavid van Moolenbroek}
85*00b67f09SDavid van Moolenbroek
86*00b67f09SDavid van Moolenbroekatf_test_case sflag_exit
87*00b67f09SDavid van Moolenbroeksflag_exit_head()
88*00b67f09SDavid van Moolenbroek{
89*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -s option using the 'exit' qualifier"
90*00b67f09SDavid van Moolenbroek}
91*00b67f09SDavid van Moolenbroeksflag_exit_body()
92*00b67f09SDavid van Moolenbroek{
93*00b67f09SDavid van Moolenbroek    h_pass 'true' -s exit:0
94*00b67f09SDavid van Moolenbroek    h_pass 'false' -s not-exit:0
95*00b67f09SDavid van Moolenbroek    h_pass 'exit 255' -s exit:255
96*00b67f09SDavid van Moolenbroek    h_pass 'exit 0' -s not-exit:255
97*00b67f09SDavid van Moolenbroek
98*00b67f09SDavid van Moolenbroek    h_fail 'exit 256' -s exit:256
99*00b67f09SDavid van Moolenbroek    h_fail 'exit -1' -s exit:-1
100*00b67f09SDavid van Moolenbroek    h_fail 'true' -s not-exit:256
101*00b67f09SDavid van Moolenbroek    h_fail 'true' -s not-exit:-1
102*00b67f09SDavid van Moolenbroek
103*00b67f09SDavid van Moolenbroek    h_pass 'true' -s exit
104*00b67f09SDavid van Moolenbroek    h_pass 'false' -s exit
105*00b67f09SDavid van Moolenbroek    if ${Atf_Check} -s exit -x 'kill $$'; then
106*00b67f09SDavid van Moolenbroek        atf_fail "Signal detected as clean exit"
107*00b67f09SDavid van Moolenbroek    fi
108*00b67f09SDavid van Moolenbroek}
109*00b67f09SDavid van Moolenbroek
110*00b67f09SDavid van Moolenbroekatf_test_case sflag_ignore
111*00b67f09SDavid van Moolenbroeksflag_ignore_head()
112*00b67f09SDavid van Moolenbroek{
113*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -s option using the 'ignore' qualifier"
114*00b67f09SDavid van Moolenbroek}
115*00b67f09SDavid van Moolenbroeksflag_ignore_body()
116*00b67f09SDavid van Moolenbroek{
117*00b67f09SDavid van Moolenbroek    h_pass 'true' -s ignore
118*00b67f09SDavid van Moolenbroek    h_pass 'false' -s ignore
119*00b67f09SDavid van Moolenbroek    if ${Atf_Check} -s ignored -x 'kill $$'; then
120*00b67f09SDavid van Moolenbroek        atf_fail "Signal not ignored"
121*00b67f09SDavid van Moolenbroek    fi
122*00b67f09SDavid van Moolenbroek}
123*00b67f09SDavid van Moolenbroek
124*00b67f09SDavid van Moolenbroekatf_test_case sflag_signal
125*00b67f09SDavid van Moolenbroeksflag_signal_head()
126*00b67f09SDavid van Moolenbroek{
127*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -s option using the 'signal' qualifier"
128*00b67f09SDavid van Moolenbroek}
129*00b67f09SDavid van Moolenbroeksflag_signal_body()
130*00b67f09SDavid van Moolenbroek{
131*00b67f09SDavid van Moolenbroek    ${Atf_Check} -s signal:hup -x 'kill -1 $$' || atf_fail "Signal not detected"
132*00b67f09SDavid van Moolenbroek    ${Atf_Check} -s signal:sighup -x 'kill -1 $$' || atf_fail "Signal not" \
133*00b67f09SDavid van Moolenbroek        "detected"
134*00b67f09SDavid van Moolenbroek    ${Atf_Check} -s signal:1 -x 'kill -1 $$' || atf_fail "Signal not detected"
135*00b67f09SDavid van Moolenbroek    ${Atf_Check} -s signal -x 'kill -1 $$' || atf_fail "Signal not detected"
136*00b67f09SDavid van Moolenbroek
137*00b67f09SDavid van Moolenbroek    ${Atf_Check} -s not-signal:kill -x 'kill -9 $$' && \
138*00b67f09SDavid van Moolenbroek        atf_fail "not-signal:kill matched kill -9"
139*00b67f09SDavid van Moolenbroek    ${Atf_Check} -s not-signal:kill -x 'kill -1 $$' || \
140*00b67f09SDavid van Moolenbroek        atf_fail "not-signal:kill did not match kill -1"
141*00b67f09SDavid van Moolenbroek
142*00b67f09SDavid van Moolenbroek    h_fail 'true' -s signal
143*00b67f09SDavid van Moolenbroek    h_fail 'false' -s signal
144*00b67f09SDavid van Moolenbroek}
145*00b67f09SDavid van Moolenbroek
146*00b67f09SDavid van Moolenbroekatf_test_case xflag
147*00b67f09SDavid van Moolenbroekxflag_head()
148*00b67f09SDavid van Moolenbroek{
149*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -x option"
150*00b67f09SDavid van Moolenbroek}
151*00b67f09SDavid van Moolenbroekxflag_body()
152*00b67f09SDavid van Moolenbroek{
153*00b67f09SDavid van Moolenbroek    ${Atf_Check} -s ne:0 -o ignore -e ignore "echo foo 2>&1" || \
154*00b67f09SDavid van Moolenbroek        atf_fail "Shell command succeeded without -x"
155*00b67f09SDavid van Moolenbroek
156*00b67f09SDavid van Moolenbroek    ${Atf_Check} -e inline:"foo\n" -x "echo foo 1>&2" || \
157*00b67f09SDavid van Moolenbroek        atf_fail "Cannot run command with -x"
158*00b67f09SDavid van Moolenbroek
159*00b67f09SDavid van Moolenbroek    ${Atf_Check} -o inline:"foo\n" -x echo foo || \
160*00b67f09SDavid van Moolenbroek        atf_fail "Using -x does not respect all provided arguments"
161*00b67f09SDavid van Moolenbroek}
162*00b67f09SDavid van Moolenbroek
163*00b67f09SDavid van Moolenbroekatf_test_case oflag_empty
164*00b67f09SDavid van Moolenbroekoflag_empty_head()
165*00b67f09SDavid van Moolenbroek{
166*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -o option using the 'empty' argument"
167*00b67f09SDavid van Moolenbroek}
168*00b67f09SDavid van Moolenbroekoflag_empty_body()
169*00b67f09SDavid van Moolenbroek{
170*00b67f09SDavid van Moolenbroek    h_pass "true" -o empty
171*00b67f09SDavid van Moolenbroek    h_fail "echo foo" -o empty
172*00b67f09SDavid van Moolenbroek}
173*00b67f09SDavid van Moolenbroek
174*00b67f09SDavid van Moolenbroekatf_test_case oflag_ignore
175*00b67f09SDavid van Moolenbroekoflag_ignore_head()
176*00b67f09SDavid van Moolenbroek{
177*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -o option using the 'ignore' argument"
178*00b67f09SDavid van Moolenbroek}
179*00b67f09SDavid van Moolenbroekoflag_ignore_body()
180*00b67f09SDavid van Moolenbroek{
181*00b67f09SDavid van Moolenbroek    h_pass "true" -o ignore
182*00b67f09SDavid van Moolenbroek    h_pass "echo foo" -o ignore
183*00b67f09SDavid van Moolenbroek}
184*00b67f09SDavid van Moolenbroek
185*00b67f09SDavid van Moolenbroekatf_test_case oflag_file
186*00b67f09SDavid van Moolenbroekoflag_file_head()
187*00b67f09SDavid van Moolenbroek{
188*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -o option using the 'file:' argument"
189*00b67f09SDavid van Moolenbroek}
190*00b67f09SDavid van Moolenbroekoflag_file_body()
191*00b67f09SDavid van Moolenbroek{
192*00b67f09SDavid van Moolenbroek    touch empty
193*00b67f09SDavid van Moolenbroek    h_pass "true" -o file:empty
194*00b67f09SDavid van Moolenbroek
195*00b67f09SDavid van Moolenbroek    echo foo >text
196*00b67f09SDavid van Moolenbroek    h_pass "echo foo" -o file:text
197*00b67f09SDavid van Moolenbroek    h_fail "echo bar" -o file:text
198*00b67f09SDavid van Moolenbroek
199*00b67f09SDavid van Moolenbroek    dd if=/dev/urandom of=bin bs=1k count=10
200*00b67f09SDavid van Moolenbroek    h_pass "cat bin" -o file:bin
201*00b67f09SDavid van Moolenbroek}
202*00b67f09SDavid van Moolenbroek
203*00b67f09SDavid van Moolenbroekatf_test_case oflag_inline
204*00b67f09SDavid van Moolenbroekoflag_inline_head()
205*00b67f09SDavid van Moolenbroek{
206*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -o option using the 'inline:' argument"
207*00b67f09SDavid van Moolenbroek}
208*00b67f09SDavid van Moolenbroekoflag_inline_body()
209*00b67f09SDavid van Moolenbroek{
210*00b67f09SDavid van Moolenbroek    h_pass "true" -o inline:
211*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar" -o inline:"foo bar\n"
212*00b67f09SDavid van Moolenbroek    h_pass "printf 'foo bar'" -o inline:"foo bar"
213*00b67f09SDavid van Moolenbroek    h_pass "printf '\t\n\t\n'" -o inline:"\t\n\t\n"
214*00b67f09SDavid van Moolenbroek    # XXX Ugly hack to workaround the lack of \e in FreeBSD.  Also, \e doesn't
215*00b67f09SDavid van Moolenbroek    # seem to work as expected in Linux.  Look for a nicer solution.
216*00b67f09SDavid van Moolenbroek    case $(uname) in
217*00b67f09SDavid van Moolenbroek    Darwin|FreeBSD|Linux)
218*00b67f09SDavid van Moolenbroek        h_pass "printf '\a\b\f\n\r\t\v'" -o inline:"\a\b\f\n\r\t\v"
219*00b67f09SDavid van Moolenbroek        ;;
220*00b67f09SDavid van Moolenbroek    *)
221*00b67f09SDavid van Moolenbroek        h_pass "printf '\a\b\e\f\n\r\t\v'" -o inline:"\a\b\e\f\n\r\t\v"
222*00b67f09SDavid van Moolenbroek        ;;
223*00b67f09SDavid van Moolenbroek    esac
224*00b67f09SDavid van Moolenbroek    h_pass "printf '\011\022\033\012'" -o inline:"\011\022\033\012"
225*00b67f09SDavid van Moolenbroek
226*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar" -o inline:"foo bar"
227*00b67f09SDavid van Moolenbroek    h_fail "echo -n foo bar" -o inline:"foo bar\n"
228*00b67f09SDavid van Moolenbroek}
229*00b67f09SDavid van Moolenbroek
230*00b67f09SDavid van Moolenbroekatf_test_case oflag_match
231*00b67f09SDavid van Moolenbroekoflag_match_head()
232*00b67f09SDavid van Moolenbroek{
233*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -o option using the 'match:' argument"
234*00b67f09SDavid van Moolenbroek}
235*00b67f09SDavid van Moolenbroekoflag_match_body()
236*00b67f09SDavid van Moolenbroek{
237*00b67f09SDavid van Moolenbroek    h_pass "printf no-newline" -o "match:^no-newline"
238*00b67f09SDavid van Moolenbroek    h_pass "echo line1; echo foo bar" -o "match:^foo"
239*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar" -o "match:o b"
240*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar" -o "match:baz"
241*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar" -o "match:^bar"
242*00b67f09SDavid van Moolenbroek}
243*00b67f09SDavid van Moolenbroek
244*00b67f09SDavid van Moolenbroekatf_test_case oflag_save
245*00b67f09SDavid van Moolenbroekoflag_save_head()
246*00b67f09SDavid van Moolenbroek{
247*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -o option using the 'save:' argument"
248*00b67f09SDavid van Moolenbroek}
249*00b67f09SDavid van Moolenbroekoflag_save_body()
250*00b67f09SDavid van Moolenbroek{
251*00b67f09SDavid van Moolenbroek    h_pass "echo foo" -o save:out
252*00b67f09SDavid van Moolenbroek    echo foo >exp
253*00b67f09SDavid van Moolenbroek    cmp -s out exp || atf_fail "Saved output does not match expected results"
254*00b67f09SDavid van Moolenbroek}
255*00b67f09SDavid van Moolenbroek
256*00b67f09SDavid van Moolenbroekatf_test_case oflag_multiple
257*00b67f09SDavid van Moolenbroekoflag_multiple_head()
258*00b67f09SDavid van Moolenbroek{
259*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for multiple occurrences of the -o option"
260*00b67f09SDavid van Moolenbroek}
261*00b67f09SDavid van Moolenbroekoflag_multiple_body()
262*00b67f09SDavid van Moolenbroek{
263*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar" -o match:foo -o match:bar
264*00b67f09SDavid van Moolenbroek    h_pass "echo foo; echo bar" -o match:foo -o match:bar
265*00b67f09SDavid van Moolenbroek    h_fail "echo foo baz" -o match:bar -o match:foo
266*00b67f09SDavid van Moolenbroek    h_fail "echo foo; echo baz" -o match:bar -o match:foo
267*00b67f09SDavid van Moolenbroek}
268*00b67f09SDavid van Moolenbroek
269*00b67f09SDavid van Moolenbroekatf_test_case oflag_negated
270*00b67f09SDavid van Moolenbroekoflag_negated_head()
271*00b67f09SDavid van Moolenbroek{
272*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for negated occurrences of the -o option"
273*00b67f09SDavid van Moolenbroek}
274*00b67f09SDavid van Moolenbroekoflag_negated_body()
275*00b67f09SDavid van Moolenbroek{
276*00b67f09SDavid van Moolenbroek    h_fail "echo foo" -o empty
277*00b67f09SDavid van Moolenbroek    h_pass "echo foo" -o not-empty
278*00b67f09SDavid van Moolenbroek
279*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar" -o match:foo
280*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar" -o not-match:foo
281*00b67f09SDavid van Moolenbroek}
282*00b67f09SDavid van Moolenbroek
283*00b67f09SDavid van Moolenbroekatf_test_case eflag_empty
284*00b67f09SDavid van Moolenbroekeflag_empty_head()
285*00b67f09SDavid van Moolenbroek{
286*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -e option using the 'empty' argument"
287*00b67f09SDavid van Moolenbroek}
288*00b67f09SDavid van Moolenbroekeflag_empty_body()
289*00b67f09SDavid van Moolenbroek{
290*00b67f09SDavid van Moolenbroek    h_pass "true 1>&2" -e empty
291*00b67f09SDavid van Moolenbroek    h_fail "echo foo 1>&2" -e empty
292*00b67f09SDavid van Moolenbroek}
293*00b67f09SDavid van Moolenbroek
294*00b67f09SDavid van Moolenbroekatf_test_case eflag_ignore
295*00b67f09SDavid van Moolenbroekeflag_ignore_head()
296*00b67f09SDavid van Moolenbroek{
297*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -e option using the 'ignore' argument"
298*00b67f09SDavid van Moolenbroek}
299*00b67f09SDavid van Moolenbroekeflag_ignore_body()
300*00b67f09SDavid van Moolenbroek{
301*00b67f09SDavid van Moolenbroek    h_pass "true 1>&2" -e ignore
302*00b67f09SDavid van Moolenbroek    h_pass "echo foo 1>&2" -e ignore
303*00b67f09SDavid van Moolenbroek}
304*00b67f09SDavid van Moolenbroek
305*00b67f09SDavid van Moolenbroekatf_test_case eflag_file
306*00b67f09SDavid van Moolenbroekeflag_file_head()
307*00b67f09SDavid van Moolenbroek{
308*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -e option using the 'file:' argument"
309*00b67f09SDavid van Moolenbroek}
310*00b67f09SDavid van Moolenbroekeflag_file_body()
311*00b67f09SDavid van Moolenbroek{
312*00b67f09SDavid van Moolenbroek    touch empty
313*00b67f09SDavid van Moolenbroek    h_pass "true 1>&2" -e file:empty
314*00b67f09SDavid van Moolenbroek
315*00b67f09SDavid van Moolenbroek    echo foo >text
316*00b67f09SDavid van Moolenbroek    h_pass "echo foo 1>&2" -e file:text
317*00b67f09SDavid van Moolenbroek    h_fail "echo bar 1>&2" -e file:text
318*00b67f09SDavid van Moolenbroek
319*00b67f09SDavid van Moolenbroek    dd if=/dev/urandom of=bin bs=1k count=10
320*00b67f09SDavid van Moolenbroek    h_pass "cat bin 1>&2" -e file:bin
321*00b67f09SDavid van Moolenbroek}
322*00b67f09SDavid van Moolenbroek
323*00b67f09SDavid van Moolenbroekatf_test_case eflag_inline
324*00b67f09SDavid van Moolenbroekeflag_inline_head()
325*00b67f09SDavid van Moolenbroek{
326*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -e option using the 'inline:' argument"
327*00b67f09SDavid van Moolenbroek}
328*00b67f09SDavid van Moolenbroekeflag_inline_body()
329*00b67f09SDavid van Moolenbroek{
330*00b67f09SDavid van Moolenbroek    h_pass "true 1>&2" -e inline:
331*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar 1>&2" -e inline:"foo bar\n"
332*00b67f09SDavid van Moolenbroek    h_pass "printf 'foo bar' 1>&2" -e inline:"foo bar"
333*00b67f09SDavid van Moolenbroek    h_pass "printf '\t\n\t\n' 1>&2" -e inline:"\t\n\t\n"
334*00b67f09SDavid van Moolenbroek    # XXX Ugly hack to workaround the lack of \e in FreeBSD.  Also, \e doesn't
335*00b67f09SDavid van Moolenbroek    # seem to work as expected in Linux.  Look for a nicer solution.
336*00b67f09SDavid van Moolenbroek    case $(uname) in
337*00b67f09SDavid van Moolenbroek    Darwin|FreeBSD|Linux)
338*00b67f09SDavid van Moolenbroek        h_pass "printf '\a\b\f\n\r\t\v' 1>&2" -e inline:"\a\b\f\n\r\t\v"
339*00b67f09SDavid van Moolenbroek        ;;
340*00b67f09SDavid van Moolenbroek    *)
341*00b67f09SDavid van Moolenbroek        h_pass "printf '\a\b\e\f\n\r\t\v' 1>&2" -e inline:"\a\b\e\f\n\r\t\v"
342*00b67f09SDavid van Moolenbroek        ;;
343*00b67f09SDavid van Moolenbroek    esac
344*00b67f09SDavid van Moolenbroek    h_pass "printf '\011\022\033\012' 1>&2" -e inline:"\011\022\033\012"
345*00b67f09SDavid van Moolenbroek
346*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar 1>&2" -e inline:"foo bar"
347*00b67f09SDavid van Moolenbroek    h_fail "echo -n foo bar 1>&2" -e inline:"foo bar\n"
348*00b67f09SDavid van Moolenbroek}
349*00b67f09SDavid van Moolenbroek
350*00b67f09SDavid van Moolenbroekatf_test_case eflag_save
351*00b67f09SDavid van Moolenbroekeflag_save_head()
352*00b67f09SDavid van Moolenbroek{
353*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -e option using the 'save:' argument"
354*00b67f09SDavid van Moolenbroek}
355*00b67f09SDavid van Moolenbroekeflag_save_body()
356*00b67f09SDavid van Moolenbroek{
357*00b67f09SDavid van Moolenbroek    h_pass "echo foo 1>&2" -e save:out
358*00b67f09SDavid van Moolenbroek    echo foo >exp
359*00b67f09SDavid van Moolenbroek    cmp -s out exp || atf_fail "Saved output does not match expected results"
360*00b67f09SDavid van Moolenbroek}
361*00b67f09SDavid van Moolenbroek
362*00b67f09SDavid van Moolenbroekatf_test_case eflag_match
363*00b67f09SDavid van Moolenbroekeflag_match_head()
364*00b67f09SDavid van Moolenbroek{
365*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for the -e option using the 'match:' argument"
366*00b67f09SDavid van Moolenbroek}
367*00b67f09SDavid van Moolenbroekeflag_match_body()
368*00b67f09SDavid van Moolenbroek{
369*00b67f09SDavid van Moolenbroek    h_pass "printf no-newline 1>&2" -e "match:^no-newline"
370*00b67f09SDavid van Moolenbroek    h_pass "echo line1 1>&2; echo foo bar 1>&2" -e "match:^foo"
371*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar 1>&2" -e "match:o b"
372*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar 1>&2" -e "match:baz"
373*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar 1>&2" -e "match:^bar"
374*00b67f09SDavid van Moolenbroek}
375*00b67f09SDavid van Moolenbroek
376*00b67f09SDavid van Moolenbroekatf_test_case eflag_multiple
377*00b67f09SDavid van Moolenbroekeflag_multiple_head()
378*00b67f09SDavid van Moolenbroek{
379*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for multiple occurrences of the -e option"
380*00b67f09SDavid van Moolenbroek}
381*00b67f09SDavid van Moolenbroekeflag_multiple_body()
382*00b67f09SDavid van Moolenbroek{
383*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar 1>&2" -e match:foo -e match:bar
384*00b67f09SDavid van Moolenbroek    h_pass "echo foo 1>&2; echo bar 1>&2" -e match:foo -e match:bar
385*00b67f09SDavid van Moolenbroek    h_fail "echo foo baz 1>&2" -e match:bar -e match:foo
386*00b67f09SDavid van Moolenbroek    h_fail "echo foo 1>&2; echo baz 1>&2" -e match:bar -e match:foo
387*00b67f09SDavid van Moolenbroek}
388*00b67f09SDavid van Moolenbroek
389*00b67f09SDavid van Moolenbroekatf_test_case eflag_negated
390*00b67f09SDavid van Moolenbroekeflag_negated_head()
391*00b67f09SDavid van Moolenbroek{
392*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for negated occurrences of the -e option"
393*00b67f09SDavid van Moolenbroek}
394*00b67f09SDavid van Moolenbroekeflag_negated_body()
395*00b67f09SDavid van Moolenbroek{
396*00b67f09SDavid van Moolenbroek    h_fail "echo foo 1>&2" -e empty
397*00b67f09SDavid van Moolenbroek    h_pass "echo foo 1>&2" -e not-empty
398*00b67f09SDavid van Moolenbroek
399*00b67f09SDavid van Moolenbroek    h_pass "echo foo bar 1>&2" -e match:foo
400*00b67f09SDavid van Moolenbroek    h_fail "echo foo bar 1>&2" -e not-match:foo
401*00b67f09SDavid van Moolenbroek}
402*00b67f09SDavid van Moolenbroek
403*00b67f09SDavid van Moolenbroekatf_test_case stdin
404*00b67f09SDavid van Moolenbroekstdin_head()
405*00b67f09SDavid van Moolenbroek{
406*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that stdin is preserved"
407*00b67f09SDavid van Moolenbroek}
408*00b67f09SDavid van Moolenbroekstdin_body()
409*00b67f09SDavid van Moolenbroek{
410*00b67f09SDavid van Moolenbroek    echo "hello" | ${Atf_Check} -o match:"hello" cat || \
411*00b67f09SDavid van Moolenbroek        atf_fail "atf-check does not seem to respect stdin"
412*00b67f09SDavid van Moolenbroek}
413*00b67f09SDavid van Moolenbroek
414*00b67f09SDavid van Moolenbroekatf_test_case invalid_umask
415*00b67f09SDavid van Moolenbroekinvalid_umask_head()
416*00b67f09SDavid van Moolenbroek{
417*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for a correct error condition if the umask is" \
418*00b67f09SDavid van Moolenbroek            "too restrictive"
419*00b67f09SDavid van Moolenbroek}
420*00b67f09SDavid van Moolenbroekinvalid_umask_body()
421*00b67f09SDavid van Moolenbroek{
422*00b67f09SDavid van Moolenbroek    umask 0222
423*00b67f09SDavid van Moolenbroek    ${Atf_Check} false 2>stderr && \
424*00b67f09SDavid van Moolenbroek        atf_fail "atf-check returned 0 but it should have failed"
425*00b67f09SDavid van Moolenbroek    cat stderr
426*00b67f09SDavid van Moolenbroek    grep 'temporary.*current umask.*0222' stderr >/dev/null || \
427*00b67f09SDavid van Moolenbroek        atf_fail "atf-check did not report an error related to the" \
428*00b67f09SDavid van Moolenbroek                 "current umask"
429*00b67f09SDavid van Moolenbroek}
430*00b67f09SDavid van Moolenbroek
431*00b67f09SDavid van Moolenbroekatf_init_test_cases()
432*00b67f09SDavid van Moolenbroek{
433*00b67f09SDavid van Moolenbroek    atf_add_test_case sflag_eq_ne
434*00b67f09SDavid van Moolenbroek    atf_add_test_case sflag_exit
435*00b67f09SDavid van Moolenbroek    atf_add_test_case sflag_ignore
436*00b67f09SDavid van Moolenbroek    atf_add_test_case sflag_signal
437*00b67f09SDavid van Moolenbroek
438*00b67f09SDavid van Moolenbroek    atf_add_test_case xflag
439*00b67f09SDavid van Moolenbroek
440*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_empty
441*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_ignore
442*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_file
443*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_inline
444*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_match
445*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_save
446*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_multiple
447*00b67f09SDavid van Moolenbroek    atf_add_test_case oflag_negated
448*00b67f09SDavid van Moolenbroek
449*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_empty
450*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_ignore
451*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_file
452*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_inline
453*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_match
454*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_save
455*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_multiple
456*00b67f09SDavid van Moolenbroek    atf_add_test_case eflag_negated
457*00b67f09SDavid van Moolenbroek
458*00b67f09SDavid van Moolenbroek    atf_add_test_case stdin
459*00b67f09SDavid van Moolenbroek
460*00b67f09SDavid van Moolenbroek    atf_add_test_case invalid_umask
461*00b67f09SDavid van Moolenbroek}
462*00b67f09SDavid van Moolenbroek
463*00b67f09SDavid van Moolenbroek# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4
464