Skip to content

Commit 60b6e22

Browse files
jrngitster
authored andcommitted
tests: Add tests for automatic use of pager
Git’s automatic pagination support has some subtleties. Add some tests to make sure we don’t break: - when git will use a pager by default; - the effect of the --paginate and --no-pager options; - the effect of pagination on use of color; - how the choice of pager is configured. This does not yet test: - use of pager by scripted commands (git svn and git am); - effect of the pager.* configuration variables; - setting of the LESS variable. Some features involve checking whether stdout is a terminal, so many of these tests are skipped unless output is passed through to the terminal (i.e., unless $GIT_TEST_OPTS includes --verbose). The immediate purpose for these tests was to avoid making things worse after the breakage from my jn/editor-pager series (see commit 376f39, 2009-11-20). Thanks to Sebastian Celis <[email protected]> for the report. Helped-by: Jeff King <[email protected]> Signed-off-by: Jonathan Nieder <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f6dff11 commit 60b6e22

File tree

1 file changed

+163
-0
lines changed

1 file changed

+163
-0
lines changed

t/t7006-pager.sh

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
#!/bin/sh
2+
3+
test_description='Test automatic use of a pager.'
4+
5+
. ./test-lib.sh
6+
7+
rm -f stdout_is_tty
8+
test_expect_success 'is stdout a terminal?' '
9+
if test -t 1
10+
then
11+
: > stdout_is_tty
12+
fi
13+
'
14+
15+
if test -e stdout_is_tty
16+
then
17+
test_set_prereq TTY
18+
else
19+
say stdout is not a terminal, so skipping some tests.
20+
fi
21+
22+
unset GIT_PAGER GIT_PAGER_IN_USE
23+
git config --unset core.pager
24+
PAGER='cat > paginated.out'
25+
export PAGER
26+
27+
test_expect_success 'setup' '
28+
test_commit initial
29+
'
30+
31+
rm -f paginated.out
32+
test_expect_success TTY 'some commands use a pager' '
33+
git log &&
34+
test -e paginated.out
35+
'
36+
37+
rm -f paginated.out
38+
test_expect_success TTY 'some commands do not use a pager' '
39+
git rev-list HEAD &&
40+
! test -e paginated.out
41+
'
42+
43+
rm -f paginated.out
44+
test_expect_success 'no pager when stdout is a pipe' '
45+
git log | cat &&
46+
! test -e paginated.out
47+
'
48+
49+
rm -f paginated.out
50+
test_expect_success 'no pager when stdout is a regular file' '
51+
git log > file &&
52+
! test -e paginated.out
53+
'
54+
55+
rm -f paginated.out
56+
test_expect_success TTY 'git --paginate rev-list uses a pager' '
57+
git --paginate rev-list HEAD &&
58+
test -e paginated.out
59+
'
60+
61+
rm -f file paginated.out
62+
test_expect_success 'no pager even with --paginate when stdout is a pipe' '
63+
git --paginate log | cat &&
64+
! test -e paginated.out
65+
'
66+
67+
rm -f paginated.out
68+
test_expect_success TTY 'no pager with --no-pager' '
69+
git --no-pager log &&
70+
! test -e paginated.out
71+
'
72+
73+
# A colored commit log will begin with an appropriate ANSI escape
74+
# for the first color; the text "commit" comes later.
75+
colorful() {
76+
read firstline < $1
77+
! expr "$firstline" : "^[a-zA-Z]" >/dev/null
78+
}
79+
80+
rm -f colorful.log colorless.log
81+
test_expect_success 'tests can detect color' '
82+
git log --no-color > colorless.log &&
83+
git log --color > colorful.log &&
84+
! colorful colorless.log &&
85+
colorful colorful.log
86+
'
87+
88+
rm -f colorless.log
89+
git config color.ui auto
90+
test_expect_success 'no color when stdout is a regular file' '
91+
git log > colorless.log &&
92+
! colorful colorless.log
93+
'
94+
95+
rm -f paginated.out
96+
git config color.ui auto
97+
test_expect_success TTY 'color when writing to a pager' '
98+
TERM=vt100 git log &&
99+
colorful paginated.out
100+
'
101+
102+
rm -f colorful.log
103+
git config color.ui auto
104+
test_expect_success 'color when writing to a file intended for a pager' '
105+
TERM=vt100 GIT_PAGER_IN_USE=true git log > colorful.log &&
106+
colorful colorful.log
107+
'
108+
109+
unset PAGER GIT_PAGER
110+
git config --unset core.pager
111+
test_expect_success 'determine default pager' '
112+
less=$(git var GIT_PAGER) &&
113+
test -n "$less"
114+
'
115+
116+
if expr "$less" : '^[a-z]*$' > /dev/null && test_have_prereq TTY
117+
then
118+
test_set_prereq SIMPLEPAGER
119+
fi
120+
121+
unset PAGER GIT_PAGER
122+
git config --unset core.pager
123+
rm -f default_pager_used
124+
test_expect_success SIMPLEPAGER 'default pager is used by default' '
125+
cat > $less <<-EOF &&
126+
#!$SHELL_PATH
127+
: > default_pager_used
128+
EOF
129+
chmod +x $less &&
130+
PATH=.:$PATH git log &&
131+
test -e default_pager_used
132+
'
133+
134+
unset GIT_PAGER
135+
git config --unset core.pager
136+
rm -f PAGER_used
137+
test_expect_success TTY 'PAGER overrides default pager' '
138+
PAGER=": > PAGER_used" &&
139+
export PAGER &&
140+
git log &&
141+
test -e PAGER_used
142+
'
143+
144+
unset GIT_PAGER
145+
rm -f core.pager_used
146+
test_expect_success TTY 'core.pager overrides PAGER' '
147+
PAGER=: &&
148+
export PAGER &&
149+
git config core.pager ": > core.pager_used" &&
150+
git log &&
151+
test -e core.pager_used
152+
'
153+
154+
rm -f GIT_PAGER_used
155+
test_expect_success TTY 'GIT_PAGER overrides core.pager' '
156+
git config core.pager : &&
157+
GIT_PAGER=": > GIT_PAGER_used" &&
158+
export GIT_PAGER &&
159+
git log &&
160+
test -e GIT_PAGER_used
161+
'
162+
163+
test_done

0 commit comments

Comments
 (0)