@matheusbsbs / matheus-bagliano / commits / 60b6e2200d
Fork 0

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 <sebastian@sebastiancelis.com> for the report. Helped-by: Jeff King <peff@peff.net> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Nieder committed Feb 19, 2010 at 01:18 UTC 60b6e2200deff208a9757721544a3a311034804f
1 file changed +163
t/t7006-pager.sh new
+163
@@ -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