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

2013-06-16 Thread Eduardo R. D'Avila
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 

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

2013-06-16 Thread Junio C Hamano
Eduardo R. D'Avila erdav...@gmail.com 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 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 

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
 +'
 +