1458cbf0aSEnji Cooper# $FreeBSD$
2458cbf0aSEnji Cooper
3458cbf0aSEnji Cooperatf_test_case simple
4458cbf0aSEnji Cooperatf_test_case unified
558cf4d86SJilles Tjoelkeratf_test_case header
6385a67dcSJilles Tjoelkeratf_test_case header_ns
705d06ecaSBaptiste Daroussinatf_test_case ifdef
8fddcb7b8SBaptiste Daroussinatf_test_case group_format
929d65f1cSEnji Cooperatf_test_case side_by_side
104574a545SEnji Cooperatf_test_case brief_format
119977c7b5SXin LIatf_test_case b230049
12ece58f7aSPiotr Pawel Stefaniakatf_test_case stripcr_o
1312a8d302SEd Masteatf_test_case b252515
14e68edb8cSKyle Evansatf_test_case Bflag
152816b999SBaptiste Daroussinatf_test_case Nflag
1643fbd654SKyle Evansatf_test_case tabsize
17db9cccfbSKyle Evansatf_test_case conflicting_format
18f096ed98SBaptiste Daroussinatf_test_case label
190702bf9cSBaptiste Daroussinatf_test_case report_identical
2007d72ca9SBaptiste Daroussinatf_test_case non_regular_file
21*bda949b6SPiotr Pawel Stefaniakatf_test_case binary
22458cbf0aSEnji Cooper
23458cbf0aSEnji Coopersimple_body()
24458cbf0aSEnji Cooper{
25458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple.out -s eq:1 \
26458cbf0aSEnji Cooper		diff "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
27458cbf0aSEnji Cooper
28458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple_e.out -s eq:1 \
29458cbf0aSEnji Cooper		diff -e "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
30458cbf0aSEnji Cooper
31458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple_u.out -s eq:1 \
32458cbf0aSEnji Cooper		diff -u -L input1 -L input2 "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
33458cbf0aSEnji Cooper
34458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple_n.out -s eq:1 \
35458cbf0aSEnji Cooper		diff -n "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
36458cbf0aSEnji Cooper
37458cbf0aSEnji Cooper	atf_check -o inline:"Files $(atf_get_srcdir)/input1.in and $(atf_get_srcdir)/input2.in differ\n" -s eq:1 \
38458cbf0aSEnji Cooper		diff -q "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
39458cbf0aSEnji Cooper
40458cbf0aSEnji Cooper	atf_check \
41458cbf0aSEnji Cooper		diff -q "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input1.in"
42458cbf0aSEnji Cooper
43458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple_i.out -s eq:1 \
44458cbf0aSEnji Cooper		diff -i "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
45458cbf0aSEnji Cooper
46458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple_w.out -s eq:1 \
47458cbf0aSEnji Cooper		diff -w "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
48458cbf0aSEnji Cooper
49458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple_b.out -s eq:1 \
50458cbf0aSEnji Cooper		diff -b "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
51458cbf0aSEnji Cooper
52458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/simple_p.out -s eq:1 \
53458cbf0aSEnji Cooper		diff --label input_c1.in --label input_c2.in -p "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
54458cbf0aSEnji Cooper}
55458cbf0aSEnji Cooper
56458cbf0aSEnji Cooperunified_body()
57458cbf0aSEnji Cooper{
58458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/unified_p.out -s eq:1 \
59458cbf0aSEnji Cooper		diff -up -L input_c1.in -L input_c2.in  "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
60458cbf0aSEnji Cooper	atf_check -o file:$(atf_get_srcdir)/unified_9999.out -s eq:1 \
61458cbf0aSEnji Cooper		diff -u9999 -L input_c1.in -L input_c2.in "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
62458cbf0aSEnji Cooper}
63458cbf0aSEnji Cooper
649977c7b5SXin LIb230049_body()
659977c7b5SXin LI{
669977c7b5SXin LI	printf 'a\nb\r\nc\n' > b230049_a.in
679977c7b5SXin LI	printf 'a\r\nb\r\nc\r\n' > b230049_b.in
689977c7b5SXin LI	atf_check -o empty -s eq:0 \
699977c7b5SXin LI		diff -up --strip-trailing-cr -L b230049_a.in -L b230049_b.in \
709977c7b5SXin LI		    b230049_a.in b230049_b.in
719977c7b5SXin LI}
729977c7b5SXin LI
73ece58f7aSPiotr Pawel Stefaniakstripcr_o_body()
74ece58f7aSPiotr Pawel Stefaniak{
75ece58f7aSPiotr Pawel Stefaniak	printf 'a\nX\nc\n' > stripcr_o_X.in
76ece58f7aSPiotr Pawel Stefaniak	printf 'a\r\nY\r\nc\r\n' > stripcr_o_Y.in
77ece58f7aSPiotr Pawel Stefaniak	atf_check -o "file:$(atf_get_srcdir)/strip_o.out" -s eq:1 \
78ece58f7aSPiotr Pawel Stefaniak		diff -L1 -L2 -u --strip-trailing-cr stripcr_o_X.in stripcr_o_Y.in
79ece58f7aSPiotr Pawel Stefaniak}
80ece58f7aSPiotr Pawel Stefaniak
8112a8d302SEd Masteb252515_body()
8212a8d302SEd Maste{
8312a8d302SEd Maste	printf 'a b\n' > b252515_a.in
8412a8d302SEd Maste	printf 'a  b\n' > b252515_b.in
8512a8d302SEd Maste	atf_check -o empty -s eq:0 \
8612a8d302SEd Maste		diff -qw b252515_a.in b252515_b.in
8712a8d302SEd Maste}
8812a8d302SEd Maste
8958cf4d86SJilles Tjoelkerheader_body()
9058cf4d86SJilles Tjoelker{
9158cf4d86SJilles Tjoelker	export TZ=UTC
9258cf4d86SJilles Tjoelker	: > empty
9358cf4d86SJilles Tjoelker	echo hello > hello
9458cf4d86SJilles Tjoelker	touch -d 2015-04-03T01:02:03 empty
9558cf4d86SJilles Tjoelker	touch -d 2016-12-22T11:22:33 hello
9658cf4d86SJilles Tjoelker	atf_check -o "file:$(atf_get_srcdir)/header.out" -s eq:1 \
9758cf4d86SJilles Tjoelker		diff -u empty hello
9858cf4d86SJilles Tjoelker}
9958cf4d86SJilles Tjoelker
100385a67dcSJilles Tjoelkerheader_ns_body()
101385a67dcSJilles Tjoelker{
102385a67dcSJilles Tjoelker	export TZ=UTC
103385a67dcSJilles Tjoelker	: > empty
104385a67dcSJilles Tjoelker	echo hello > hello
105385a67dcSJilles Tjoelker	touch -d 2015-04-03T01:02:03.123456789 empty
106385a67dcSJilles Tjoelker	touch -d 2016-12-22T11:22:33.987654321 hello
107385a67dcSJilles Tjoelker	atf_check -o "file:$(atf_get_srcdir)/header_ns.out" -s eq:1 \
108385a67dcSJilles Tjoelker		diff -u empty hello
109385a67dcSJilles Tjoelker}
110385a67dcSJilles Tjoelker
11105d06ecaSBaptiste Daroussinifdef_body()
11205d06ecaSBaptiste Daroussin{
11305d06ecaSBaptiste Daroussin	atf_check -o file:$(atf_get_srcdir)/ifdef.out -s eq:1 \
11405d06ecaSBaptiste Daroussin		diff -D PLOP "$(atf_get_srcdir)/input_c1.in" \
11505d06ecaSBaptiste Daroussin		"$(atf_get_srcdir)/input_c2.in"
11605d06ecaSBaptiste Daroussin}
11705d06ecaSBaptiste Daroussin
118fddcb7b8SBaptiste Daroussingroup_format_body()
119fddcb7b8SBaptiste Daroussin{
120fddcb7b8SBaptiste Daroussin	atf_check -o file:$(atf_get_srcdir)/group-format.out -s eq:1 \
121fddcb7b8SBaptiste Daroussin		diff --changed-group-format='<<<<<<< (local)
122fddcb7b8SBaptiste Daroussin%<=======
123fddcb7b8SBaptiste Daroussin%>>>>>>>> (stock)
124fddcb7b8SBaptiste Daroussin' "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
125fddcb7b8SBaptiste Daroussin}
126fddcb7b8SBaptiste Daroussin
12729d65f1cSEnji Cooperside_by_side_body()
12829d65f1cSEnji Cooper{
12929d65f1cSEnji Cooper	atf_check -o save:A printf "A\nB\nC\n"
13029d65f1cSEnji Cooper	atf_check -o save:B printf "D\nB\nE\n"
13129d65f1cSEnji Cooper
132ac05de17SKyle Evans	exp_output=$(printf "A[[:space:]]+|[[:space:]]+D\nB[[:space:]]+B\nC[[:space:]]+|[[:space:]]+E")
133ac05de17SKyle Evans	exp_output_suppressed=$(printf "A[[:space:]]+|[[:space:]]+D\nC[[:space:]]+|[[:space:]]+E")
13429d65f1cSEnji Cooper
13529d65f1cSEnji Cooper	atf_check -o match:"$exp_output" -s exit:1 \
13629d65f1cSEnji Cooper	    diff --side-by-side A B
13729d65f1cSEnji Cooper	atf_check -o match:"$exp_output" -s exit:1 \
13829d65f1cSEnji Cooper	    diff -y A B
13929d65f1cSEnji Cooper	atf_check -o match:"$exp_output_suppressed" -s exit:1 \
14029d65f1cSEnji Cooper	    diff -y --suppress-common-lines A B
14129d65f1cSEnji Cooper	atf_check -o match:"$exp_output_suppressed" -s exit:1 \
14229d65f1cSEnji Cooper	    diff -W 65 -y --suppress-common-lines A B
14329d65f1cSEnji Cooper}
14429d65f1cSEnji Cooper
1454574a545SEnji Cooperbrief_format_body()
1464574a545SEnji Cooper{
1474574a545SEnji Cooper	atf_check mkdir A B
1484574a545SEnji Cooper
1494574a545SEnji Cooper	atf_check -x "echo 1 > A/test-file"
1504574a545SEnji Cooper	atf_check -x "echo 2 > B/test-file"
1514574a545SEnji Cooper
1524574a545SEnji Cooper	atf_check cp -Rf A C
1534017abe2SEnji Cooper	atf_check cp -Rf A D
1544017abe2SEnji Cooper
1554017abe2SEnji Cooper	atf_check -x "echo 3 > D/another-test-file"
1564574a545SEnji Cooper
1574574a545SEnji Cooper	atf_check \
1584574a545SEnji Cooper	    -s exit:1 \
1594574a545SEnji Cooper	    -o inline:"Files A/test-file and B/test-file differ\n" \
1604017abe2SEnji Cooper	    diff -rq A B
1614574a545SEnji Cooper
1624017abe2SEnji Cooper	atf_check diff -rq A C
1634017abe2SEnji Cooper
1644017abe2SEnji Cooper	atf_check \
1654017abe2SEnji Cooper	    -s exit:1 \
1664017abe2SEnji Cooper	    -o inline:"Only in D: another-test-file\n" \
1674017abe2SEnji Cooper	    diff -rq A D
1684017abe2SEnji Cooper
1694017abe2SEnji Cooper	atf_check \
1704017abe2SEnji Cooper	    -s exit:1 \
1714017abe2SEnji Cooper	    -o inline:"Files A/another-test-file and D/another-test-file differ\n" \
1724017abe2SEnji Cooper	    diff -Nrq A D
1734574a545SEnji Cooper}
1744574a545SEnji Cooper
175e68edb8cSKyle EvansBflag_body()
176e68edb8cSKyle Evans{
177e68edb8cSKyle Evans	atf_check -x 'printf "A\nB\n" > A'
178e68edb8cSKyle Evans	atf_check -x 'printf "A\n\nB\n" > B'
179e68edb8cSKyle Evans	atf_check -x 'printf "A\n \nB\n" > C'
180e68edb8cSKyle Evans	atf_check -x 'printf "A\nC\nB\n" > D'
181e68edb8cSKyle Evans	atf_check -x 'printf "A\nB\nC\nD\nE\nF\nG\nH" > E'
182e68edb8cSKyle Evans	atf_check -x 'printf "A\n\nB\nC\nD\nE\nF\nX\nH" > F'
183e68edb8cSKyle Evans
184e68edb8cSKyle Evans	atf_check -s exit:0 -o inline:"" diff -B A B
185e68edb8cSKyle Evans	atf_check -s exit:1 -o file:"$(atf_get_srcdir)/Bflag_C.out" diff -B A C
186e68edb8cSKyle Evans	atf_check -s exit:1 -o file:"$(atf_get_srcdir)/Bflag_D.out" diff -B A D
187e68edb8cSKyle Evans	atf_check -s exit:1 -o file:"$(atf_get_srcdir)/Bflag_F.out" diff -B E F
188e68edb8cSKyle Evans}
189e68edb8cSKyle Evans
1902816b999SBaptiste DaroussinNflag_body()
1912816b999SBaptiste Daroussin{
1922816b999SBaptiste Daroussin	atf_check -x 'printf "foo" > A'
1932816b999SBaptiste Daroussin
1942816b999SBaptiste Daroussin	atf_check -s exit:1 -o ignore -e ignore diff -N A NOFILE
1952816b999SBaptiste Daroussin	atf_check -s exit:1 -o ignore -e ignore diff -N NOFILE A
1962816b999SBaptiste Daroussin	atf_check -s exit:2 -o ignore -e ignore diff -N NOFILE1 NOFILE2
1972816b999SBaptiste Daroussin}
1982816b999SBaptiste Daroussin
19943fbd654SKyle Evanstabsize_body()
20043fbd654SKyle Evans{
20143fbd654SKyle Evans	printf "\tA\n" > A
20243fbd654SKyle Evans	printf "\tB\n" > B
20343fbd654SKyle Evans
20443fbd654SKyle Evans	atf_check -s exit:1 \
20543fbd654SKyle Evans	    -o inline:"1c1\n<  A\n---\n>  B\n" \
20643fbd654SKyle Evans	    diff -t --tabsize 1 A B
20743fbd654SKyle Evans}
20843fbd654SKyle Evans
209db9cccfbSKyle Evansconflicting_format_body()
210db9cccfbSKyle Evans{
211db9cccfbSKyle Evans	printf "\tA\n" > A
212db9cccfbSKyle Evans	printf "\tB\n" > B
213db9cccfbSKyle Evans
214db9cccfbSKyle Evans	atf_check -s exit:2 -e ignore diff -c -u A B
215db9cccfbSKyle Evans	atf_check -s exit:2 -e ignore diff -e -f A B
216db9cccfbSKyle Evans	atf_check -s exit:2 -e ignore diff -y -q A B
217db9cccfbSKyle Evans	atf_check -s exit:2 -e ignore diff -q -u A B
218db9cccfbSKyle Evans	atf_check -s exit:2 -e ignore diff -q -c A B
219db9cccfbSKyle Evans	atf_check -s exit:2 -e ignore diff --normal -c A B
220db9cccfbSKyle Evans	atf_check -s exit:2 -e ignore diff -c --normal A B
22167c90765SKyle Evans
22267c90765SKyle Evans	atf_check -s exit:1 -o ignore -e ignore diff -u -u A B
22367c90765SKyle Evans	atf_check -s exit:1 -o ignore -e ignore diff -e -e A B
22467c90765SKyle Evans	atf_check -s exit:1 -o ignore -e ignore diff -y -y A B
22567c90765SKyle Evans	atf_check -s exit:1 -o ignore -e ignore diff -q -q A B
22667c90765SKyle Evans	atf_check -s exit:1 -o ignore -e ignore diff -c -c A B
22767c90765SKyle Evans	atf_check -s exit:1 -o ignore -e ignore diff --normal --normal A B
228db9cccfbSKyle Evans}
229db9cccfbSKyle Evans
230f096ed98SBaptiste Daroussinlabel_body()
231f096ed98SBaptiste Daroussin{
232f096ed98SBaptiste Daroussin	printf "\tA\n" > A
233f096ed98SBaptiste Daroussin
234f096ed98SBaptiste Daroussin	atf_check -o inline:"Files hello and world are identical\n" \
235f096ed98SBaptiste Daroussin		-s exit:0 diff --label hello --label world -s A A
236f096ed98SBaptiste Daroussin
237f096ed98SBaptiste Daroussin	atf_check -o inline:"Binary files hello and world differ\n" \
238f096ed98SBaptiste Daroussin		-s exit:1 diff --label hello --label world `which diff` `which ls`
239f096ed98SBaptiste Daroussin}
240f096ed98SBaptiste Daroussin
241108633bbSOlivier Cochardreport_identical_head()
242108633bbSOlivier Cochard{
243108633bbSOlivier Cochard	atf_set "require.config" unprivileged_user
244108633bbSOlivier Cochard}
2450702bf9cSBaptiste Daroussinreport_identical_body()
2460702bf9cSBaptiste Daroussin{
247108633bbSOlivier Cochard	UNPRIVILEGED_USER=$(atf_config_get unprivileged_user)
2480702bf9cSBaptiste Daroussin	printf "\tA\n" > A
2490702bf9cSBaptiste Daroussin	printf "\tB\n" > B
2500702bf9cSBaptiste Daroussin	chmod -r B
2510702bf9cSBaptiste Daroussin	atf_check -s exit:2 -e inline:"diff: B: Permission denied\n" \
252108633bbSOlivier Cochard		-o empty su -m "$UNPRIVILEGED_USER" -c 'diff -s A B'
2530702bf9cSBaptiste Daroussin}
2540702bf9cSBaptiste Daroussin
25507d72ca9SBaptiste Daroussinnon_regular_file_body()
25607d72ca9SBaptiste Daroussin{
25707d72ca9SBaptiste Daroussin	printf "\tA\n" > A
25807d72ca9SBaptiste Daroussin	mkfifo B
25907d72ca9SBaptiste Daroussin	printf "\tA\n" > B &
26007d72ca9SBaptiste Daroussin
26107d72ca9SBaptiste Daroussin	atf_check diff A B
26207d72ca9SBaptiste Daroussin	printf "\tB\n" > B &
26307d72ca9SBaptiste Daroussin	atf_check -s exit:1 \
26407d72ca9SBaptiste Daroussin		-o inline:"--- A\n+++ B\n@@ -1 +1 @@\n-\tA\n+\tB\n" \
26507d72ca9SBaptiste Daroussin		diff --label A --label B -u A B
26607d72ca9SBaptiste Daroussin}
26707d72ca9SBaptiste Daroussin
268*bda949b6SPiotr Pawel Stefaniakbinary_body()
269*bda949b6SPiotr Pawel Stefaniak{
270*bda949b6SPiotr Pawel Stefaniak	# the NUL byte has to be after at least BUFSIZ bytes to trick asciifile()
271*bda949b6SPiotr Pawel Stefaniak	yes 012345678901234567890123456789012345678901234567890 | head -n 174 > A
272*bda949b6SPiotr Pawel Stefaniak	cp A B
273*bda949b6SPiotr Pawel Stefaniak	printf '\n\0\n' >> A
274*bda949b6SPiotr Pawel Stefaniak	printf '\nx\n' >> B
275*bda949b6SPiotr Pawel Stefaniak
276*bda949b6SPiotr Pawel Stefaniak	atf_check -o inline:"Binary files A and B differ\n" -s exit:1 diff A B
277*bda949b6SPiotr Pawel Stefaniak	atf_check -o inline:"176c\nx\n.\n" -s exit:1 diff -ae A B
278*bda949b6SPiotr Pawel Stefaniak}
279*bda949b6SPiotr Pawel Stefaniak
280458cbf0aSEnji Cooperatf_init_test_cases()
281458cbf0aSEnji Cooper{
282458cbf0aSEnji Cooper	atf_add_test_case simple
283458cbf0aSEnji Cooper	atf_add_test_case unified
28458cf4d86SJilles Tjoelker	atf_add_test_case header
285385a67dcSJilles Tjoelker	atf_add_test_case header_ns
28605d06ecaSBaptiste Daroussin	atf_add_test_case ifdef
287fddcb7b8SBaptiste Daroussin	atf_add_test_case group_format
28829d65f1cSEnji Cooper	atf_add_test_case side_by_side
2894574a545SEnji Cooper	atf_add_test_case brief_format
2909977c7b5SXin LI	atf_add_test_case b230049
291ece58f7aSPiotr Pawel Stefaniak	atf_add_test_case stripcr_o
29212a8d302SEd Maste	atf_add_test_case b252515
293e68edb8cSKyle Evans	atf_add_test_case Bflag
2942816b999SBaptiste Daroussin	atf_add_test_case Nflag
29543fbd654SKyle Evans	atf_add_test_case tabsize
296db9cccfbSKyle Evans	atf_add_test_case conflicting_format
297f096ed98SBaptiste Daroussin	atf_add_test_case label
2980702bf9cSBaptiste Daroussin	atf_add_test_case report_identical
29907d72ca9SBaptiste Daroussin	atf_add_test_case non_regular_file
300*bda949b6SPiotr Pawel Stefaniak	atf_add_test_case binary
301458cbf0aSEnji Cooper}
302