git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH/RFC 1/3] t9903: add tests for git-prompt pcmode

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 17, 2013, 04:24 UTC
Message-ID
<7vhagxicu9.fsf@alter.siamese.dyndns.org>
In-Reply-To
<c4c2a37da989c8c39e8cd6be2370ce34dd0675a6.1371402672.git.erdavila@gmail.com>
"Eduardo R. D'Avila" <erdavila@gmail.com> writes:
Show 26 quoted lines
> git-prompt.sh lacks tests for PROMPT_COMMAND mode.
>
> Add tests for:
> * pcmode prompt without colors
> * pcmode prompt with colors for bash
> * pcmode prompt with colors for zsh
>
> Having these tests enables an upcoming refactor in
> a safe way.
>
> Signed-off-by: Eduardo R. D'Avila <erdavila@gmail.com>
> ---
> 250	0	t/t9903-bash-prompt.sh
>  t/t9903-bash-prompt.sh | 250 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 250 insertions(+)
>
> diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
> index 15521cc..ebca9de 100755
> --- a/t/t9903-bash-prompt.sh
> +++ b/t/t9903-bash-prompt.sh
> @@ -535,4 +535,254 @@ test_expect_success 'prompt - format string starting with dash' '
>  	test_cmp expected "$actual"
>  '
>  
> +test_expect_success 'prompt - pc mode' '
> +	printf "BEFORE: (master):AFTER" > expected &&

Style; redirected filename immediately follows the redirection operator, i.e.

	command >expected
Show 11 quoted lines
> +	printf "" > expected_output &&
> +	(
> +		__git_ps1 "BEFORE:" ":AFTER" > "$actual" &&
> +		test_cmp expected_output "$actual" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - branch name' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]master\\\[\\\e[0m\\\]\\\[\\\e[0m\\\]):AFTER" > expected &&

With these escape codes that are hardcoded everywhere, the tests look pretty much unreadable. Could they be improved to something like this (two ${reset} and some other characters may want to be there):

	printf "BEFORE: (${C_green}master${C_reset}):AFTER"
by adding variable definitions early in this test file?

[the rest of the original left unsnipped for reference; my comments end here]

Show 238 quoted lines
> +	(
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" > "$actual"
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - detached head' '
> +	printf "BEFORE: (\\\[\\\e[31m\\\](%s...)\\\[\\\e[0m\\\]\\\[\\\e[0m\\\]):AFTER" $(git log -1 --format="%h" b1^) > expected &&
> +	git checkout b1^ &&
> +	test_when_finished "git checkout master" &&
> +	(
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty worktree' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]master\\\[\\\e[0m\\\] \\\[\\\e[31m\\\]*\\\[\\\e[0m\\\]):AFTER" > expected &&
> +	echo "dirty" > file &&
> +	test_when_finished "git reset --hard" &&
> +	(
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty index' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]master\\\[\\\e[0m\\\] \\\[\\\e[32m\\\]+\\\[\\\e[0m\\\]):AFTER" > expected &&
> +	echo "dirty" > file &&
> +	test_when_finished "git reset --hard" &&
> +	git add -u &&
> +	(
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty index and worktree' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]master\\\[\\\e[0m\\\] \\\[\\\e[31m\\\]*\\\[\\\e[32m\\\]+\\\[\\\e[0m\\\]):AFTER" > expected &&
> +	echo "dirty index" > file &&
> +	test_when_finished "git reset --hard" &&
> +	git add -u &&
> +	echo "dirty worktree" > file &&
> +	(
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - dirty status indicator - before root commit' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]master\\\[\\\e[0m\\\] \\\[\\\e[32m\\\]#\\\[\\\e[0m\\\]):AFTER" > expected &&
> +	(
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		cd otherrepo &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - inside .git directory' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]GIT_DIR!\\\[\\\e[0m\\\]\\\[\\\e[0m\\\]):AFTER" > expected &&
> +	echo "dirty" > file &&
> +	test_when_finished "git reset --hard" &&
> +	(
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		cd .git &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - stash status indicator' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]master\\\[\\\e[0m\\\] \\\[\\\e[1;34m\\\]$\\\[\\\e[0m\\\]):AFTER" > expected &&
> +	echo 2 >file &&
> +	git stash &&
> +	test_when_finished "git stash drop" &&
> +	(
> +		GIT_PS1_SHOWSTASHSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - bash color pc mode - untracked files status indicator' '
> +	printf "BEFORE: (\\\[\\\e[32m\\\]master\\\[\\\e[0m\\\] \\\[\\\e[31m\\\]%%\\\[\\\e[0m\\\]):AFTER" > expected &&
> +	(
> +		GIT_PS1_SHOWUNTRACKEDFILES=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - branch name' '
> +	printf "BEFORE: (%%F{green}master%%f%%f):AFTER" > expected &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" > "$actual"
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - detached head' '
> +	printf "BEFORE: (%%F{red}(%s...)%%f%%f):AFTER" $(git log -1 --format="%h" b1^) > expected &&
> +	git checkout b1^ &&
> +	test_when_finished "git checkout master" &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty worktree' '
> +	printf "BEFORE: (%%F{green}master%%f %%F{red}*%%f):AFTER" > expected &&
> +	echo "dirty" > file &&
> +	test_when_finished "git reset --hard" &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty index' '
> +	printf "BEFORE: (%%F{green}master%%f %%F{green}+%%f):AFTER" > expected &&
> +	echo "dirty" > file &&
> +	test_when_finished "git reset --hard" &&
> +	git add -u &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - dirty index and worktree' '
> +	printf "BEFORE: (%%F{green}master%%f %%F{red}*%%F{green}+%%f):AFTER" > expected &&
> +	echo "dirty index" > file &&
> +	test_when_finished "git reset --hard" &&
> +	git add -u &&
> +	echo "dirty worktree" > file &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - dirty status indicator - before root commit' '
> +	printf "BEFORE: (%%F{green}master%%f %%F{green}#%%f):AFTER" > expected &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		cd otherrepo &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - inside .git directory' '
> +	printf "BEFORE: (%%F{green}GIT_DIR!%%f%%f):AFTER" > expected &&
> +	echo "dirty" > file &&
> +	test_when_finished "git reset --hard" &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWDIRTYSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		cd .git &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - stash status indicator' '
> +	printf "BEFORE: (%%F{green}master%%f %%F{blue}$%%f):AFTER" > expected &&
> +	echo 2 >file &&
> +	git stash &&
> +	test_when_finished "git stash drop" &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWSTASHSTATE=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
> +test_expect_success 'prompt - zsh color pc mode - untracked files status indicator' '
> +	printf "BEFORE: (%%F{green}master%%f %%F{red}%%%%%%f):AFTER" > expected &&
> +	(
> +		ZSH_VERSION=5.0.0 &&
> +		GIT_PS1_SHOWUNTRACKEDFILES=y &&
> +		GIT_PS1_SHOWCOLORHINTS=y &&
> +		__git_ps1 "BEFORE:" ":AFTER" &&
> +		printf "%s" "$PS1" > "$actual"
> +	) &&
> +	test_cmp expected "$actual"
> +'
> +
>  test_done
Previous: Eduardo R. D'AvilaNext: Eduardo R. D'Avila
Message 3 of 9 in “enable color prompt in non-pcmode”
  1. 0/3 enable color prompt in non-pcmodeEduardo R. D'Avila, Jun 16, 2013
  2. 1/3 t9903: add tests for git-prompt pcmodeEduardo R. D'Avila, Jun 16, 2013
  3. Junio C HamanoJun 17, 2013
  4. 1/3 t9903: add tests for git-prompt pcmodeEduardo R. D'Avila, Jun 18, 2013
  5. 2/3 git-prompt.sh: refactor colored prompt codeEduardo R. D'Avila, Jun 18, 2013
  6. 3/3 git-prompt.sh: enable color prompt in non-pcmodeEduardo R. D'Avila, Jun 18, 2013
  7. 3/3 git-prompt.sh: enable color prompt in non-pcmodeEduardo R. D'Avila, Jun 18, 2013
  8. 2/3 git-prompt.sh: refactor colored prompt codeEduardo R. D'Avila, Jun 16, 2013
  9. 3/3 git-prompt.sh: enable color prompt in non-pcmodeEduardo R. D'Avila, Jun 16, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.