diff: improve positioning of add/delete blocks in diffs
[git/git.git] / t / t4061-diff-indent.sh
1 #!/bin/sh
2
3 test_description='Test diff indent heuristic.
4
5 '
6 . ./test-lib.sh
7 . "$TEST_DIRECTORY"/diff-lib.sh
8
9 # Compare two diff outputs. Ignore "index" lines, because we don't
10 # care about SHA-1s or file modes.
11 compare_diff () {
12 sed -e "/^index /d" <"$1" >.tmp-1
13 sed -e "/^index /d" <"$2" >.tmp-2
14 test_cmp .tmp-1 .tmp-2 && rm -f .tmp-1 .tmp-2
15 }
16
17 test_expect_success 'prepare' '
18 cat <<-\EOF >spaces.txt &&
19 1
20 2
21 a
22
23 b
24 3
25 4
26 EOF
27
28 cat <<-\EOF >functions.c &&
29 1
30 2
31 /* function */
32 foo() {
33 foo
34 }
35
36 3
37 4
38 EOF
39
40 git add spaces.txt functions.c &&
41 test_tick &&
42 git commit -m initial &&
43 git branch old &&
44
45 cat <<-\EOF >spaces.txt &&
46 1
47 2
48 a
49
50 b
51 a
52
53 b
54 3
55 4
56 EOF
57
58 cat <<-\EOF >functions.c &&
59 1
60 2
61 /* function */
62 bar() {
63 foo
64 }
65
66 /* function */
67 foo() {
68 foo
69 }
70
71 3
72 4
73 EOF
74
75 git add spaces.txt functions.c &&
76 test_tick &&
77 git commit -m initial &&
78 git branch new &&
79
80 tr "_" " " <<-\EOF >spaces-expect &&
81 diff --git a/spaces.txt b/spaces.txt
82 --- a/spaces.txt
83 +++ b/spaces.txt
84 @@ -3,5 +3,8 @@
85 a
86 _
87 b
88 +a
89 +
90 +b
91 3
92 4
93 EOF
94
95 tr "_" " " <<-\EOF >spaces-compacted-expect &&
96 diff --git a/spaces.txt b/spaces.txt
97 --- a/spaces.txt
98 +++ b/spaces.txt
99 @@ -2,6 +2,9 @@
100 2
101 a
102 _
103 +b
104 +a
105 +
106 b
107 3
108 4
109 EOF
110
111 tr "_" " " <<-\EOF >functions-expect &&
112 diff --git a/functions.c b/functions.c
113 --- a/functions.c
114 +++ b/functions.c
115 @@ -1,6 +1,11 @@
116 1
117 2
118 /* function */
119 +bar() {
120 + foo
121 +}
122 +
123 +/* function */
124 foo() {
125 foo
126 }
127 EOF
128
129 tr "_" " " <<-\EOF >functions-compacted-expect
130 diff --git a/functions.c b/functions.c
131 --- a/functions.c
132 +++ b/functions.c
133 @@ -1,5 +1,10 @@
134 1
135 2
136 +/* function */
137 +bar() {
138 + foo
139 +}
140 +
141 /* function */
142 foo() {
143 foo
144 EOF
145 '
146
147 test_expect_success 'diff: ugly spaces' '
148 git diff old new -- spaces.txt >out &&
149 compare_diff spaces-expect out
150 '
151
152 test_expect_success 'diff: nice spaces with --indent-heuristic' '
153 git diff --indent-heuristic old new -- spaces.txt >out-compacted &&
154 compare_diff spaces-compacted-expect out-compacted
155 '
156
157 test_expect_success 'diff: nice spaces with diff.indentHeuristic' '
158 git -c diff.indentHeuristic=true diff old new -- spaces.txt >out-compacted2 &&
159 compare_diff spaces-compacted-expect out-compacted2
160 '
161
162 test_expect_success 'diff: --no-indent-heuristic overrides config' '
163 git -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 &&
164 compare_diff spaces-expect out2
165 '
166
167 test_expect_success 'diff: --indent-heuristic with --patience' '
168 git diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 &&
169 compare_diff spaces-compacted-expect out-compacted3
170 '
171
172 test_expect_success 'diff: --indent-heuristic with --histogram' '
173 git diff --indent-heuristic --histogram old new -- spaces.txt >out-compacted4 &&
174 compare_diff spaces-compacted-expect out-compacted4
175 '
176
177 test_expect_success 'diff: ugly functions' '
178 git diff old new -- functions.c >out &&
179 compare_diff functions-expect out
180 '
181
182 test_expect_success 'diff: nice functions with --indent-heuristic' '
183 git diff --indent-heuristic old new -- functions.c >out-compacted &&
184 compare_diff functions-compacted-expect out-compacted
185 '
186
187 test_done