Merge branch 'bc/hash-independent-tests-part-4'
[git] / t / t9903-bash-prompt.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2012 SZEDER Gábor
4 #
5
6 test_description='test git-specific bash prompt functions'
7
8 . ./lib-bash.sh
9
10 . "$GIT_BUILD_DIR/contrib/completion/git-prompt.sh"
11
12 actual="$TRASH_DIRECTORY/actual"
13 c_red='\\[\\e[31m\\]'
14 c_green='\\[\\e[32m\\]'
15 c_lblue='\\[\\e[1;34m\\]'
16 c_clear='\\[\\e[0m\\]'
17
18 test_expect_success 'setup for prompt tests' '
19         git init otherrepo &&
20         echo 1 >file &&
21         git add file &&
22         test_tick &&
23         git commit -m initial &&
24         git tag -a -m msg1 t1 &&
25         git checkout -b b1 &&
26         echo 2 >file &&
27         git commit -m "second b1" file &&
28         echo 3 >file &&
29         git commit -m "third b1" file &&
30         git tag -a -m msg2 t2 &&
31         git checkout -b b2 master &&
32         echo 0 >file &&
33         git commit -m "second b2" file &&
34         echo 00 >file &&
35         git commit -m "another b2" file &&
36         echo 000 >file &&
37         git commit -m "yet another b2" file &&
38         mkdir ignored_dir &&
39         echo "ignored_dir/" >>.gitignore &&
40         git checkout master
41 '
42
43 test_expect_success 'prompt - branch name' '
44         printf " (master)" >expected &&
45         __git_ps1 >"$actual" &&
46         test_cmp expected "$actual"
47 '
48
49 test_expect_success SYMLINKS 'prompt - branch name - symlink symref' '
50         printf " (master)" >expected &&
51         test_when_finished "git checkout master" &&
52         test_config core.preferSymlinkRefs true &&
53         git checkout master &&
54         __git_ps1 >"$actual" &&
55         test_cmp expected "$actual"
56 '
57
58 test_expect_success 'prompt - unborn branch' '
59         printf " (unborn)" >expected &&
60         git checkout --orphan unborn &&
61         test_when_finished "git checkout master" &&
62         __git_ps1 >"$actual" &&
63         test_cmp expected "$actual"
64 '
65
66 if test_have_prereq !FUNNYNAMES; then
67         say 'Your filesystem does not allow newlines in filenames.'
68 fi
69
70 test_expect_success FUNNYNAMES 'prompt - with newline in path' '
71     repo_with_newline="repo
72 with
73 newline" &&
74         mkdir "$repo_with_newline" &&
75         printf " (master)" >expected &&
76         git init "$repo_with_newline" &&
77         test_when_finished "rm -rf \"$repo_with_newline\"" &&
78         mkdir "$repo_with_newline"/subdir &&
79         (
80                 cd "$repo_with_newline/subdir" &&
81                 __git_ps1 >"$actual"
82         ) &&
83         test_cmp expected "$actual"
84 '
85
86 test_expect_success 'prompt - detached head' '
87         printf " ((%s...))" $(git log -1 --format="%h" --abbrev=13 b1^) >expected &&
88         test_config core.abbrev 13 &&
89         git checkout b1^ &&
90         test_when_finished "git checkout master" &&
91         __git_ps1 >"$actual" &&
92         test_cmp expected "$actual"
93 '
94
95 test_expect_success 'prompt - describe detached head - contains' '
96         printf " ((t2~1))" >expected &&
97         git checkout b1^ &&
98         test_when_finished "git checkout master" &&
99         (
100                 GIT_PS1_DESCRIBE_STYLE=contains &&
101                 __git_ps1 >"$actual"
102         ) &&
103         test_cmp expected "$actual"
104 '
105
106 test_expect_success 'prompt - describe detached head - branch' '
107         printf " ((tags/t2~1))" >expected &&
108         git checkout b1^ &&
109         test_when_finished "git checkout master" &&
110         (
111                 GIT_PS1_DESCRIBE_STYLE=branch &&
112                 __git_ps1 >"$actual"
113         ) &&
114         test_cmp expected "$actual"
115 '
116
117 test_expect_success 'prompt - describe detached head - describe' '
118         printf " ((t1-1-g%s))" $(git log -1 --format="%h" b1^) >expected &&
119         git checkout b1^ &&
120         test_when_finished "git checkout master" &&
121         (
122                 GIT_PS1_DESCRIBE_STYLE=describe &&
123                 __git_ps1 >"$actual"
124         ) &&
125         test_cmp expected "$actual"
126 '
127
128 test_expect_success 'prompt - describe detached head - default' '
129         printf " ((t2))" >expected &&
130         git checkout --detach b1 &&
131         test_when_finished "git checkout master" &&
132         __git_ps1 >"$actual" &&
133         test_cmp expected "$actual"
134 '
135
136 test_expect_success 'prompt - inside .git directory' '
137         printf " (GIT_DIR!)" >expected &&
138         (
139                 cd .git &&
140                 __git_ps1 >"$actual"
141         ) &&
142         test_cmp expected "$actual"
143 '
144
145 test_expect_success 'prompt - deep inside .git directory' '
146         printf " (GIT_DIR!)" >expected &&
147         (
148                 cd .git/objects &&
149                 __git_ps1 >"$actual"
150         ) &&
151         test_cmp expected "$actual"
152 '
153
154 test_expect_success 'prompt - inside bare repository' '
155         printf " (BARE:master)" >expected &&
156         git init --bare bare.git &&
157         test_when_finished "rm -rf bare.git" &&
158         (
159                 cd bare.git &&
160                 __git_ps1 >"$actual"
161         ) &&
162         test_cmp expected "$actual"
163 '
164
165 test_expect_success 'prompt - interactive rebase' '
166         printf " (b1|REBASE-i 2/3)" >expected &&
167         write_script fake_editor.sh <<-\EOF &&
168                 echo "exec echo" >"$1"
169                 echo "edit $(git log -1 --format="%h")" >>"$1"
170                 echo "exec echo" >>"$1"
171         EOF
172         test_when_finished "rm -f fake_editor.sh" &&
173         test_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&
174         git checkout b1 &&
175         test_when_finished "git checkout master" &&
176         git rebase -i HEAD^ &&
177         test_when_finished "git rebase --abort" &&
178         __git_ps1 >"$actual" &&
179         test_cmp expected "$actual"
180 '
181
182 test_expect_success 'prompt - rebase merge' '
183         printf " (b2|REBASE-i 1/3)" >expected &&
184         git checkout b2 &&
185         test_when_finished "git checkout master" &&
186         test_must_fail git rebase --merge b1 b2 &&
187         test_when_finished "git rebase --abort" &&
188         __git_ps1 >"$actual" &&
189         test_cmp expected "$actual"
190 '
191
192 test_expect_success 'prompt - rebase' '
193         printf " (b2|REBASE 1/3)" >expected &&
194         git checkout b2 &&
195         test_when_finished "git checkout master" &&
196         test_must_fail git rebase b1 b2 &&
197         test_when_finished "git rebase --abort" &&
198         __git_ps1 >"$actual" &&
199         test_cmp expected "$actual"
200 '
201
202 test_expect_success 'prompt - merge' '
203         printf " (b1|MERGING)" >expected &&
204         git checkout b1 &&
205         test_when_finished "git checkout master" &&
206         test_must_fail git merge b2 &&
207         test_when_finished "git reset --hard" &&
208         __git_ps1 >"$actual" &&
209         test_cmp expected "$actual"
210 '
211
212 test_expect_success 'prompt - cherry-pick' '
213         printf " (master|CHERRY-PICKING)" >expected &&
214         test_must_fail git cherry-pick b1 b1^ &&
215         test_when_finished "git cherry-pick --abort" &&
216         __git_ps1 >"$actual" &&
217         test_cmp expected "$actual" &&
218         git reset --merge &&
219         test_must_fail git rev-parse CHERRY_PICK_HEAD &&
220         __git_ps1 >"$actual" &&
221         test_cmp expected "$actual"
222 '
223
224 test_expect_success 'prompt - revert' '
225         printf " (master|REVERTING)" >expected &&
226         test_must_fail git revert b1^ b1 &&
227         test_when_finished "git revert --abort" &&
228         __git_ps1 >"$actual" &&
229         test_cmp expected "$actual" &&
230         git reset --merge &&
231         test_must_fail git rev-parse REVERT_HEAD &&
232         __git_ps1 >"$actual" &&
233         test_cmp expected "$actual"
234 '
235
236 test_expect_success 'prompt - bisect' '
237         printf " (master|BISECTING)" >expected &&
238         git bisect start &&
239         test_when_finished "git bisect reset" &&
240         __git_ps1 >"$actual" &&
241         test_cmp expected "$actual"
242 '
243
244 test_expect_success 'prompt - dirty status indicator - clean' '
245         printf " (master)" >expected &&
246         (
247                 GIT_PS1_SHOWDIRTYSTATE=y &&
248                 __git_ps1 >"$actual"
249         ) &&
250         test_cmp expected "$actual"
251 '
252
253 test_expect_success 'prompt - dirty status indicator - dirty worktree' '
254         printf " (master *)" >expected &&
255         echo "dirty" >file &&
256         test_when_finished "git reset --hard" &&
257         (
258                 GIT_PS1_SHOWDIRTYSTATE=y &&
259                 __git_ps1 >"$actual"
260         ) &&
261         test_cmp expected "$actual"
262 '
263
264 test_expect_success 'prompt - dirty status indicator - dirty index' '
265         printf " (master +)" >expected &&
266         echo "dirty" >file &&
267         test_when_finished "git reset --hard" &&
268         git add -u &&
269         (
270                 GIT_PS1_SHOWDIRTYSTATE=y &&
271                 __git_ps1 >"$actual"
272         ) &&
273         test_cmp expected "$actual"
274 '
275
276 test_expect_success 'prompt - dirty status indicator - dirty index and worktree' '
277         printf " (master *+)" >expected &&
278         echo "dirty index" >file &&
279         test_when_finished "git reset --hard" &&
280         git add -u &&
281         echo "dirty worktree" >file &&
282         (
283                 GIT_PS1_SHOWDIRTYSTATE=y &&
284                 __git_ps1 >"$actual"
285         ) &&
286         test_cmp expected "$actual"
287 '
288
289 test_expect_success 'prompt - dirty status indicator - orphan branch - clean' '
290         printf " (orphan #)" >expected &&
291         test_when_finished "git checkout master" &&
292         git checkout --orphan orphan &&
293         git reset --hard &&
294         (
295                 GIT_PS1_SHOWDIRTYSTATE=y &&
296                 __git_ps1 >"$actual"
297         ) &&
298         test_cmp expected "$actual"
299 '
300
301 test_expect_success 'prompt - dirty status indicator - orphan branch - dirty index' '
302         printf " (orphan +)" >expected &&
303         test_when_finished "git checkout master" &&
304         git checkout --orphan orphan &&
305         (
306                 GIT_PS1_SHOWDIRTYSTATE=y &&
307                 __git_ps1 >"$actual"
308         ) &&
309         test_cmp expected "$actual"
310 '
311
312 test_expect_success 'prompt - dirty status indicator - orphan branch - dirty index and worktree' '
313         printf " (orphan *+)" >expected &&
314         test_when_finished "git checkout master" &&
315         git checkout --orphan orphan &&
316         >file &&
317         (
318                 GIT_PS1_SHOWDIRTYSTATE=y &&
319                 __git_ps1 >"$actual"
320         ) &&
321         test_cmp expected "$actual"
322 '
323
324 test_expect_success 'prompt - dirty status indicator - shell variable unset with config disabled' '
325         printf " (master)" >expected &&
326         echo "dirty" >file &&
327         test_when_finished "git reset --hard" &&
328         test_config bash.showDirtyState false &&
329         (
330                 sane_unset GIT_PS1_SHOWDIRTYSTATE &&
331                 __git_ps1 >"$actual"
332         ) &&
333         test_cmp expected "$actual"
334 '
335
336 test_expect_success 'prompt - dirty status indicator - shell variable unset with config enabled' '
337         printf " (master)" >expected &&
338         echo "dirty" >file &&
339         test_when_finished "git reset --hard" &&
340         test_config bash.showDirtyState true &&
341         (
342                 sane_unset GIT_PS1_SHOWDIRTYSTATE &&
343                 __git_ps1 >"$actual"
344         ) &&
345         test_cmp expected "$actual"
346 '
347
348 test_expect_success 'prompt - dirty status indicator - shell variable set with config disabled' '
349         printf " (master)" >expected &&
350         echo "dirty" >file &&
351         test_when_finished "git reset --hard" &&
352         test_config bash.showDirtyState false &&
353         (
354                 GIT_PS1_SHOWDIRTYSTATE=y &&
355                 __git_ps1 >"$actual"
356         ) &&
357         test_cmp expected "$actual"
358 '
359
360 test_expect_success 'prompt - dirty status indicator - shell variable set with config enabled' '
361         printf " (master *)" >expected &&
362         echo "dirty" >file &&
363         test_when_finished "git reset --hard" &&
364         test_config bash.showDirtyState true &&
365         (
366                 GIT_PS1_SHOWDIRTYSTATE=y &&
367                 __git_ps1 >"$actual"
368         ) &&
369         test_cmp expected "$actual"
370 '
371
372 test_expect_success 'prompt - dirty status indicator - not shown inside .git directory' '
373         printf " (GIT_DIR!)" >expected &&
374         echo "dirty" >file &&
375         test_when_finished "git reset --hard" &&
376         (
377                 GIT_PS1_SHOWDIRTYSTATE=y &&
378                 cd .git &&
379                 __git_ps1 >"$actual"
380         ) &&
381         test_cmp expected "$actual"
382 '
383
384 test_expect_success 'prompt - stash status indicator - no stash' '
385         printf " (master)" >expected &&
386         (
387                 GIT_PS1_SHOWSTASHSTATE=y &&
388                 __git_ps1 >"$actual"
389         ) &&
390         test_cmp expected "$actual"
391 '
392
393 test_expect_success 'prompt - stash status indicator - stash' '
394         printf " (master $)" >expected &&
395         echo 2 >file &&
396         git stash &&
397         test_when_finished "git stash drop" &&
398         git pack-refs --all &&
399         (
400                 GIT_PS1_SHOWSTASHSTATE=y &&
401                 __git_ps1 >"$actual"
402         ) &&
403         test_cmp expected "$actual"
404 '
405
406 test_expect_success 'prompt - stash status indicator - not shown inside .git directory' '
407         printf " (GIT_DIR!)" >expected &&
408         echo 2 >file &&
409         git stash &&
410         test_when_finished "git stash drop" &&
411         (
412                 GIT_PS1_SHOWSTASHSTATE=y &&
413                 cd .git &&
414                 __git_ps1 >"$actual"
415         ) &&
416         test_cmp expected "$actual"
417 '
418
419 test_expect_success 'prompt - untracked files status indicator - no untracked files' '
420         printf " (master)" >expected &&
421         (
422                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
423                 cd otherrepo &&
424                 __git_ps1 >"$actual"
425         ) &&
426         test_cmp expected "$actual"
427 '
428
429 test_expect_success 'prompt - untracked files status indicator - untracked files' '
430         printf " (master %%)" >expected &&
431         (
432                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
433                 __git_ps1 >"$actual"
434         ) &&
435         test_cmp expected "$actual"
436 '
437
438 test_expect_success 'prompt - untracked files status indicator - empty untracked dir' '
439         printf " (master)" >expected &&
440         mkdir otherrepo/untracked-dir &&
441         test_when_finished "rm -rf otherrepo/untracked-dir" &&
442         (
443                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
444                 cd otherrepo &&
445                 __git_ps1 >"$actual"
446         ) &&
447         test_cmp expected "$actual"
448 '
449
450 test_expect_success 'prompt - untracked files status indicator - non-empty untracked dir' '
451         printf " (master %%)" >expected &&
452         mkdir otherrepo/untracked-dir &&
453         test_when_finished "rm -rf otherrepo/untracked-dir" &&
454         >otherrepo/untracked-dir/untracked-file &&
455         (
456                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
457                 cd otherrepo &&
458                 __git_ps1 >"$actual"
459         ) &&
460         test_cmp expected "$actual"
461 '
462
463 test_expect_success 'prompt - untracked files status indicator - untracked files outside cwd' '
464         printf " (master %%)" >expected &&
465         (
466                 mkdir -p ignored_dir &&
467                 cd ignored_dir &&
468                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
469                 __git_ps1 >"$actual"
470         ) &&
471         test_cmp expected "$actual"
472 '
473
474 test_expect_success 'prompt - untracked files status indicator - shell variable unset with config disabled' '
475         printf " (master)" >expected &&
476         test_config bash.showUntrackedFiles false &&
477         (
478                 sane_unset GIT_PS1_SHOWUNTRACKEDFILES &&
479                 __git_ps1 >"$actual"
480         ) &&
481         test_cmp expected "$actual"
482 '
483
484 test_expect_success 'prompt - untracked files status indicator - shell variable unset with config enabled' '
485         printf " (master)" >expected &&
486         test_config bash.showUntrackedFiles true &&
487         (
488                 sane_unset GIT_PS1_SHOWUNTRACKEDFILES &&
489                 __git_ps1 >"$actual"
490         ) &&
491         test_cmp expected "$actual"
492 '
493
494 test_expect_success 'prompt - untracked files status indicator - shell variable set with config disabled' '
495         printf " (master)" >expected &&
496         test_config bash.showUntrackedFiles false &&
497         (
498                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
499                 __git_ps1 >"$actual"
500         ) &&
501         test_cmp expected "$actual"
502 '
503
504 test_expect_success 'prompt - untracked files status indicator - shell variable set with config enabled' '
505         printf " (master %%)" >expected &&
506         test_config bash.showUntrackedFiles true &&
507         (
508                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
509                 __git_ps1 >"$actual"
510         ) &&
511         test_cmp expected "$actual"
512 '
513
514 test_expect_success 'prompt - untracked files status indicator - not shown inside .git directory' '
515         printf " (GIT_DIR!)" >expected &&
516         (
517                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
518                 cd .git &&
519                 __git_ps1 >"$actual"
520         ) &&
521         test_cmp expected "$actual"
522 '
523
524 test_expect_success 'prompt - format string starting with dash' '
525         printf -- "-master" >expected &&
526         __git_ps1 "-%s" >"$actual" &&
527         test_cmp expected "$actual"
528 '
529
530 test_expect_success 'prompt - pc mode' '
531         printf "BEFORE: (\${__git_ps1_branch_name}):AFTER\\nmaster" >expected &&
532         (
533                 __git_ps1 "BEFORE:" ":AFTER" >"$actual" &&
534                 test_must_be_empty "$actual" &&
535                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
536         ) &&
537         test_cmp expected "$actual"
538 '
539
540 test_expect_success 'prompt - bash color pc mode - branch name' '
541         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear}):AFTER\\nmaster" >expected &&
542         (
543                 GIT_PS1_SHOWCOLORHINTS=y &&
544                 __git_ps1 "BEFORE:" ":AFTER" >"$actual" &&
545                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
546         ) &&
547         test_cmp expected "$actual"
548 '
549
550 test_expect_success 'prompt - bash color pc mode - detached head' '
551         printf "BEFORE: (${c_red}\${__git_ps1_branch_name}${c_clear}):AFTER\\n(%s...)" $(git log -1 --format="%h" b1^) >expected &&
552         git checkout b1^ &&
553         test_when_finished "git checkout master" &&
554         (
555                 GIT_PS1_SHOWCOLORHINTS=y &&
556                 __git_ps1 "BEFORE:" ":AFTER" &&
557                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
558         ) &&
559         test_cmp expected "$actual"
560 '
561
562 test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty worktree' '
563         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_clear}):AFTER\\nmaster" >expected &&
564         echo "dirty" >file &&
565         test_when_finished "git reset --hard" &&
566         (
567                 GIT_PS1_SHOWDIRTYSTATE=y &&
568                 GIT_PS1_SHOWCOLORHINTS=y &&
569                 __git_ps1 "BEFORE:" ":AFTER" &&
570                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
571         ) &&
572         test_cmp expected "$actual"
573 '
574
575 test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty index' '
576         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_green}+${c_clear}):AFTER\\nmaster" >expected &&
577         echo "dirty" >file &&
578         test_when_finished "git reset --hard" &&
579         git add -u &&
580         (
581                 GIT_PS1_SHOWDIRTYSTATE=y &&
582                 GIT_PS1_SHOWCOLORHINTS=y &&
583                 __git_ps1 "BEFORE:" ":AFTER" &&
584                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
585         ) &&
586         test_cmp expected "$actual"
587 '
588
589 test_expect_success 'prompt - bash color pc mode - dirty status indicator - dirty index and worktree' '
590         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_green}+${c_clear}):AFTER\\nmaster" >expected &&
591         echo "dirty index" >file &&
592         test_when_finished "git reset --hard" &&
593         git add -u &&
594         echo "dirty worktree" >file &&
595         (
596                 GIT_PS1_SHOWCOLORHINTS=y &&
597                 GIT_PS1_SHOWDIRTYSTATE=y &&
598                 __git_ps1 "BEFORE:" ":AFTER" &&
599                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
600         ) &&
601         test_cmp expected "$actual"
602 '
603
604 test_expect_success 'prompt - bash color pc mode - dirty status indicator - before root commit' '
605         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_green}#${c_clear}):AFTER\\nmaster" >expected &&
606         (
607                 GIT_PS1_SHOWDIRTYSTATE=y &&
608                 GIT_PS1_SHOWCOLORHINTS=y &&
609                 cd otherrepo &&
610                 __git_ps1 "BEFORE:" ":AFTER" &&
611                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
612         ) &&
613         test_cmp expected "$actual"
614 '
615
616 test_expect_success 'prompt - bash color pc mode - inside .git directory' '
617         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear}):AFTER\\nGIT_DIR!" >expected &&
618         echo "dirty" >file &&
619         test_when_finished "git reset --hard" &&
620         (
621                 GIT_PS1_SHOWDIRTYSTATE=y &&
622                 GIT_PS1_SHOWCOLORHINTS=y &&
623                 cd .git &&
624                 __git_ps1 "BEFORE:" ":AFTER" &&
625                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
626         ) &&
627         test_cmp expected "$actual"
628 '
629
630 test_expect_success 'prompt - bash color pc mode - stash status indicator' '
631         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_lblue}\$${c_clear}):AFTER\\nmaster" >expected &&
632         echo 2 >file &&
633         git stash &&
634         test_when_finished "git stash drop" &&
635         (
636                 GIT_PS1_SHOWSTASHSTATE=y &&
637                 GIT_PS1_SHOWCOLORHINTS=y &&
638                 __git_ps1 "BEFORE:" ":AFTER" &&
639                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
640         ) &&
641         test_cmp expected "$actual"
642 '
643
644 test_expect_success 'prompt - bash color pc mode - untracked files status indicator' '
645         printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}%%${c_clear}):AFTER\\nmaster" >expected &&
646         (
647                 GIT_PS1_SHOWUNTRACKEDFILES=y &&
648                 GIT_PS1_SHOWCOLORHINTS=y &&
649                 __git_ps1 "BEFORE:" ":AFTER" &&
650                 printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
651         ) &&
652         test_cmp expected "$actual"
653 '
654
655 test_expect_success 'prompt - zsh color pc mode' '
656         printf "BEFORE: (%%F{green}master%%f):AFTER" >expected &&
657         (
658                 ZSH_VERSION=5.0.0 &&
659                 GIT_PS1_SHOWCOLORHINTS=y &&
660                 __git_ps1 "BEFORE:" ":AFTER" &&
661                 printf "%s" "$PS1" >"$actual"
662         ) &&
663         test_cmp expected "$actual"
664 '
665
666 test_expect_success 'prompt - hide if pwd ignored - env var unset, config disabled' '
667         printf " (master)" >expected &&
668         test_config bash.hideIfPwdIgnored false &&
669         (
670                 cd ignored_dir &&
671                 __git_ps1 >"$actual"
672         ) &&
673         test_cmp expected "$actual"
674 '
675
676 test_expect_success 'prompt - hide if pwd ignored - env var unset, config disabled, pc mode' '
677         printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
678         test_config bash.hideIfPwdIgnored false &&
679         (
680                 cd ignored_dir &&
681                 __git_ps1 "BEFORE:" ":AFTER" &&
682                 printf "%s" "$PS1" >"$actual"
683         ) &&
684         test_cmp expected "$actual"
685 '
686
687 test_expect_success 'prompt - hide if pwd ignored - env var unset, config unset' '
688         printf " (master)" >expected &&
689         (
690                 cd ignored_dir &&
691                 __git_ps1 >"$actual"
692         ) &&
693         test_cmp expected "$actual"
694 '
695
696 test_expect_success 'prompt - hide if pwd ignored - env var unset, config unset, pc mode' '
697         printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
698         (
699                 cd ignored_dir &&
700                 __git_ps1 "BEFORE:" ":AFTER" &&
701                 printf "%s" "$PS1" >"$actual"
702         ) &&
703         test_cmp expected "$actual"
704 '
705
706 test_expect_success 'prompt - hide if pwd ignored - env var set, config disabled' '
707         printf " (master)" >expected &&
708         test_config bash.hideIfPwdIgnored false &&
709         (
710                 cd ignored_dir &&
711                 GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
712                 __git_ps1 >"$actual"
713         ) &&
714         test_cmp expected "$actual"
715 '
716
717 test_expect_success 'prompt - hide if pwd ignored - env var set, config disabled, pc mode' '
718         printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
719         test_config bash.hideIfPwdIgnored false &&
720         (
721                 cd ignored_dir &&
722                 GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
723                 __git_ps1 "BEFORE:" ":AFTER" &&
724                 printf "%s" "$PS1" >"$actual"
725         ) &&
726         test_cmp expected "$actual"
727 '
728
729 test_expect_success 'prompt - hide if pwd ignored - env var set, config unset' '
730         (
731                 cd ignored_dir &&
732                 GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
733                 __git_ps1 >"$actual"
734         ) &&
735         test_must_be_empty "$actual"
736 '
737
738 test_expect_success 'prompt - hide if pwd ignored - env var set, config unset, pc mode' '
739         printf "BEFORE::AFTER" >expected &&
740         (
741                 cd ignored_dir &&
742                 GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
743                 __git_ps1 "BEFORE:" ":AFTER" &&
744                 printf "%s" "$PS1" >"$actual"
745         ) &&
746         test_cmp expected "$actual"
747 '
748
749 test_expect_success 'prompt - hide if pwd ignored - inside gitdir' '
750         printf " (GIT_DIR!)" >expected &&
751         (
752                 GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
753                 cd .git &&
754                 __git_ps1 >"$actual"
755         ) &&
756         test_cmp expected "$actual"
757 '
758
759 test_done