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