Code

tests: Add tests for automatic use of pager
[git.git] / t / t7006-pager.sh
1 #!/bin/sh
3 test_description='Test automatic use of a pager.'
5 . ./test-lib.sh
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 '
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
22 unset GIT_PAGER GIT_PAGER_IN_USE
23 git config --unset core.pager
24 PAGER='cat > paginated.out'
25 export PAGER
27 test_expect_success 'setup' '
28         test_commit initial
29 '
31 rm -f paginated.out
32 test_expect_success TTY 'some commands use a pager' '
33         git log &&
34         test -e paginated.out
35 '
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 '
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 '
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 '
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 '
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 '
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 '
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 }
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 '
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 '
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
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
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"
116 if expr "$less" : '^[a-z]*$' > /dev/null && test_have_prereq TTY
117 then
118         test_set_prereq SIMPLEPAGER
119 fi
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
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
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
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
163 test_done