summaryrefslogtreecommitdiffhomepage
path: root/testsuite/diff.tests
blob: 06d5a4fd7923eaf70b4a775aa5750fcbcaa430dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/sh
# Copyright 2008 by Denys Vlasenko
# Licensed under GPL v2, see file LICENSE for details.

. ./testing.sh

# testing "test name" "options" "expected result" "file input" "stdin"

# diff outputs date/time in the header, which should not be analysed
# NB: sed has tab character in s command!
TRIM_TAB="sed 's/	.*//'"

testing "diff of stdin" \
	"diff -u - input | $TRIM_TAB" \
"\
--- -
+++ input
@@ -1 +1,3 @@
+qwe
 asd
+zxc
" \
	"qwe\nasd\nzxc\n" \
	"asd\n"

testing "diff of stdin, no newline in the file" \
	"diff -u - input | $TRIM_TAB" \
"\
--- -
+++ input
@@ -1 +1,3 @@
+qwe
 asd
+zxc
\\ No newline at end of file
" \
	"qwe\nasd\nzxc" \
	"asd\n"

# we also test that stdin is in fact NOT read
testing "diff of stdin, twice" \
	'diff - -; echo $?; wc -c' \
	"0\n5\n" \
	"" \
	"stdin"

testing "diff of empty file against nonempty one" \
	"diff -u - input | $TRIM_TAB" \
"\
--- -
+++ input
@@ -0,0 +1 @@
+a
" \
	"a\n" \
	""

testing "diff -b treats EOF as whitespace" \
	'diff -ub - input; echo $?' \
	"0\n" \
	"abc" \
	"abc "

testing "diff -b treats all spaces as equal" \
	'diff -ub - input; echo $?' \
	"0\n" \
	"a \t c\n" \
	"a\t \tc\n"

testing "diff -B ignores changes whose lines are all blank" \
	'diff -uB - input; echo $?' \
	"0\n" \
	"a\n" \
	"\na\n\n"

testing "diff -B does not ignore changes whose lines are not all blank" \
	"diff -uB - input | $TRIM_TAB" \
"\
--- -
+++ input
@@ -1,3 +1 @@
-
-b
-
+a
" \
	"a\n" \
	"\nb\n\n"

testing "diff always takes context from old file" \
	"diff -ub - input | $TRIM_TAB" \
"\
--- -
+++ input
@@ -1 +1,3 @@
+abc
 a c
+def
" \
	"abc\na  c\ndef\n" \
	"a c\n"

# testing "test name" "options" "expected result" "file input" "stdin"

rm -rf diff1 diff2
mkdir diff1 diff2 diff2/subdir
echo qwe >diff1/-
echo asd >diff2/subdir/-
optional FEATURE_DIFF_DIR
testing "diff diff1 diff2/subdir" \
	"diff -ur diff1 diff2/subdir | $TRIM_TAB" \
"\
--- diff1/-
+++ diff2/subdir/-
@@ -1 +1 @@
-qwe
+asd
" \
	"" ""
SKIP=

# using directory structure from prev test...
optional FEATURE_DIFF_DIR
testing "diff dir dir2/file/-" \
	"diff -ur diff1 diff2/subdir/- | $TRIM_TAB" \
"\
--- diff1/-
+++ diff2/subdir/-
@@ -1 +1 @@
-qwe
+asd
" \
	"" ""
SKIP=

# using directory structure from prev test...
mkdir diff1/test
mkfifo diff2/subdir/test
optional FEATURE_DIFF_DIR
testing "diff of dir and fifo" \
	"diff -ur diff1 diff2/subdir | $TRIM_TAB" \
"\
--- diff1/-
+++ diff2/subdir/-
@@ -1 +1 @@
-qwe
+asd
Only in diff2/subdir: test
" \
	"" ""
SKIP=

# using directory structure from prev test...
rmdir diff1/test
echo >diff1/test
optional FEATURE_DIFF_DIR
testing "diff of file and fifo" \
	"diff -ur diff1 diff2/subdir | $TRIM_TAB" \
"\
--- diff1/-
+++ diff2/subdir/-
@@ -1 +1 @@
-qwe
+asd
File diff2/subdir/test is not a regular file or directory and was skipped
" \
	"" ""
SKIP=

# using directory structure from prev test...
mkfifo diff1/test2
optional FEATURE_DIFF_DIR
testing "diff -rN does not read non-regular files" \
	"diff -urN diff1 diff2/subdir | $TRIM_TAB" \
"\
--- diff1/-
+++ diff2/subdir/-
@@ -1 +1 @@
-qwe
+asd
File diff2/subdir/test is not a regular file or directory and was skipped
File diff1/test2 is not a regular file or directory and was skipped
" \
	"" ""
SKIP=

# clean up
rm -rf diff1 diff2

exit $FAILCOUNT