xref: /freebsd/usr.bin/sdiff/tests/sdiff_test.sh (revision ad7bef8b890768e68a48bbfa6b92ebf635068504)
1458cbf0aSEnji Cooper# $NetBSD: t_sdiff.sh,v 1.1 2012/03/17 16:33:15 jruoho Exp $
2458cbf0aSEnji Cooper#
3458cbf0aSEnji Cooper# Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
4458cbf0aSEnji Cooper# All rights reserved.
5458cbf0aSEnji Cooper#
6458cbf0aSEnji Cooper# Redistribution and use in source and binary forms, with or without
7458cbf0aSEnji Cooper# modification, are permitted provided that the following conditions
8458cbf0aSEnji Cooper# are met:
9458cbf0aSEnji Cooper# 1. Redistributions of source code must retain the above copyright
10458cbf0aSEnji Cooper#    notice, this list of conditions and the following disclaimer.
11458cbf0aSEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
12458cbf0aSEnji Cooper#    notice, this list of conditions and the following disclaimer in the
13458cbf0aSEnji Cooper#    documentation and/or other materials provided with the distribution.
14458cbf0aSEnji Cooper#
15458cbf0aSEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16458cbf0aSEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17458cbf0aSEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18458cbf0aSEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19458cbf0aSEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20458cbf0aSEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21458cbf0aSEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22458cbf0aSEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23458cbf0aSEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24458cbf0aSEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25458cbf0aSEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
26458cbf0aSEnji Cooper#
27458cbf0aSEnji Cooper
28458cbf0aSEnji Cooperatf_test_case flags
29458cbf0aSEnji Cooperflags_head()
30458cbf0aSEnji Cooper{
31458cbf0aSEnji Cooper	atf_set "descr" "Checks -l, -s and -w flags"
32458cbf0aSEnji Cooper}
33458cbf0aSEnji Cooperflags_body()
34458cbf0aSEnji Cooper{
35458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_flags_l.out -s eq:1 \
36458cbf0aSEnji Cooper	    sdiff -l "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input2"
37458cbf0aSEnji Cooper
38458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_flags_s.out -s eq:1 \
39458cbf0aSEnji Cooper	    sdiff -s "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input2"
40458cbf0aSEnji Cooper
41458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_flags_w.out -s eq:1 \
42458cbf0aSEnji Cooper	    sdiff -w 125 "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input2"
43458cbf0aSEnji Cooper}
44458cbf0aSEnji Cooper
45458cbf0aSEnji Cooperatf_test_case iflags
46458cbf0aSEnji Cooperiflags_head()
47458cbf0aSEnji Cooper{
48458cbf0aSEnji Cooper	atf_set "descr" "Checks flags -l, -s and -w combined with -I"
49458cbf0aSEnji Cooper}
50458cbf0aSEnji Cooperiflags_body()
51458cbf0aSEnji Cooper{
52458cbf0aSEnji Cooper	tail1="-w 125 -I .*filename.* $(atf_get_srcdir)/d_input1 $(atf_get_srcdir)/d_input2"
53458cbf0aSEnji Cooper	tail2="-w 125 -I .*filename.* $(atf_get_srcdir)/d_input2 $(atf_get_srcdir)/d_input1"
54458cbf0aSEnji Cooper
55458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_a1.out -s eq:1 sdiff ${tail1}
56458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_a2.out -s eq:1 sdiff ${tail2}
57458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_b1.out -s eq:1 sdiff -s ${tail1}
58458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_b2.out -s eq:1 sdiff -s ${tail2}
59458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_c1.out -s eq:1 sdiff -l ${tail1}
60458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_c2.out -s eq:1 sdiff -l ${tail2}
61458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_d1.out -s eq:1 sdiff -s ${tail1}
62458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_iflags_d2.out -s eq:1 sdiff -s ${tail2}
63458cbf0aSEnji Cooper}
64458cbf0aSEnji Cooper
65458cbf0aSEnji Cooperatf_test_case tabs
66458cbf0aSEnji Coopertabs_head()
67458cbf0aSEnji Cooper{
68458cbf0aSEnji Cooper	atf_set "descr" "Checks comparing files containing tabs"
69458cbf0aSEnji Cooper}
70458cbf0aSEnji Coopertabs_body()
71458cbf0aSEnji Cooper{
72458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_tabs.out -s eq:1 \
73458cbf0aSEnji Cooper	    sdiff "$(atf_get_srcdir)/d_tabs1.in" "$(atf_get_srcdir)/d_tabs2.in"
74458cbf0aSEnji Cooper}
75458cbf0aSEnji Cooper
76458cbf0aSEnji Cooperatf_test_case tabends
77458cbf0aSEnji Coopertabends_head()
78458cbf0aSEnji Cooper{
79458cbf0aSEnji Cooper	atf_set "descr" "Checks correct handling of lines ended with tabs"
80458cbf0aSEnji Cooper}
81458cbf0aSEnji Coopertabends_body()
82458cbf0aSEnji Cooper{
83458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_tabends_a.out -s eq:1 \
84458cbf0aSEnji Cooper	    sdiff -w30 "$(atf_get_srcdir)/d_tabends.in" /dev/null
85458cbf0aSEnji Cooper
86458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_tabends_b.out -s eq:1 \
87458cbf0aSEnji Cooper	    sdiff -w30 /dev/null "$(atf_get_srcdir)/d_tabends.in"
88458cbf0aSEnji Cooper
89458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_tabends_c.out -s eq:1 \
90458cbf0aSEnji Cooper	    sdiff -w19 "$(atf_get_srcdir)/d_tabends.in" /dev/null
91458cbf0aSEnji Cooper}
92458cbf0aSEnji Cooper
93458cbf0aSEnji Cooperatf_test_case merge
94458cbf0aSEnji Coopermerge_head()
95458cbf0aSEnji Cooper{
96458cbf0aSEnji Cooper	atf_set "descr" "Checks interactive merging"
97458cbf0aSEnji Cooper}
98458cbf0aSEnji Coopermerge_body()
99458cbf0aSEnji Cooper{
100458cbf0aSEnji Cooper	merge_tail="-o merge.out $(atf_get_srcdir)/d_input1 \
101458cbf0aSEnji Cooper$(atf_get_srcdir)/d_input2 >/dev/null ; cat merge.out"
102458cbf0aSEnji Cooper
103458cbf0aSEnji Cooper	cp $(atf_get_srcdir)/d_input* .
104458cbf0aSEnji Cooper
105458cbf0aSEnji Cooper	atf_check -o file:d_input1 -x "yes l | sdiff ${merge_tail}"
106458cbf0aSEnji Cooper	atf_check -o file:d_input2 -x "yes r | sdiff ${merge_tail}"
107458cbf0aSEnji Cooper
108458cbf0aSEnji Cooper	atf_check -o file:d_input1 -x \
109458cbf0aSEnji Cooper		"yes el | EDITOR=cat VISUAL=cat sdiff ${merge_tail}"
110458cbf0aSEnji Cooper	atf_check -o file:d_input2 -x \
111458cbf0aSEnji Cooper		"yes er | EDITOR=cat VISUAL=cat sdiff ${merge_tail}"
112458cbf0aSEnji Cooper
113458cbf0aSEnji Cooper	atf_check -o file:d_input1 -x "yes l | sdiff -s ${merge_tail}"
114458cbf0aSEnji Cooper	atf_check -o file:d_input2 -x "yes r | sdiff -s ${merge_tail}"
115458cbf0aSEnji Cooper	atf_check -o file:d_input1 -x "yes l | sdiff -l ${merge_tail}"
116458cbf0aSEnji Cooper	atf_check -o file:d_input2 -x "yes r | sdiff -l ${merge_tail}"
117458cbf0aSEnji Cooper	atf_check -o file:d_input1 -x "yes l | sdiff -ls ${merge_tail}"
118458cbf0aSEnji Cooper	atf_check -o file:d_input2 -x "yes r | sdiff -ls ${merge_tail}"
119458cbf0aSEnji Cooper
120458cbf0aSEnji Cooper	atf_check -o file:d_input1 -x "{ while :; do echo s; echo l; \
121458cbf0aSEnji Cooperecho v; echo l; done; } | sdiff ${merge_tail}"
122458cbf0aSEnji Cooper
123458cbf0aSEnji Cooper	atf_check -o file:d_input2 -x "{ while :; do echo s; echo r; \
124458cbf0aSEnji Cooperecho v; echo r; done; } | sdiff ${merge_tail}"
125458cbf0aSEnji Cooper}
126458cbf0aSEnji Cooper
127458cbf0aSEnji Cooperatf_test_case same
128458cbf0aSEnji Coopersame_head()
129458cbf0aSEnji Cooper{
130458cbf0aSEnji Cooper	atf_set "descr" "Checks comparing file with itself"
131458cbf0aSEnji Cooper}
132458cbf0aSEnji Coopersame_body()
133458cbf0aSEnji Cooper{
134458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_same.out \
135458cbf0aSEnji Cooper	    sdiff "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input1"
136458cbf0aSEnji Cooper}
137458cbf0aSEnji Cooper
138458cbf0aSEnji Cooperatf_test_case oneline
139458cbf0aSEnji Cooperoneline_head()
140458cbf0aSEnji Cooper{
141458cbf0aSEnji Cooper	atf_set "descr" "Checks comparing one-line files"
142458cbf0aSEnji Cooper}
143458cbf0aSEnji Cooperoneline_body()
144458cbf0aSEnji Cooper{
145458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_oneline_a.out -s eq:1 \
146458cbf0aSEnji Cooper	    sdiff /dev/null "$(atf_get_srcdir)/d_oneline.in"
147458cbf0aSEnji Cooper
148458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_oneline_b.out -s eq:1 \
149458cbf0aSEnji Cooper	    sdiff "$(atf_get_srcdir)/d_oneline.in" /dev/null
150458cbf0aSEnji Cooper}
151458cbf0aSEnji Cooper
152458cbf0aSEnji Cooperatf_test_case dot
153458cbf0aSEnji Cooperdot_head()
154458cbf0aSEnji Cooper{
155458cbf0aSEnji Cooper	atf_set "descr" "Checks comparing with file containing only one character"
156458cbf0aSEnji Cooper}
157458cbf0aSEnji Cooperdot_body()
158458cbf0aSEnji Cooper{
159458cbf0aSEnji Cooper	echo ".                                                             <" > expout
160458cbf0aSEnji Cooper	atf_check -o file:expout -s eq:1 sdiff "$(atf_get_srcdir)/d_dot.in" /dev/null
161458cbf0aSEnji Cooper
162458cbf0aSEnji Cooper	echo "                                                              > ." > expout
163458cbf0aSEnji Cooper	atf_check -o file:expout -s eq:1 sdiff /dev/null "$(atf_get_srcdir)/d_dot.in"
164458cbf0aSEnji Cooper}
165458cbf0aSEnji Cooper
166458cbf0aSEnji Cooperatf_test_case stdin
167458cbf0aSEnji Cooperstdin_head()
168458cbf0aSEnji Cooper{
169458cbf0aSEnji Cooper	atf_set "descr" "Checks reading data from stdin"
170458cbf0aSEnji Cooper}
171458cbf0aSEnji Cooperstdin_body()
172458cbf0aSEnji Cooper{
173458cbf0aSEnji Cooper	echo "                                                              > stdin" > expout
174458cbf0aSEnji Cooper	atf_check -o file:expout -s eq:1 -x \
175458cbf0aSEnji Cooper	    "echo stdin | sdiff /dev/null /dev/stdin"
176458cbf0aSEnji Cooper
177458cbf0aSEnji Cooper	echo "stdin                                                         <" > expout
178458cbf0aSEnji Cooper	atf_check -o file:expout -s eq:1 -x \
179458cbf0aSEnji Cooper	    "echo stdin | sdiff /dev/stdin /dev/null"
180458cbf0aSEnji Cooper}
181458cbf0aSEnji Cooper
182458cbf0aSEnji Cooperatf_test_case short
183458cbf0aSEnji Coopershort_head()
184458cbf0aSEnji Cooper{
185458cbf0aSEnji Cooper	atf_set "descr" "Checks premature stop of merging"
186458cbf0aSEnji Cooper}
187458cbf0aSEnji Coopershort_body()
188458cbf0aSEnji Cooper{
189458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_short.out -x \
190458cbf0aSEnji Cooper	    "printf \"r\\nl\\nr\\nl\" | sdiff -o merge.out $(atf_get_srcdir)/d_input1 \
191458cbf0aSEnji Cooper$(atf_get_srcdir)/d_input2 >/dev/null ; cat merge.out"
192458cbf0aSEnji Cooper}
193458cbf0aSEnji Cooper
194a834edfcSDag-Erling Smørgravatf_test_case tflag
195a834edfcSDag-Erling Smørgravtflag_head()
196a834edfcSDag-Erling Smørgrav{
197a834edfcSDag-Erling Smørgrav	atf_set "descr" "Checks tab expansion"
198a834edfcSDag-Erling Smørgrav}
199a834edfcSDag-Erling Smørgravtflag_body()
200a834edfcSDag-Erling Smørgrav{
201a834edfcSDag-Erling Smørgrav	printf "a\tb\n" >a
202a834edfcSDag-Erling Smørgrav	printf "b\ta\n" >b
203a834edfcSDag-Erling Smørgrav	atf_check -s exit:1 -o match:$'a\tb' \
204a834edfcSDag-Erling Smørgrav		  sdiff a b
205a834edfcSDag-Erling Smørgrav	atf_check -s exit:1 -o match:"a {7}b" \
206a834edfcSDag-Erling Smørgrav		  sdiff -t a b
207a834edfcSDag-Erling Smørgrav	atf_check -s exit:1 -o match:"a {3}b" \
208a834edfcSDag-Erling Smørgrav		  sdiff -t --tabsize 4 a b
209a834edfcSDag-Erling Smørgrav}
210a834edfcSDag-Erling Smørgrav
211*ad7bef8bSDag-Erling Smørgravatf_test_case binary
212*ad7bef8bSDag-Erling Smørgravbinary_head()
213*ad7bef8bSDag-Erling Smørgrav{
214*ad7bef8bSDag-Erling Smørgrav	atf_set "descr" "Checks binary file handling"
215*ad7bef8bSDag-Erling Smørgrav}
216*ad7bef8bSDag-Erling Smørgravbinary_body()
217*ad7bef8bSDag-Erling Smørgrav{
218*ad7bef8bSDag-Erling Smørgrav	printf "a\0\n" >a
219*ad7bef8bSDag-Erling Smørgrav	printf "b\0\n" >b
220*ad7bef8bSDag-Erling Smørgrav	atf_check -o empty sdiff a a
221*ad7bef8bSDag-Erling Smørgrav	atf_check -o empty sdiff a - <a
222*ad7bef8bSDag-Erling Smørgrav	atf_check -s exit:1 -o match:"Binary files .* differ" \
223*ad7bef8bSDag-Erling Smørgrav		  sdiff a b
224*ad7bef8bSDag-Erling Smørgrav	atf_check -s exit:1 -o match:"Binary files .* differ" \
225*ad7bef8bSDag-Erling Smørgrav		  sdiff a - <b
226*ad7bef8bSDag-Erling Smørgrav}
227*ad7bef8bSDag-Erling Smørgrav
228458cbf0aSEnji Cooperatf_init_test_cases()
229458cbf0aSEnji Cooper{
230458cbf0aSEnji Cooper	atf_add_test_case flags
231458cbf0aSEnji Cooper	atf_add_test_case iflags
232458cbf0aSEnji Cooper	atf_add_test_case tabs
233458cbf0aSEnji Cooper	atf_add_test_case tabends
234458cbf0aSEnji Cooper	atf_add_test_case merge
235458cbf0aSEnji Cooper	atf_add_test_case same
236458cbf0aSEnji Cooper	atf_add_test_case oneline
237458cbf0aSEnji Cooper	atf_add_test_case dot
238458cbf0aSEnji Cooper	atf_add_test_case stdin
239458cbf0aSEnji Cooper	atf_add_test_case short
240a834edfcSDag-Erling Smørgrav	atf_add_test_case tflag
241*ad7bef8bSDag-Erling Smørgrav	atf_add_test_case binary
242458cbf0aSEnji Cooper}
243