@@ -164,58 +164,209 @@ then
164
164
test_set_prereq SIMPLEPAGERTTY
165
165
fi
166
166
167
- test_expect_success SIMPLEPAGERTTY ' default pager is used by default' '
168
- unset PAGER GIT_PAGER;
169
- test_might_fail git config --unset core.pager &&
170
- rm -f default_pager_used ||
171
- cleanup_fail &&
167
+ # Use this helper to make it easy for the caller of your
168
+ # terminal-using function to specify whether it should fail.
169
+ # If you write
170
+ #
171
+ # your_test() {
172
+ # parse_args "$@"
173
+ #
174
+ # $test_expectation "$cmd - behaves well" "
175
+ # ...
176
+ # $full_command &&
177
+ # ...
178
+ # "
179
+ # }
180
+ #
181
+ # then your test can be used like this:
182
+ #
183
+ # your_test expect_(success|failure) [test_must_fail] 'git foo'
184
+ #
185
+ parse_args () {
186
+ test_expectation=" test_$1 "
187
+ shift
188
+ if test " $1 " = test_must_fail
189
+ then
190
+ full_command=" test_must_fail test_terminal "
191
+ shift
192
+ else
193
+ full_command=" test_terminal "
194
+ fi
195
+ cmd=$1
196
+ full_command=" $full_command $1 "
197
+ }
172
198
173
- cat >$less <<-\EOF &&
174
- #!/bin/sh
175
- wc >default_pager_used
176
- EOF
177
- chmod +x $less &&
178
- (
179
- PATH=.:$PATH &&
180
- export PATH &&
181
- test_terminal git log
182
- ) &&
183
- test -e default_pager_used
184
- '
199
+ test_default_pager () {
200
+ parse_args " $@ "
201
+
202
+ $test_expectation SIMPLEPAGERTTY " $cmd - default pager is used by default" "
203
+ unset PAGER GIT_PAGER;
204
+ test_might_fail git config --unset core.pager &&
205
+ rm -f default_pager_used ||
206
+ cleanup_fail &&
207
+
208
+ cat >\$ less <<-\EOF &&
209
+ #!/bin/sh
210
+ wc >default_pager_used
211
+ EOF
212
+ chmod +x \$ less &&
213
+ (
214
+ PATH=.:\$ PATH &&
215
+ export PATH &&
216
+ $full_command
217
+ ) &&
218
+ test -e default_pager_used
219
+ "
220
+ }
185
221
186
- test_expect_success TTY ' PAGER overrides default pager' '
187
- unset GIT_PAGER;
188
- test_might_fail git config --unset core.pager &&
189
- rm -f PAGER_used ||
190
- cleanup_fail &&
222
+ test_PAGER_overrides () {
223
+ parse_args " $@ "
191
224
192
- PAGER="wc >PAGER_used" &&
193
- export PAGER &&
194
- test_terminal git log &&
195
- test -e PAGER_used
196
- '
225
+ $test_expectation TTY " $cmd - PAGER overrides default pager " "
226
+ unset GIT_PAGER;
227
+ test_might_fail git config --unset core.pager &&
228
+ rm -f PAGER_used ||
229
+ cleanup_fail &&
197
230
198
- test_expect_success TTY ' core.pager overrides PAGER' '
199
- unset GIT_PAGER;
200
- rm -f core.pager_used ||
201
- cleanup_fail &&
231
+ PAGER='wc >PAGER_used' &&
232
+ export PAGER &&
233
+ $full_command &&
234
+ test -e PAGER_used
235
+ "
236
+ }
202
237
203
- PAGER=wc &&
204
- export PAGER &&
205
- git config core.pager "wc >core.pager_used" &&
206
- test_terminal git log &&
207
- test -e core.pager_used
208
- '
238
+ test_core_pager_overrides () {
239
+ if_local_config=
240
+ used_if_wanted=' overrides PAGER'
241
+ test_core_pager " $@ "
242
+ }
209
243
210
- test_expect_success TTY ' GIT_PAGER overrides core.pager' '
211
- rm -f GIT_PAGER_used ||
212
- cleanup_fail &&
244
+ test_local_config_ignored () {
245
+ if_local_config=' ! '
246
+ used_if_wanted=' is not used'
247
+ test_core_pager " $@ "
248
+ }
213
249
214
- git config core.pager wc &&
215
- GIT_PAGER="wc >GIT_PAGER_used" &&
216
- export GIT_PAGER &&
217
- test_terminal git log &&
218
- test -e GIT_PAGER_used
250
+ test_core_pager () {
251
+ parse_args " $@ "
252
+
253
+ $test_expectation TTY " $cmd - repository-local core.pager setting $used_if_wanted " "
254
+ unset GIT_PAGER;
255
+ rm -f core.pager_used ||
256
+ cleanup_fail &&
257
+
258
+ PAGER=wc &&
259
+ export PAGER &&
260
+ git config core.pager 'wc >core.pager_used' &&
261
+ $full_command &&
262
+ ${if_local_config} test -e core.pager_used
263
+ "
264
+ }
265
+
266
+ test_core_pager_subdir () {
267
+ if_local_config=
268
+ used_if_wanted=' overrides PAGER'
269
+ test_pager_subdir_helper " $@ "
270
+ }
271
+
272
+ test_no_local_config_subdir () {
273
+ if_local_config=' ! '
274
+ used_if_wanted=' is not used'
275
+ test_pager_subdir_helper " $@ "
276
+ }
277
+
278
+ test_pager_subdir_helper () {
279
+ parse_args " $@ "
280
+
281
+ $test_expectation TTY " $cmd - core.pager $used_if_wanted from subdirectory" "
282
+ unset GIT_PAGER;
283
+ rm -f core.pager_used &&
284
+ rm -fr sub ||
285
+ cleanup_fail &&
286
+
287
+ PAGER=wc &&
288
+ stampname=\$ (pwd)/core.pager_used &&
289
+ export PAGER stampname &&
290
+ git config core.pager 'wc >\"\$ stampname\" ' &&
291
+ mkdir sub &&
292
+ (
293
+ cd sub &&
294
+ $full_command
295
+ ) &&
296
+ ${if_local_config} test -e core.pager_used
297
+ "
298
+ }
299
+
300
+ test_GIT_PAGER_overrides () {
301
+ parse_args " $@ "
302
+
303
+ $test_expectation TTY " $cmd - GIT_PAGER overrides core.pager" "
304
+ rm -f GIT_PAGER_used ||
305
+ cleanup_fail &&
306
+
307
+ git config core.pager wc &&
308
+ GIT_PAGER='wc >GIT_PAGER_used' &&
309
+ export GIT_PAGER &&
310
+ $full_command &&
311
+ test -e GIT_PAGER_used
312
+ "
313
+ }
314
+
315
+ test_doesnt_paginate () {
316
+ parse_args " $@ "
317
+
318
+ $test_expectation TTY " no pager for '$cmd '" "
319
+ rm -f GIT_PAGER_used ||
320
+ cleanup_fail &&
321
+
322
+ GIT_PAGER='wc >GIT_PAGER_used' &&
323
+ export GIT_PAGER &&
324
+ $full_command &&
325
+ ! test -e GIT_PAGER_used
326
+ "
327
+ }
328
+
329
+ test_pager_choices () {
330
+ test_default_pager expect_success " $@ "
331
+ test_PAGER_overrides expect_success " $@ "
332
+ test_core_pager_overrides expect_success " $@ "
333
+ test_core_pager_subdir expect_success " $@ "
334
+ test_GIT_PAGER_overrides expect_success " $@ "
335
+ }
336
+
337
+ test_expect_success ' setup: some aliases' '
338
+ git config alias.aliasedlog log &&
339
+ git config alias.true "!true"
219
340
'
220
341
342
+ test_pager_choices ' git log'
343
+ test_pager_choices ' git -p log'
344
+ test_pager_choices ' git aliasedlog'
345
+
346
+ test_default_pager expect_success ' git -p aliasedlog'
347
+ test_PAGER_overrides expect_success ' git -p aliasedlog'
348
+ test_core_pager_overrides expect_success ' git -p aliasedlog'
349
+ test_core_pager_subdir expect_failure ' git -p aliasedlog'
350
+ test_GIT_PAGER_overrides expect_success ' git -p aliasedlog'
351
+
352
+ test_default_pager expect_success ' git -p true'
353
+ test_PAGER_overrides expect_success ' git -p true'
354
+ test_core_pager_overrides expect_success ' git -p true'
355
+ test_core_pager_subdir expect_failure ' git -p true'
356
+ test_GIT_PAGER_overrides expect_success ' git -p true'
357
+
358
+ test_default_pager expect_success test_must_fail ' git -p request-pull'
359
+ test_PAGER_overrides expect_success test_must_fail ' git -p request-pull'
360
+ test_core_pager_overrides expect_success test_must_fail ' git -p request-pull'
361
+ test_core_pager_subdir expect_failure test_must_fail ' git -p request-pull'
362
+ test_GIT_PAGER_overrides expect_success test_must_fail ' git -p request-pull'
363
+
364
+ test_default_pager expect_success test_must_fail ' git -p'
365
+ test_PAGER_overrides expect_success test_must_fail ' git -p'
366
+ test_local_config_ignored expect_failure test_must_fail ' git -p'
367
+ test_no_local_config_subdir expect_success test_must_fail ' git -p'
368
+ test_GIT_PAGER_overrides expect_success test_must_fail ' git -p'
369
+
370
+ test_doesnt_paginate expect_failure test_must_fail ' git -p nonsense'
371
+
221
372
test_done
0 commit comments