blob: 0ced0f248fed2f46a371e591c7ec6e5f2a3cb481
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 |
241 |