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 <erdav...@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 &&
+       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 &&
+       (
+               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
-- 
1.8.3.1.440.g82707f8

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to