#!/bin/sh

test_description='Test automatic use of a pager.'

. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-pager.sh

cleanup_fail() {
	echo >&2 cleanup failed
	(exit 1)
}

test_expect_success 'set up terminal for tests' '
	rm -f stdout_is_tty ||
	cleanup_fail &&

	if test -t 1
	then
		>stdout_is_tty
	elif
		test_have_prereq PERL &&
		"$PERL_PATH" "$TEST_DIRECTORY"/t7006/test-terminal.perl \
			sh -c "test -t 1"
	then
		>test_terminal_works
	fi
'

if test -e stdout_is_tty
then
	test_terminal() { "$@"; }
	test_set_prereq TTY
elif test -e test_terminal_works
then
	test_terminal() {
		"$PERL_PATH" "$TEST_DIRECTORY"/t7006/test-terminal.perl "$@"
	}
	test_set_prereq TTY
else
	say no usable terminal, so skipping some tests
fi

test_expect_success 'setup' '
	unset GIT_PAGER GIT_PAGER_IN_USE;
	test_might_fail git config --unset core.pager &&

	PAGER="cat >paginated.out" &&
	export PAGER &&

	test_commit initial
'

test_expect_success TTY 'some commands use a pager' '
	rm -f paginated.out ||
	cleanup_fail &&

	test_terminal git log &&
	test -e paginated.out
'

test_expect_success TTY 'some commands do not use a pager' '
	rm -f paginated.out ||
	cleanup_fail &&

	test_terminal git rev-list HEAD &&
	! test -e paginated.out
'

test_expect_success 'no pager when stdout is a pipe' '
	rm -f paginated.out ||
	cleanup_fail &&

	git log | cat &&
	! test -e paginated.out
'

test_expect_success 'no pager when stdout is a regular file' '
	rm -f paginated.out ||
	cleanup_fail &&

	git log >file &&
	! test -e paginated.out
'

test_expect_success TTY 'git --paginate rev-list uses a pager' '
	rm -f paginated.out ||
	cleanup_fail &&

	test_terminal git --paginate rev-list HEAD &&
	test -e paginated.out
'

test_expect_success 'no pager even with --paginate when stdout is a pipe' '
	rm -f file paginated.out ||
	cleanup_fail &&

	git --paginate log | cat &&
	! test -e paginated.out
'

test_expect_success TTY 'no pager with --no-pager' '
	rm -f paginated.out ||
	cleanup_fail &&

	test_terminal git --no-pager log &&
	! test -e paginated.out
'

# A colored commit log will begin with an appropriate ANSI escape
# for the first color; the text "commit" comes later.
colorful() {
	read firstline <$1
	! expr "$firstline" : "[a-zA-Z]" >/dev/null
}

test_expect_success 'tests can detect color' '
	rm -f colorful.log colorless.log ||
	cleanup_fail &&

	git log --no-color >colorless.log &&
	git log --color >colorful.log &&
	! colorful colorless.log &&
	colorful colorful.log
'

test_expect_success 'no color when stdout is a regular file' '
	rm -f colorless.log &&
	git config color.ui auto ||
	cleanup_fail &&

	git log >colorless.log &&
	! colorful colorless.log
'

test_expect_success TTY 'color when writing to a pager' '
	rm -f paginated.out &&
	git config color.ui auto ||
	cleanup_fail &&

	(
		TERM=vt100 &&
		export TERM &&
		test_terminal git log
	) &&
	colorful paginated.out
'

test_expect_success 'color when writing to a file intended for a pager' '
	rm -f colorful.log &&
	git config color.ui auto ||
	cleanup_fail &&

	(
		TERM=vt100 &&
		GIT_PAGER_IN_USE=true &&
		export TERM GIT_PAGER_IN_USE &&
		git log >colorful.log
	) &&
	colorful colorful.log
'

if test_have_prereq SIMPLEPAGER && test_have_prereq TTY
then
	test_set_prereq SIMPLEPAGERTTY
fi

test_expect_success SIMPLEPAGERTTY 'default pager is used by default' '
	unset PAGER GIT_PAGER;
	test_might_fail git config --unset core.pager &&
	rm -f default_pager_used ||
	cleanup_fail &&

	cat >$less <<-\EOF &&
	#!/bin/sh
	wc >default_pager_used
	EOF
	chmod +x $less &&
	(
		PATH=.:$PATH &&
		export PATH &&
		test_terminal git log
	) &&
	test -e default_pager_used
'

test_expect_success TTY 'PAGER overrides default pager' '
	unset GIT_PAGER;
	test_might_fail git config --unset core.pager &&
	rm -f PAGER_used ||
	cleanup_fail &&

	PAGER="wc >PAGER_used" &&
	export PAGER &&
	test_terminal git log &&
	test -e PAGER_used
'

test_expect_success TTY 'core.pager overrides PAGER' '
	unset GIT_PAGER;
	rm -f core.pager_used ||
	cleanup_fail &&

	PAGER=wc &&
	export PAGER &&
	git config core.pager "wc >core.pager_used" &&
	test_terminal git log &&
	test -e core.pager_used
'

test_expect_success TTY 'GIT_PAGER overrides core.pager' '
	rm -f GIT_PAGER_used ||
	cleanup_fail &&

	git config core.pager wc &&
	GIT_PAGER="wc >GIT_PAGER_used" &&
	export GIT_PAGER &&
	test_terminal git log &&
	test -e GIT_PAGER_used
'

test_done
