Skip to content

Commit 1b5290b

Browse files
peffgitster
authored andcommitted
diff-highlight: add multi-byte tests
Now that we have a test suite for diff highlight, we can show off the improvements from 8d00662 (diff-highlight: do not split multibyte characters, 2015-04-03). While we're at it, we can also add another case that _doesn't_ work: combining code points are treated as their own unit, which means that we may stick colors between them and the character they are modifying (with the result that the color is not shown in an xterm, though it's possible that other terminals err the other way, and show the color but not the accent). There's no fix here, but let's document it as a failure. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 9f76e52 commit 1b5290b

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

contrib/diff-highlight/t/t9400-diff-highlight.sh

+35-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,41 @@ test_expect_failure 'diff-highlight highlights mismatched hunk size' '
207207
EOF
208208
'
209209

210-
# TODO add multi-byte test
210+
# These two code points share the same leading byte in UTF-8 representation;
211+
# a naive byte-wise diff would highlight only the second byte.
212+
#
213+
# - U+00f3 ("o" with acute)
214+
o_accent=$(printf '\303\263')
215+
# - U+00f8 ("o" with stroke)
216+
o_stroke=$(printf '\303\270')
217+
218+
test_expect_success 'diff-highlight treats multibyte utf-8 as a unit' '
219+
echo "unic${o_accent}de" >a &&
220+
echo "unic${o_stroke}de" >b &&
221+
dh_test a b <<-EOF
222+
@@ -1 +1 @@
223+
-unic${CW}${o_accent}${CR}de
224+
+unic${CW}${o_stroke}${CR}de
225+
EOF
226+
'
227+
228+
# Unlike the UTF-8 above, these are combining code points which are meant
229+
# to modify the character preceding them:
230+
#
231+
# - U+0301 (combining acute accent)
232+
combine_accent=$(printf '\314\201')
233+
# - U+0302 (combining circumflex)
234+
combine_circum=$(printf '\314\202')
235+
236+
test_expect_failure 'diff-highlight treats combining code points as a unit' '
237+
echo "unico${combine_accent}de" >a &&
238+
echo "unico${combine_circum}de" >b &&
239+
dh_test a b <<-EOF
240+
@@ -1 +1 @@
241+
-unic${CW}o${combine_accent}${CR}de
242+
+unic${CW}o${combine_circum}${CR}de
243+
EOF
244+
'
211245

212246
test_expect_success 'diff-highlight works with the --graph option' '
213247
dh_test_setup_history &&

0 commit comments

Comments
 (0)