Skip to content

Commit 915c96d

Browse files
committed
pretty: test --expand-tabs
The test prepares a simple commit with HT on its log message lines, and makes sure that - formats that should or should not expand tabs by default do or do not expand tabs respectively, - with explicit --expand-tabs=<N> and short-hands --expand-tabs (equivalent to --expand-tabs=8) and --no-expand-tabs (equivalent to --expand-tabs=0) before or after the explicit --pretty=$fmt, the tabs are expanded (or not expanded) accordingly. The tests use the second line of the log message for formats other than --pretty=short, primarily because the first line of the email format is handled specially to add the [PATCH] prefix, etc. in a separate codepath (--pretty=short uses the first line because there is no other line to test). Signed-off-by: Junio C Hamano <[email protected]>
1 parent fe37a9c commit 915c96d

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

t/t4213-log-tabexpand.sh

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#!/bin/sh
2+
3+
test_description='log/show --expand-tabs'
4+
5+
. ./test-lib.sh
6+
7+
HT=" "
8+
title='tab indent at the beginning of the title line'
9+
body='tab indent on a line in the body'
10+
11+
# usage: count_expand $indent $numSP $numHT @format_args
12+
count_expand ()
13+
{
14+
expect=
15+
count=$(( $1 + $2 )) ;# expected spaces
16+
while test $count -gt 0
17+
do
18+
expect="$expect "
19+
count=$(( $count - 1 ))
20+
done
21+
shift 2
22+
count=$1 ;# expected tabs
23+
while test $count -gt 0
24+
do
25+
expect="$expect$HT"
26+
count=$(( $count - 1 ))
27+
done
28+
shift
29+
30+
# The remainder of the command line is "git show -s" options
31+
case " $* " in
32+
*' --pretty=short '*)
33+
line=$title ;;
34+
*)
35+
line=$body ;;
36+
esac
37+
38+
# Prefix the output with the command line arguments, and
39+
# replace SP with a dot both in the expecte and actual output
40+
# so that test_cmp would show the differene together with the
41+
# breakage in a way easier to consume by the debugging user.
42+
{
43+
echo "git show -s $*"
44+
echo "$expect$line"
45+
} | sed -e 's/ /./g' >expect
46+
47+
{
48+
echo "git show -s $*"
49+
git show -s "$@" |
50+
sed -n -e "/$line\$/p"
51+
} | sed -e 's/ /./g' >actual
52+
53+
test_cmp expect actual
54+
}
55+
56+
test_expand ()
57+
{
58+
fmt=$1
59+
case "$fmt" in
60+
*=raw | *=short | *=email)
61+
default="0 1" ;;
62+
*)
63+
default="8 0" ;;
64+
esac
65+
case "$fmt" in
66+
*=email)
67+
in=0 ;;
68+
*)
69+
in=4 ;;
70+
esac
71+
test_expect_success "expand/no-expand${fmt:+ for $fmt}" '
72+
count_expand $in $default $fmt &&
73+
count_expand $in 8 0 $fmt --expand-tabs &&
74+
count_expand $in 8 0 --expand-tabs $fmt &&
75+
count_expand $in 8 0 $fmt --expand-tabs=8 &&
76+
count_expand $in 8 0 --expand-tabs=8 $fmt &&
77+
count_expand $in 0 1 $fmt --no-expand-tabs &&
78+
count_expand $in 0 1 --no-expand-tabs $fmt &&
79+
count_expand $in 0 1 $fmt --expand-tabs=0 &&
80+
count_expand $in 0 1 --expand-tabs=0 $fmt &&
81+
count_expand $in 4 0 $fmt --expand-tabs=4 &&
82+
count_expand $in 4 0 --expand-tabs=4 $fmt
83+
'
84+
}
85+
86+
test_expect_success 'setup' '
87+
test_tick &&
88+
sed -e "s/Q/$HT/g" <<-EOF >msg &&
89+
Q$title
90+
91+
Q$body
92+
EOF
93+
git commit --allow-empty -F msg
94+
'
95+
96+
test_expand ""
97+
test_expand --pretty
98+
test_expand --pretty=short
99+
test_expand --pretty=medium
100+
test_expand --pretty=full
101+
test_expand --pretty=fuller
102+
test_expand --pretty=raw
103+
test_expand --pretty=email
104+
105+
test_done

0 commit comments

Comments
 (0)