-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
diff --stat: tests for long filenames and big change counts
In preparation for updates to the "diff --stat" that updates the logic to split the allotted columns into the name part and the graph part to make the output more readable, add a handful of tests to document the corner case behaviour in which long filenames and big changes are shown. When a pathname is so long that it cannot fit on the column, the current code truncates it to make sure that the graph part has enough room to show a meaningful graph. If the actual change is small (e.g. only one line changed), this results in the final output that is shorter than the width we aim for. Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Junio C Hamano
committed
Mar 1, 2012
1 parent
db65f0f
commit 31c2373
Showing
1 changed file
with
182 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2012 Zbigniew Jędrzejewski-Szmek | ||
# | ||
|
||
test_description='test --stat output of various commands' | ||
|
||
. ./test-lib.sh | ||
. "$TEST_DIRECTORY"/lib-terminal.sh | ||
|
||
# 120 character name | ||
name=aaaaaaaaaa | ||
name=$name$name$name$name$name$name$name$name$name$name$name$name | ||
test_expect_success 'preparation' ' | ||
>"$name" && | ||
git add "$name" && | ||
git commit -m message && | ||
echo a >"$name" && | ||
git commit -m message "$name" | ||
' | ||
|
||
while read cmd args | ||
do | ||
cat >expect <<-'EOF' | ||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + | ||
EOF | ||
test_expect_success "$cmd: a short graph bar does not extend to the full width" ' | ||
git $cmd $args >output && | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
cat >expect <<-'EOF' | ||
...aaaaaaaaaaaaaaaaaaaaaa | 1 + | ||
EOF | ||
test_expect_success "$cmd --stat=width: name is chopped to leave room to the right of a short bar" ' | ||
git $cmd $args --stat=40 >output && | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success "$cmd --stat-width=width with long name" ' | ||
git $cmd $args --stat-width=40 >output && | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
cat >expect <<-'EOF' | ||
...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + | ||
EOF | ||
test_expect_success "$cmd --stat=...,name-width with long name" ' | ||
git $cmd $args --stat=60,30 >output && | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success "$cmd --stat-name-width with long name" ' | ||
git $cmd $args --stat-name-width=30 >output && | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
done <<\EOF | ||
format-patch -1 --stdout | ||
diff HEAD^ HEAD --stat | ||
show --stat | ||
log -1 --stat | ||
EOF | ||
|
||
|
||
test_expect_success 'preparation for big change tests' ' | ||
>abcd && | ||
git add abcd && | ||
git commit -m message && | ||
i=0 && | ||
while test $i -lt 1000 | ||
do | ||
echo $i && i=$(($i + 1)) | ||
done >abcd && | ||
git commit -m message abcd | ||
' | ||
|
||
cat >expect80 <<'EOF' | ||
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
EOF | ||
|
||
while read verb expect cmd args | ||
do | ||
test_expect_success "$cmd $verb COLUMNS (big change)" ' | ||
COLUMNS=200 git $cmd $args >output | ||
grep " | " output >actual && | ||
test_cmp "$expect" actual | ||
' | ||
done <<\EOF | ||
ignores expect80 format-patch -1 --stdout | ||
ignores expect80 diff HEAD^ HEAD --stat | ||
ignores expect80 show --stat | ||
ignores expect80 log -1 --stat | ||
EOF | ||
|
||
cat >expect <<'EOF' | ||
abcd | 1000 ++++++++++++++++++++++++++ | ||
EOF | ||
while read cmd args | ||
do | ||
test_expect_success "$cmd --stat=width with big change" ' | ||
git $cmd $args --stat=40 >output | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success "$cmd --stat-width=width with big change" ' | ||
git $cmd $args --stat-width=40 >output | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
done <<\EOF | ||
format-patch -1 --stdout | ||
diff HEAD^ HEAD --stat | ||
show --stat | ||
log -1 --stat | ||
EOF | ||
|
||
test_expect_success 'preparation for long filename tests' ' | ||
cp abcd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa && | ||
git add aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa && | ||
git commit -m message | ||
' | ||
|
||
cat >expect <<'EOF' | ||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++ | ||
EOF | ||
while read cmd args | ||
do | ||
test_expect_success "$cmd --stat=width with big change and long name favors name part" ' | ||
git $cmd $args --stat-width=60 >output && | ||
grep " | " output >actual && | ||
test_cmp expect actual | ||
' | ||
done <<\EOF | ||
format-patch -1 --stdout | ||
diff HEAD^ HEAD --stat | ||
show --stat | ||
log -1 --stat | ||
EOF | ||
|
||
cat >expect80 <<'EOF' | ||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++ | ||
EOF | ||
while read verb expect cmd args | ||
do | ||
test_expect_success "$cmd $verb COLUMNS (long filename)" ' | ||
COLUMNS=200 git $cmd $args >output | ||
grep " | " output >actual && | ||
test_cmp "$expect" actual | ||
' | ||
done <<\EOF | ||
ignores expect80 format-patch -1 --stdout | ||
ignores expect80 diff HEAD^ HEAD --stat | ||
ignores expect80 show --stat | ||
ignores expect80 log -1 --stat | ||
EOF | ||
|
||
cat >expect <<'EOF' | ||
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
EOF | ||
test_expect_success 'merge --stat ignores COLUMNS (big change)' ' | ||
git checkout -b branch HEAD^^ && | ||
COLUMNS=100 git merge --stat --no-ff master^ >output && | ||
grep " | " output >actual | ||
test_cmp expect actual | ||
' | ||
|
||
cat >expect <<'EOF' | ||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++ | ||
EOF | ||
test_expect_success 'merge --stat ignores COLUMNS (long filename)' ' | ||
COLUMNS=100 git merge --stat --no-ff master >output && | ||
grep " | " output >actual | ||
test_cmp expect actual | ||
' | ||
|
||
test_done |