t4205, t6006: add tests that fail with i18n.logOutputEncoding set

Pretty format string %<(N,[ml]trunc)>%s truncates subject to a given
length with an appropriate padding. This works for non-ASCII texts when
i18n.logOutputEncoding is UTF-8 only (independently of a printed commit
message encoding) but does not work when i18n.logOutputEncoding is NOT
UTF-8.

There were no breakages as far as were no tests for the case
when both a commit message and logOutputEncoding are not UTF-8.

Add failing tests for that which will be fixed in the next patch.

Signed-off-by: Alexey Shumkin <Alex.Crezoff@gmail.com>
Helped-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Helped-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Alexey Shumkin 2014-05-21 17:20:06 +04:00 committed by Junio C Hamano
parent c82134a9f3
commit d928d81051
2 changed files with 213 additions and 2 deletions

View File

@ -154,6 +154,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'left alignment formatting. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(40)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two Z
message one Z
add bar Z
$(commit_msg) Z
EOF
test_cmp expected actual
'
test_expect_success 'left alignment formatting at the nth column' ' test_expect_success 'left alignment formatting at the nth column' '
git log --pretty="tformat:%h %<|(40)%s" >actual && git log --pretty="tformat:%h %<|(40)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -165,6 +176,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'left alignment formatting at the nth column. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %<|(40)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
$head1 message two Z
$head2 message one Z
$head3 add bar Z
$head4 $(commit_msg) Z
EOF
test_cmp expected actual
'
test_expect_success 'left alignment formatting with no padding' ' test_expect_success 'left alignment formatting with no padding' '
git log --pretty="tformat:%<(1)%s" >actual && git log --pretty="tformat:%<(1)%s" >actual &&
cat <<EOF >expected && cat <<EOF >expected &&
@ -176,6 +198,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'left alignment formatting with no padding. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(1)%s" >actual &&
cat <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two
message one
add bar
$(commit_msg)
EOF
test_cmp expected actual
'
test_expect_success 'left alignment formatting with trunc' ' test_expect_success 'left alignment formatting with trunc' '
git log --pretty="tformat:%<(10,trunc)%s" >actual && git log --pretty="tformat:%<(10,trunc)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -187,6 +220,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_failure 'left alignment formatting with trunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
message ..
message ..
add bar Z
initial...
EOF
test_cmp expected actual
'
test_expect_success 'left alignment formatting with ltrunc' ' test_expect_success 'left alignment formatting with ltrunc' '
git log --pretty="tformat:%<(10,ltrunc)%s" >actual && git log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -198,6 +242,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_failure 'left alignment formatting with ltrunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
..sage two
..sage one
add bar Z
..${sample_utf8_part}lich
EOF
test_cmp expected actual
'
test_expect_success 'left alignment formatting with mtrunc' ' test_expect_success 'left alignment formatting with mtrunc' '
git log --pretty="tformat:%<(10,mtrunc)%s" >actual && git log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -209,6 +264,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_failure 'left alignment formatting with mtrunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
mess.. two
mess.. one
add bar Z
init..lich
EOF
test_cmp expected actual
'
test_expect_success 'right alignment formatting' ' test_expect_success 'right alignment formatting' '
git log --pretty="tformat:%>(40)%s" >actual && git log --pretty="tformat:%>(40)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -220,6 +286,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'right alignment formatting. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(40)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
Z message two
Z message one
Z add bar
Z $(commit_msg)
EOF
test_cmp expected actual
'
test_expect_success 'right alignment formatting at the nth column' ' test_expect_success 'right alignment formatting at the nth column' '
git log --pretty="tformat:%h %>|(40)%s" >actual && git log --pretty="tformat:%h %>|(40)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -231,6 +308,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'right alignment formatting at the nth column. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %>|(40)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
$head1 message two
$head2 message one
$head3 add bar
$head4 $(commit_msg)
EOF
test_cmp expected actual
'
test_expect_success 'right alignment formatting with no padding' ' test_expect_success 'right alignment formatting with no padding' '
git log --pretty="tformat:%>(1)%s" >actual && git log --pretty="tformat:%>(1)%s" >actual &&
cat <<EOF >expected && cat <<EOF >expected &&
@ -242,6 +330,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'right alignment formatting with no padding. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(1)%s" >actual &&
cat <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two
message one
add bar
$(commit_msg)
EOF
test_cmp expected actual
'
test_expect_success 'center alignment formatting' ' test_expect_success 'center alignment formatting' '
git log --pretty="tformat:%><(40)%s" >actual && git log --pretty="tformat:%><(40)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -253,6 +352,16 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'center alignment formatting. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(40)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
Z message two Z
Z message one Z
Z add bar Z
Z $(commit_msg) Z
EOF
test_cmp expected actual
'
test_expect_success 'center alignment formatting at the nth column' ' test_expect_success 'center alignment formatting at the nth column' '
git log --pretty="tformat:%h %><|(40)%s" >actual && git log --pretty="tformat:%h %><|(40)%s" >actual &&
qz_to_tab_space <<EOF >expected && qz_to_tab_space <<EOF >expected &&
@ -264,6 +373,17 @@ EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'center alignment formatting at the nth column. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %><|(40)%s" >actual &&
qz_to_tab_space <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
$head1 message two Z
$head2 message one Z
$head3 add bar Z
$head4 $(commit_msg) Z
EOF
test_cmp expected actual
'
test_expect_success 'center alignment formatting with no padding' ' test_expect_success 'center alignment formatting with no padding' '
git log --pretty="tformat:%><(1)%s" >actual && git log --pretty="tformat:%><(1)%s" >actual &&
cat <<EOF >expected && cat <<EOF >expected &&
@ -278,6 +398,16 @@ EOF
# save HEAD's SHA-1 digest (with no abbreviations) to use it below # save HEAD's SHA-1 digest (with no abbreviations) to use it below
# as far as the next test amends HEAD # as far as the next test amends HEAD
old_head1=$(git rev-parse --verify HEAD~0) old_head1=$(git rev-parse --verify HEAD~0)
test_expect_success 'center alignment formatting with no padding. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(1)%s" >actual &&
cat <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two
message one
add bar
$(commit_msg)
EOF
test_cmp expected actual
'
test_expect_success 'left/right alignment formatting with stealing' ' test_expect_success 'left/right alignment formatting with stealing' '
git commit --amend -m short --author "long long long <long@me.com>" && git commit --amend -m short --author "long long long <long@me.com>" &&
@ -290,6 +420,16 @@ initial... A U Thor
EOF EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_failure 'left/right alignment formatting with stealing. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
cat <<EOF | iconv -f utf-8 -t $test_encoding >expected &&
short long long long
message .. A U Thor
add bar A U Thor
initial... A U Thor
EOF
test_cmp expected actual
'
# get new digests (with no abbreviations) # get new digests (with no abbreviations)
head1=$(git rev-parse --verify HEAD~0) && head1=$(git rev-parse --verify HEAD~0) &&

View File

@ -15,12 +15,22 @@ test_encoding="ISO8859-1"
# String "added" in German # String "added" in German
# (translated with Google Translate), # (translated with Google Translate),
# encoded in UTF-8, used as a commit log message below. # encoded in UTF-8, used as a commit log message below.
added=$(printf "added (hinzugef\303\274gt) foo") added_utf8_part=$(printf "\303\274")
added_utf8_part_iso88591=$(echo "$added_utf8_part" | iconv -f utf-8 -t $test_encoding)
added=$(printf "added (hinzugef${added_utf8_part}gt) foo")
added_iso88591=$(echo "$added" | iconv -f utf-8 -t $test_encoding) added_iso88591=$(echo "$added" | iconv -f utf-8 -t $test_encoding)
# same but "changed" # same but "changed"
changed=$(printf "changed (ge\303\244ndert) foo") changed_utf8_part=$(printf "\303\244")
changed_utf8_part_iso88591=$(echo "$changed_utf8_part" | iconv -f utf-8 -t $test_encoding)
changed=$(printf "changed (ge${changed_utf8_part}ndert) foo")
changed_iso88591=$(echo "$changed" | iconv -f utf-8 -t $test_encoding) changed_iso88591=$(echo "$changed" | iconv -f utf-8 -t $test_encoding)
# Count of char to truncate
# Number is chosen so, that non-ACSII characters
# (see $added_utf8_part and $changed_utf8_part)
# fall into truncated parts of appropriate words both from left and right
truncate_count=20
test_expect_success 'setup' ' test_expect_success 'setup' '
: >foo && : >foo &&
git add foo && git add foo &&
@ -139,6 +149,13 @@ commit $head1
$added $added
EOF EOF
test_format subject-truncated "%<($truncate_count,trunc)%s" <<EOF
commit $head2
changed (ge${changed_utf8_part}ndert)..
commit $head1
added (hinzugef${added_utf8_part}gt..
EOF
test_format body %b <<EOF test_format body %b <<EOF
commit $head2 commit $head2
commit $head1 commit $head1
@ -239,6 +256,33 @@ commit $head1
$added_iso88591 $added_iso88591
EOF EOF
test_format complex-subject-trunc "%<($truncate_count,trunc)%s" failure <<EOF
commit $head3
Test printing of c..
commit $head2
changed (ge${changed_utf8_part_iso88591}ndert)..
commit $head1
added (hinzugef${added_utf8_part_iso88591}gt..
EOF
test_format complex-subject-mtrunc "%<($truncate_count,mtrunc)%s" failure <<EOF
commit $head3
Test prin..ex bodies
commit $head2
changed (..dert) foo
commit $head1
added (hi..f${added_utf8_part_iso88591}gt) foo
EOF
test_format complex-subject-ltrunc "%<($truncate_count,ltrunc)%s" failure <<EOF
commit $head3
.. of complex bodies
commit $head2
..ged (ge${changed_utf8_part_iso88591}ndert) foo
commit $head1
.. (hinzugef${added_utf8_part_iso88591}gt) foo
EOF
test_expect_success 'prepare expected messages (for test %b)' ' test_expect_success 'prepare expected messages (for test %b)' '
cat <<-EOF >expected.utf-8 && cat <<-EOF >expected.utf-8 &&
commit $head3 commit $head3
@ -267,6 +311,33 @@ commit $head1
$added $added
EOF EOF
test_format complex-subject-commitencoding-unset-trunc "%<($truncate_count,trunc)%s" <<EOF
commit $head3
Test printing of c..
commit $head2
changed (ge${changed_utf8_part}ndert)..
commit $head1
added (hinzugef${added_utf8_part}gt..
EOF
test_format complex-subject-commitencoding-unset-mtrunc "%<($truncate_count,mtrunc)%s" <<EOF
commit $head3
Test prin..ex bodies
commit $head2
changed (..dert) foo
commit $head1
added (hi..f${added_utf8_part}gt) foo
EOF
test_format complex-subject-commitencoding-unset-ltrunc "%<($truncate_count,ltrunc)%s" <<EOF
commit $head3
.. of complex bodies
commit $head2
..ged (ge${changed_utf8_part}ndert) foo
commit $head1
.. (hinzugef${added_utf8_part}gt) foo
EOF
test_format complex-body-commitencoding-unset %b <expected.utf-8 test_format complex-body-commitencoding-unset %b <expected.utf-8
test_expect_success '%x00 shows NUL' ' test_expect_success '%x00 shows NUL' '