testsuite: update busybox and bzcat tests
[oweals/busybox.git] / testsuite / diff.tests
1 #!/bin/sh
2 # Copyright 2008 by Denys Vlasenko
3 # Licensed under GPLv2, see file LICENSE in this source tree.
4
5 . ./testing.sh
6
7 # testing "test name" "commands" "expected result" "file input" "stdin"
8
9 # diff outputs date/time in the header, which should not be analysed
10 # NB: sed has tab character in s command!
11 TRIM_TAB="sed 's/       .*//'"
12
13 testing "diff of stdin" \
14         "diff -u - input | $TRIM_TAB" \
15 "\
16 --- -
17 +++ input
18 @@ -1 +1,3 @@
19 +qwe
20  asd
21 +zxc
22 " \
23         "qwe\nasd\nzxc\n" \
24         "asd\n"
25
26 testing "diff of stdin, no newline in the file" \
27         "diff -u - input | $TRIM_TAB" \
28 "\
29 --- -
30 +++ input
31 @@ -1 +1,3 @@
32 +qwe
33  asd
34 +zxc
35 \\ No newline at end of file
36 " \
37         "qwe\nasd\nzxc" \
38         "asd\n"
39
40 # we also test that stdin is in fact NOT read
41 testing "diff of stdin, twice" \
42         'diff - -; echo $?; wc -c' \
43         "0\n5\n" \
44         "" \
45         "stdin"
46
47 testing "diff of empty file against stdin" \
48         "diff -u - input | $TRIM_TAB" \
49 "\
50 --- -
51 +++ input
52 @@ -1 +0,0 @@
53 -a
54 " \
55         "" \
56         "a\n"
57
58 testing "diff of empty file against nonempty one" \
59         "diff -u - input | $TRIM_TAB" \
60 "\
61 --- -
62 +++ input
63 @@ -0,0 +1 @@
64 +a
65 " \
66         "a\n" \
67         ""
68
69 testing "diff -b treats EOF as whitespace" \
70         'diff -ub - input; echo $?' \
71         "0\n" \
72         "abc" \
73         "abc "
74
75 testing "diff -b treats all spaces as equal" \
76         'diff -ub - input; echo $?' \
77         "0\n" \
78         "a \t c\n" \
79         "a\t \tc\n"
80
81 testing "diff -B ignores changes whose lines are all blank" \
82         'diff -uB - input; echo $?' \
83         "0\n" \
84         "a\n" \
85         "\na\n\n"
86
87 testing "diff -B does not ignore changes whose lines are not all blank" \
88         "diff -uB - input | $TRIM_TAB" \
89 "\
90 --- -
91 +++ input
92 @@ -1,3 +1 @@
93 -
94 -b
95 -
96 +a
97 " \
98         "a\n" \
99         "\nb\n\n"
100
101 testing "diff -B ignores blank single line change" \
102         'diff -qB - input; echo $?' \
103         "0\n" \
104         "\n1\n" \
105         "1\n"
106
107 testing "diff -B does not ignore non-blank single line change" \
108         'diff -qB - input; echo $?' \
109         "Files - and input differ\n1\n" \
110         "0\n" \
111         "1\n"
112
113 testing "diff always takes context from old file" \
114         "diff -ub - input | $TRIM_TAB" \
115 "\
116 --- -
117 +++ input
118 @@ -1 +1,3 @@
119 +abc
120  a c
121 +def
122 " \
123         "abc\na  c\ndef\n" \
124         "a c\n"
125
126 # testing "test name" "commands" "expected result" "file input" "stdin"
127
128 # clean up
129 rm -rf diff1 diff2
130
131 mkdir diff1 diff2 diff2/subdir
132 echo qwe >diff1/-
133 echo asd >diff2/subdir/-
134 optional FEATURE_DIFF_DIR
135 testing "diff diff1 diff2/subdir" \
136         "diff -ur diff1 diff2/subdir | $TRIM_TAB" \
137 "\
138 --- diff1/-
139 +++ diff2/subdir/-
140 @@ -1 +1 @@
141 -qwe
142 +asd
143 " \
144         "" ""
145 SKIP=
146
147 # using directory structure from prev test...
148 optional FEATURE_DIFF_DIR
149 testing "diff dir dir2/file/-" \
150         "diff -ur diff1 diff2/subdir/- | $TRIM_TAB" \
151 "\
152 --- diff1/-
153 +++ diff2/subdir/-
154 @@ -1 +1 @@
155 -qwe
156 +asd
157 " \
158         "" ""
159 SKIP=
160
161 # using directory structure from prev test...
162 mkdir diff1/test
163 mkfifo diff2/subdir/test
164 optional FEATURE_DIFF_DIR
165 testing "diff of dir and fifo" \
166         "diff -ur diff1 diff2/subdir | $TRIM_TAB" \
167 "\
168 --- diff1/-
169 +++ diff2/subdir/-
170 @@ -1 +1 @@
171 -qwe
172 +asd
173 Only in diff2/subdir: test
174 " \
175         "" ""
176 SKIP=
177
178 # using directory structure from prev test...
179 rmdir diff1/test
180 echo >diff1/test
181 optional FEATURE_DIFF_DIR
182 testing "diff of file and fifo" \
183         "diff -ur diff1 diff2/subdir | $TRIM_TAB" \
184 "\
185 --- diff1/-
186 +++ diff2/subdir/-
187 @@ -1 +1 @@
188 -qwe
189 +asd
190 File diff2/subdir/test is not a regular file or directory and was skipped
191 " \
192         "" ""
193 SKIP=
194
195 # using directory structure from prev test...
196 mkfifo diff1/test2
197 optional FEATURE_DIFF_DIR
198 testing "diff -rN does not read non-regular files" \
199         "diff -urN diff1 diff2/subdir | $TRIM_TAB" \
200 "\
201 --- diff1/-
202 +++ diff2/subdir/-
203 @@ -1 +1 @@
204 -qwe
205 +asd
206 File diff2/subdir/test is not a regular file or directory and was skipped
207 File diff1/test2 is not a regular file or directory and was skipped
208 " \
209         "" ""
210 SKIP=
211
212 # clean up
213 rm -rf diff1 diff2
214
215 # NOT using directory structure from prev test...
216 mkdir diff1 diff2
217 echo qwe >diff1/-
218 echo rty >diff2/-
219 optional FEATURE_DIFF_DIR
220 testing "diff diff1 diff2/" \
221         "diff -ur diff1 diff2/ | $TRIM_TAB; diff -ur .///diff1 diff2//// | $TRIM_TAB" \
222 "\
223 --- diff1/-
224 +++ diff2/-
225 @@ -1 +1 @@
226 -qwe
227 +rty
228 --- .///diff1/-
229 +++ diff2////-
230 @@ -1 +1 @@
231 -qwe
232 +rty
233 " \
234         "" ""
235 SKIP=
236
237 # clean up
238 rm -rf diff1 diff2
239
240 exit $FAILCOUNT