summaryrefslogtreecommitdiffhomepage
path: root/testsuite/diff.tests
blob: 06bf163d0a10174646b135e947f59973e36a037a (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
#!/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"

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

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

test x"$SKIP_KNOWN_BUGS" = x"" && \
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/-
testing "diff diff1 diff2/subdir" \
	"diff -ur diff1 diff2/subdir | $TRIM_TAB" \
"\
--- diff1/-
+++ diff2/subdir/-
@@ -1 +1 @@
-qwe
+asd
" \
	"" ""

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

# using directory structure from prev test...
mkdir diff1/test
mkfifo diff2/subdir/test
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
" \
	"" ""

# using directory structure from prev test...
rmdir diff1/test
echo >diff1/test
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
" \
	"" ""

# using directory structure from prev test...
mkfifo diff1/test2
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
" \
	"" ""

# clean up
rm -rf diff1 diff2

exit $FAILCOUNT