From: Junio C Hamano Date: Mon, 17 Jun 2013 04:24:30 GMT Subject: Re: [PATCH/RFC 1/3] t9903: add tests for git-prompt pcmode Message-ID: <7vhagxicu9.fsf@alter.siamese.dyndns.org> In-Reply-To: "Eduardo R. D'Avila" writes: > 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 > --- > 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 > + 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] > + ( > + 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