All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] tests: add tests for the bash prompt functions in the completion script
@ 2012-04-15 20:31 SZEDER Gábor
  2012-04-15 20:56 ` Felipe Contreras
  0 siblings, 1 reply; 14+ messages in thread
From: SZEDER Gábor @ 2012-04-15 20:31 UTC (permalink / raw)
  To: git
  Cc: Felipe Contreras, Jonathan Nieder, Junio C Hamano, Thomas Rast,
	Jeff King, SZEDER Gábor

The tests cover the discovery of the .git directory in the __gitdir()
function in different scenarios, and the prompt itself, i.e. branch
name, detached heads, operations (rebase, merge, cherry-pick, bisect),
and status indicators (dirty, stash, untracked files; but not the
upstream status).

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---

Goes on top of fc/completion-tests (b8574ba7).

 t/t9902-completion.sh |  436 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 436 insertions(+)

diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 3bbec79b..6edbaa72 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -114,4 +114,440 @@ test_expect_success 'double dash "git checkout"' '
 	test_completion "git checkout --"
 '
 
+actual="$TRASH_DIRECTORY/actual"
+
+test_expect_success 'setup for prompt tests' '
+	mkdir -p subdir/subsubdir &&
+	git init otherrepo &&
+	echo 1 > file &&
+	git add file &&
+	test_tick &&
+	git commit -m initial &&
+	git tag -a -m msg1 t1 &&
+	git checkout -b b1 &&
+	echo 2 > file &&
+	git commit -m "second b1" file &&
+	echo 3 > file &&
+	git commit -m "third b1" file &&
+	git tag -a -m msg2 t2 &&
+	git checkout -b b2 master &&
+	echo 0 > file &&
+	git commit -m "second b2" file &&
+	git checkout master
+'
+
+test_expect_success 'gitdir - from command line (through $__git_dir)' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	(
+		__git_dir="$TRASH_DIRECTORY/otherrepo/.git" &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - repo as argument' '
+	echo "otherrepo/.git" > expected &&
+	__gitdir "otherrepo" > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - remote as argument' '
+	echo "remote" > expected &&
+	__gitdir "remote" > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - .git directory in cwd' '
+	echo ".git" > expected &&
+	__gitdir > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - .git directory in parent' '
+	echo "$TRASH_DIRECTORY/.git" > expected &&
+	(
+		cd subdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - cwd is a .git directory' '
+	echo "." > expected &&
+	(
+		cd .git &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - parent is a .git directory' '
+	echo "$TRASH_DIRECTORY/.git" > expected &&
+	(
+		cd .git/refs &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_failure 'gitdir - $GIT_DIR set while .git directory in cwd' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	(
+		GIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&
+		export GIT_DIR &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - $GIT_DIR set while .git directory in parent' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	(
+		GIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&
+		export GIT_DIR &&
+		cd subdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - gitfile in cwd' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	echo "gitdir: $TRASH_DIRECTORY/otherrepo/.git" > subdir/.git &&
+	test_when_finished "rm -f subdir/.git" &&
+	(
+		cd subdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - gitfile in parent' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	echo "gitdir: $TRASH_DIRECTORY/otherrepo/.git" > subdir/.git &&
+	test_when_finished "rm -f subdir/.git" &&
+	(
+		cd subdir/subsubdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success SYMLINKS 'gitdir - resulting path avoids symlinks' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&
+	mkdir otherrepo/dir &&
+	test_when_finished "rm -rf otherrepo/dir" &&
+	ln -s otherrepo/dir link &&
+	test_when_finished "rm -f link" &&
+	(
+		cd link &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected actual
+'
+
+test_expect_success 'gitdir - not a git repository' '
+	(
+		cd subdir/subsubdir &&
+		GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY" &&
+		export GIT_CEILING_DIRECTORIES &&
+		test_must_fail __gitdir
+	)
+'
+
+test_expect_success 'prompt - branch name' '
+	printf " (master)" > expected &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - detached head' '
+	printf " ((%s...))" $(git log -1 --format="%h" b1^) > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - contains' '
+	printf " ((t2~1))" > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	(
+		GIT_PS1_DESCRIBE_STYLE=contains &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - branch' '
+	printf " ((b1~1))" > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	(
+		GIT_PS1_DESCRIBE_STYLE=branch &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - describe' '
+	printf " ((t1-1-g%s))" $(git log -1 --format="%h" b1^) > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	(
+		GIT_PS1_DESCRIBE_STYLE=describe &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - default' '
+	printf " ((t2))" > expected &&
+	git checkout --detach b1 &&
+	test_when_finished "git checkout master" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	(
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - deep inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	(
+		cd .git/refs &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - inside bare repository' '
+	printf " (BARE:master)" > expected &&
+	git init --bare bare.git &&
+	test_when_finished "rm -rf bare.git" &&
+	(
+		cd bare.git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - interactive rebase' '
+	printf " (b1|REBASE-i)" > expected
+	echo "#!$SHELL_PATH" >fake_editor.sh &&
+	cat >>fake_editor.sh <<\EOF &&
+echo "edit $(git log -1 --format="%h")" > "$1"
+EOF
+	test_when_finished "rm -f fake_editor.sh" &&
+	chmod a+x fake_editor.sh &&
+	test_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&
+	git checkout b1 &&
+	test_when_finished "git checkout master" &&
+	git rebase -i HEAD^ &&
+	test_when_finished "git rebase --abort"
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - rebase merge' '
+	printf " (b2|REBASE-m)" > expected &&
+	git checkout b2 &&
+	test_when_finished "git checkout master" &&
+	test_must_fail git rebase --merge b1 b2 &&
+	test_when_finished "git rebase --abort" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - rebase' '
+	printf " ((t2)|REBASE)" > expected &&
+	git checkout b2 &&
+	test_when_finished "git checkout master" &&
+	test_must_fail git rebase b1 b2 &&
+	test_when_finished "git rebase --abort" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - merge' '
+	printf " (b1|MERGING)" > expected &&
+	git checkout b1 &&
+	test_when_finished "git checkout master" &&
+	test_must_fail git merge b2 &&
+	test_when_finished "git reset --hard" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - cherry-pick' '
+	printf " (master|CHERRY-PICKING)" > expected &&
+	test_must_fail git cherry-pick b1 &&
+	test_when_finished "git reset --hard" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - bisect' '
+	printf " (master|BISECTING)" > expected &&
+	git bisect start &&
+	test_when_finished "git bisect reset" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - clean' '
+	printf " (master)" > expected &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - dirty worktree' '
+	printf " (master *)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - dirty index' '
+	printf " (master +)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	git add -u &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - dirty index and worktree' '
+	printf " (master *+)" > expected &&
+	echo "dirty index" > file &&
+	test_when_finished "git reset --hard" &&
+	git add -u &&
+	echo "dirty worktree" > file &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - before root commit' '
+	printf " (master #)" > expected &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		cd otherrepo &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - disabled by config' '
+	printf " (master)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	test_config bash.showDirtyState false &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - not shown inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - stash status indicator - no stash' '
+	printf " (master)" > expected &&
+	(
+		GIT_PS1_SHOWSTASHSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - stash status indicator - stash' '
+	printf " (master $)" > expected &&
+	echo 2 >file &&
+	git stash &&
+	test_when_finished "git stash drop" &&
+	(
+		GIT_PS1_SHOWSTASHSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - stash status indicator - not shown inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	echo 2 >file &&
+	git stash &&
+	test_when_finished "git stash drop" &&
+	(
+		GIT_PS1_SHOWSTASHSTATE=y &&
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - untracked files status indicator - no untracked files' '
+	printf " (master)" > expected &&
+	(
+		GIT_PS1_SHOWUNTRACKEDFILES=y &&
+		cd otherrepo &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - untracked files status indicator - untracked files' '
+	printf " (master %%)" > expected &&
+	(
+		GIT_PS1_SHOWUNTRACKEDFILES=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - untracked files status indicator - not shown inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	(
+		GIT_PS1_SHOWUNTRACKEDFILES=y &&
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - format string starting with dash' '
+	printf -- "-master" > expected &&
+	__git_ps1 "-%s" > "$actual" &&
+	test_cmp expected "$actual"
+'
+
 test_done
-- 
1.7.10.177.g26c39

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH] tests: add tests for the bash prompt functions in the completion script
  2012-04-15 20:31 [PATCH] tests: add tests for the bash prompt functions in the completion script SZEDER Gábor
@ 2012-04-15 20:56 ` Felipe Contreras
  2012-04-16  9:49   ` SZEDER Gábor
  0 siblings, 1 reply; 14+ messages in thread
From: Felipe Contreras @ 2012-04-15 20:56 UTC (permalink / raw)
  To: SZEDER Gábor
  Cc: git, Jonathan Nieder, Junio C Hamano, Thomas Rast, Jeff King

On Sun, Apr 15, 2012 at 11:31 PM, SZEDER Gábor <szeder@ira.uka.de> wrote:
> The tests cover the discovery of the .git directory in the __gitdir()
> function in different scenarios, and the prompt itself, i.e. branch
> name, detached heads, operations (rebase, merge, cherry-pick, bisect),
> and status indicators (dirty, stash, untracked files; but not the
> upstream status).
>
> Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
> ---
>
> Goes on top of fc/completion-tests (b8574ba7).
>
>  t/t9902-completion.sh |  436 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 436 insertions(+)

Perhaps it would make sense to create another file for these,
specially since there's the plan of splitting the prompt stuff to a
separate file.

Cheers.

-- 
Felipe Contreras

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] tests: add tests for the bash prompt functions in the completion script
  2012-04-15 20:56 ` Felipe Contreras
@ 2012-04-16  9:49   ` SZEDER Gábor
  2012-04-16 10:04     ` Felipe Contreras
  2012-04-16 16:01     ` Jonathan Nieder
  0 siblings, 2 replies; 14+ messages in thread
From: SZEDER Gábor @ 2012-04-16  9:49 UTC (permalink / raw)
  To: Felipe Contreras
  Cc: git, Jonathan Nieder, Junio C Hamano, Thomas Rast, Jeff King

Hi,

On Sun, Apr 15, 2012 at 11:56:36PM +0300, Felipe Contreras wrote:
> On Sun, Apr 15, 2012 at 11:31 PM, SZEDER Gábor <szeder@ira.uka.de> wrote:
> > The tests cover the discovery of the .git directory in the __gitdir()
> > function in different scenarios, and the prompt itself, i.e. branch
> > name, detached heads, operations (rebase, merge, cherry-pick, bisect),
> > and status indicators (dirty, stash, untracked files; but not the
> > upstream status).
> >
> > Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
> > ---
> >
> > Goes on top of fc/completion-tests (b8574ba7).
> >
> >  t/t9902-completion.sh |  436 +++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 436 insertions(+)
> 
> Perhaps it would make sense to create another file for these,

I thought about that briefly but decided against it to avoid
duplicating the bash-specific checks at the beginning, but I don't
care that much either way.

> specially since there's the plan of splitting the prompt stuff to a
> separate file.

Oh, I was not aware of such a plan.  What would be the benefits of
such a move, why is it necessary?  Where would you split it up?  In
particular, what would happen with __gitdir(), which is used in many
completion functions and in __git_ps1() as well?


Best,
Gábor

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] tests: add tests for the bash prompt functions in the completion script
  2012-04-16  9:49   ` SZEDER Gábor
@ 2012-04-16 10:04     ` Felipe Contreras
  2012-04-16 10:20       ` SZEDER Gábor
  2012-04-16 16:01     ` Jonathan Nieder
  1 sibling, 1 reply; 14+ messages in thread
From: Felipe Contreras @ 2012-04-16 10:04 UTC (permalink / raw)
  To: SZEDER Gábor
  Cc: git, Jonathan Nieder, Junio C Hamano, Thomas Rast, Jeff King

2012/4/16 SZEDER Gábor <szeder@ira.uka.de>:
> Hi,
>
> On Sun, Apr 15, 2012 at 11:56:36PM +0300, Felipe Contreras wrote:
>> On Sun, Apr 15, 2012 at 11:31 PM, SZEDER Gábor <szeder@ira.uka.de> wrote:
>> > The tests cover the discovery of the .git directory in the __gitdir()
>> > function in different scenarios, and the prompt itself, i.e. branch
>> > name, detached heads, operations (rebase, merge, cherry-pick, bisect),
>> > and status indicators (dirty, stash, untracked files; but not the
>> > upstream status).
>> >
>> > Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
>> > ---
>> >
>> > Goes on top of fc/completion-tests (b8574ba7).
>> >
>> >  t/t9902-completion.sh |  436 +++++++++++++++++++++++++++++++++++++++++++++++++
>> >  1 file changed, 436 insertions(+)
>>
>> Perhaps it would make sense to create another file for these,
>
> I thought about that briefly but decided against it to avoid
> duplicating the bash-specific checks at the beginning, but I don't
> care that much either way.
>
>> specially since there's the plan of splitting the prompt stuff to a
>> separate file.
>
> Oh, I was not aware of such a plan.  What would be the benefits of
> such a move, why is it necessary?  Where would you split it up?  In
> particular, what would happen with __gitdir(), which is used in many
> completion functions and in __git_ps1() as well?

I guess __gitdir() would be duplicated, I don't think that has been discussed.

http://thread.gmane.org/gmane.comp.version-control.git/194188

Basically splitting helps for systems that use bash-completion, and
also helps for zsh users who don't want the bash completion, but still
want __git_ps1(). I split the file myself for this reason.

Cheers.

-- 
Felipe Contreras

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] tests: add tests for the bash prompt functions in the completion script
  2012-04-16 10:04     ` Felipe Contreras
@ 2012-04-16 10:20       ` SZEDER Gábor
  0 siblings, 0 replies; 14+ messages in thread
From: SZEDER Gábor @ 2012-04-16 10:20 UTC (permalink / raw)
  To: Felipe Contreras
  Cc: git, Jonathan Nieder, Junio C Hamano, Thomas Rast, Jeff King

On Mon, Apr 16, 2012 at 01:04:41PM +0300, Felipe Contreras wrote:
> >> specially since there's the plan of splitting the prompt stuff to a
> >> separate file.
> >
> > Oh, I was not aware of such a plan.  What would be the benefits of
> > such a move, why is it necessary?  Where would you split it up?  In
> > particular, what would happen with __gitdir(), which is used in many
> > completion functions and in __git_ps1() as well?
> 
> I guess __gitdir() would be duplicated, I don't think that has been discussed.
> 
> http://thread.gmane.org/gmane.comp.version-control.git/194188
> 
> Basically splitting helps for systems that use bash-completion, and
> also helps for zsh users who don't want the bash completion, but still
> want __git_ps1(). I split the file myself for this reason.

Thanks for the pointer, those are valid reasons.  I'll wait a day or
two for feedback, then resubmit as a different test script.


Gábor

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] tests: add tests for the bash prompt functions in the completion script
  2012-04-16  9:49   ` SZEDER Gábor
  2012-04-16 10:04     ` Felipe Contreras
@ 2012-04-16 16:01     ` Jonathan Nieder
  2012-04-16 22:09       ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library SZEDER Gábor
  1 sibling, 1 reply; 14+ messages in thread
From: Jonathan Nieder @ 2012-04-16 16:01 UTC (permalink / raw)
  To: SZEDER Gábor
  Cc: Felipe Contreras, git, Junio C Hamano, Thomas Rast, Jeff King

SZEDER Gábor wrote:

> I thought about that briefly but decided against it to avoid
> duplicating the bash-specific checks at the beginning, but I don't
> care that much either way.

Maybe a t/lib-completion.sh would take care of that.  FWIW a clean
split in the test script so it doesn't grow into something like the
current fast-import tests sounds like a good idea to me. :)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library
  2012-04-16 16:01     ` Jonathan Nieder
@ 2012-04-16 22:09       ` SZEDER Gábor
  2012-04-16 22:09         ` [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script SZEDER Gábor
                           ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: SZEDER Gábor @ 2012-04-16 22:09 UTC (permalink / raw)
  To: git, Jonathan Nieder
  Cc: Felipe Contreras, Junio C Hamano, Thomas Rast, Jeff King,
	SZEDER Gábor

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---

On Mon, Apr 16, 2012 at 11:01:24AM -0500, Jonathan Nieder wrote:
> SZEDER Gábor wrote:
> 
> > I thought about that briefly but decided against it to avoid
> > duplicating the bash-specific checks at the beginning, but I don't
> > care that much either way.
> 
> Maybe a t/lib-completion.sh would take care of that.

Here you go.  I put only the conditionals to run the test script under
Bash and the sourcing of test-lib.sh into t/lib-completion.sh, because
that's the common part that is required by the prompt tests, too.  So in
the end I'm not sure that t/lib-completion.sh is the right name for this
file.

This patch could probably be squashed into the first commit of
fc/completion-tests, i.e. 5c293a6b (tests: add initial bash completion
tests, 2012-04-12).

 t/lib-completion.sh   |   17 +++++++++++++++++
 t/t9902-completion.sh |   14 +-------------
 2 files changed, 18 insertions(+), 13 deletions(-)
 create mode 100644 t/lib-completion.sh

diff --git a/t/lib-completion.sh b/t/lib-completion.sh
new file mode 100644
index 00000000..3d85feb2
--- /dev/null
+++ b/t/lib-completion.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Ensures that tests of the completion script are run under Bash.
+
+if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
+	# we are in full-on bash mode
+	true
+elif type bash >/dev/null 2>&1; then
+	# execute in full-on bash mode
+	unset POSIXLY_CORRECT
+	exec bash "$0" "$@"
+else
+	echo '1..0 #SKIP skipping bash completion tests; bash not available'
+	exit 0
+fi
+
+. ./test-lib.sh
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index a6eaa15c..90b2f22e 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -3,21 +3,9 @@
 # Copyright (c) 2012 Felipe Contreras
 #
 
-if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
-	# we are in full-on bash mode
-	true
-elif type bash >/dev/null 2>&1; then
-	# execute in full-on bash mode
-	unset POSIXLY_CORRECT
-	exec bash "$0" "$@"
-else
-	echo '1..0 #SKIP skipping bash completion tests; bash not available'
-	exit 0
-fi
-
 test_description='test bash completion'
 
-. ./test-lib.sh
+. ./lib-completion.sh
 
 complete ()
 {
-- 
1.7.10.216.gb52c0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script
  2012-04-16 22:09       ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library SZEDER Gábor
@ 2012-04-16 22:09         ` SZEDER Gábor
  2012-04-16 23:50           ` Jonathan Nieder
  2012-04-16 23:49         ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library Jonathan Nieder
  2012-04-17  7:20         ` Johannes Sixt
  2 siblings, 1 reply; 14+ messages in thread
From: SZEDER Gábor @ 2012-04-16 22:09 UTC (permalink / raw)
  To: git, Jonathan Nieder
  Cc: Felipe Contreras, Junio C Hamano, Thomas Rast, Jeff King,
	SZEDER Gábor

The tests cover the discovery of the .git directory in the __gitdir()
function in different scenarios, and the prompt itself, i.e. branch
name, detached heads, operations (rebase, merge, cherry-pick, bisect),
and status indicators (dirty, stash, untracked files; but not the
upstream status).

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---

Tests are the same as in the prvious round, but in a different test file.

 t/t9903-bash-prompt.sh |  448 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 448 insertions(+)
 create mode 100644 t/t9903-bash-prompt.sh

diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
new file mode 100644
index 00000000..41c183e6
--- /dev/null
+++ b/t/t9903-bash-prompt.sh
@@ -0,0 +1,448 @@
+#!/bin/sh
+#
+# Copyright (c) 2012 SZEDER Gábor
+#
+
+test_description='test git-specific bash prompt functions'
+
+. ./lib-completion.sh
+
+. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
+
+actual="$TRASH_DIRECTORY/actual"
+
+test_expect_success 'setup for prompt tests' '
+	mkdir -p subdir/subsubdir &&
+	git init otherrepo &&
+	echo 1 > file &&
+	git add file &&
+	test_tick &&
+	git commit -m initial &&
+	git tag -a -m msg1 t1 &&
+	git checkout -b b1 &&
+	echo 2 > file &&
+	git commit -m "second b1" file &&
+	echo 3 > file &&
+	git commit -m "third b1" file &&
+	git tag -a -m msg2 t2 &&
+	git checkout -b b2 master &&
+	echo 0 > file &&
+	git commit -m "second b2" file &&
+	git checkout master
+'
+
+test_expect_success 'gitdir - from command line (through $__git_dir)' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	(
+		__git_dir="$TRASH_DIRECTORY/otherrepo/.git" &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - repo as argument' '
+	echo "otherrepo/.git" > expected &&
+	__gitdir "otherrepo" > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - remote as argument' '
+	echo "remote" > expected &&
+	__gitdir "remote" > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - .git directory in cwd' '
+	echo ".git" > expected &&
+	__gitdir > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - .git directory in parent' '
+	echo "$TRASH_DIRECTORY/.git" > expected &&
+	(
+		cd subdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - cwd is a .git directory' '
+	echo "." > expected &&
+	(
+		cd .git &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - parent is a .git directory' '
+	echo "$TRASH_DIRECTORY/.git" > expected &&
+	(
+		cd .git/refs &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_failure 'gitdir - $GIT_DIR set while .git directory in cwd' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	(
+		GIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&
+		export GIT_DIR &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - $GIT_DIR set while .git directory in parent' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	(
+		GIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&
+		export GIT_DIR &&
+		cd subdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - gitfile in cwd' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	echo "gitdir: $TRASH_DIRECTORY/otherrepo/.git" > subdir/.git &&
+	test_when_finished "rm -f subdir/.git" &&
+	(
+		cd subdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'gitdir - gitfile in parent' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" > expected &&
+	echo "gitdir: $TRASH_DIRECTORY/otherrepo/.git" > subdir/.git &&
+	test_when_finished "rm -f subdir/.git" &&
+	(
+		cd subdir/subsubdir &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success SYMLINKS 'gitdir - resulting path avoids symlinks' '
+	echo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&
+	mkdir otherrepo/dir &&
+	test_when_finished "rm -rf otherrepo/dir" &&
+	ln -s otherrepo/dir link &&
+	test_when_finished "rm -f link" &&
+	(
+		cd link &&
+		__gitdir > "$actual"
+	) &&
+	test_cmp expected actual
+'
+
+test_expect_success 'gitdir - not a git repository' '
+	(
+		cd subdir/subsubdir &&
+		GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY" &&
+		export GIT_CEILING_DIRECTORIES &&
+		test_must_fail __gitdir
+	)
+'
+
+test_expect_success 'prompt - branch name' '
+	printf " (master)" > expected &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - detached head' '
+	printf " ((%s...))" $(git log -1 --format="%h" b1^) > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - contains' '
+	printf " ((t2~1))" > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	(
+		GIT_PS1_DESCRIBE_STYLE=contains &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - branch' '
+	printf " ((b1~1))" > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	(
+		GIT_PS1_DESCRIBE_STYLE=branch &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - describe' '
+	printf " ((t1-1-g%s))" $(git log -1 --format="%h" b1^) > expected &&
+	git checkout b1^ &&
+	test_when_finished "git checkout master" &&
+	(
+		GIT_PS1_DESCRIBE_STYLE=describe &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - describe detached head - default' '
+	printf " ((t2))" > expected &&
+	git checkout --detach b1 &&
+	test_when_finished "git checkout master" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	(
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - deep inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	(
+		cd .git/refs &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - inside bare repository' '
+	printf " (BARE:master)" > expected &&
+	git init --bare bare.git &&
+	test_when_finished "rm -rf bare.git" &&
+	(
+		cd bare.git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - interactive rebase' '
+	printf " (b1|REBASE-i)" > expected
+	echo "#!$SHELL_PATH" >fake_editor.sh &&
+	cat >>fake_editor.sh <<\EOF &&
+echo "edit $(git log -1 --format="%h")" > "$1"
+EOF
+	test_when_finished "rm -f fake_editor.sh" &&
+	chmod a+x fake_editor.sh &&
+	test_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&
+	git checkout b1 &&
+	test_when_finished "git checkout master" &&
+	git rebase -i HEAD^ &&
+	test_when_finished "git rebase --abort"
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - rebase merge' '
+	printf " (b2|REBASE-m)" > expected &&
+	git checkout b2 &&
+	test_when_finished "git checkout master" &&
+	test_must_fail git rebase --merge b1 b2 &&
+	test_when_finished "git rebase --abort" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - rebase' '
+	printf " ((t2)|REBASE)" > expected &&
+	git checkout b2 &&
+	test_when_finished "git checkout master" &&
+	test_must_fail git rebase b1 b2 &&
+	test_when_finished "git rebase --abort" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - merge' '
+	printf " (b1|MERGING)" > expected &&
+	git checkout b1 &&
+	test_when_finished "git checkout master" &&
+	test_must_fail git merge b2 &&
+	test_when_finished "git reset --hard" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - cherry-pick' '
+	printf " (master|CHERRY-PICKING)" > expected &&
+	test_must_fail git cherry-pick b1 &&
+	test_when_finished "git reset --hard" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - bisect' '
+	printf " (master|BISECTING)" > expected &&
+	git bisect start &&
+	test_when_finished "git bisect reset" &&
+	__git_ps1 > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - clean' '
+	printf " (master)" > expected &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - dirty worktree' '
+	printf " (master *)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - dirty index' '
+	printf " (master +)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	git add -u &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - dirty index and worktree' '
+	printf " (master *+)" > expected &&
+	echo "dirty index" > file &&
+	test_when_finished "git reset --hard" &&
+	git add -u &&
+	echo "dirty worktree" > file &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - before root commit' '
+	printf " (master #)" > expected &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		cd otherrepo &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - disabled by config' '
+	printf " (master)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	test_config bash.showDirtyState false &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - dirty status indicator - not shown inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	echo "dirty" > file &&
+	test_when_finished "git reset --hard" &&
+	(
+		GIT_PS1_SHOWDIRTYSTATE=y &&
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - stash status indicator - no stash' '
+	printf " (master)" > expected &&
+	(
+		GIT_PS1_SHOWSTASHSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - stash status indicator - stash' '
+	printf " (master $)" > expected &&
+	echo 2 >file &&
+	git stash &&
+	test_when_finished "git stash drop" &&
+	(
+		GIT_PS1_SHOWSTASHSTATE=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - stash status indicator - not shown inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	echo 2 >file &&
+	git stash &&
+	test_when_finished "git stash drop" &&
+	(
+		GIT_PS1_SHOWSTASHSTATE=y &&
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - untracked files status indicator - no untracked files' '
+	printf " (master)" > expected &&
+	(
+		GIT_PS1_SHOWUNTRACKEDFILES=y &&
+		cd otherrepo &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - untracked files status indicator - untracked files' '
+	printf " (master %%)" > expected &&
+	(
+		GIT_PS1_SHOWUNTRACKEDFILES=y &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - untracked files status indicator - not shown inside .git directory' '
+	printf " (GIT_DIR!)" > expected &&
+	(
+		GIT_PS1_SHOWUNTRACKEDFILES=y &&
+		cd .git &&
+		__git_ps1 > "$actual"
+	) &&
+	test_cmp expected "$actual"
+'
+
+test_expect_success 'prompt - format string starting with dash' '
+	printf -- "-master" > expected &&
+	__git_ps1 "-%s" > "$actual" &&
+	test_cmp expected "$actual"
+'
+
+test_done
-- 
1.7.10.216.gb52c0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library
  2012-04-16 22:09       ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library SZEDER Gábor
  2012-04-16 22:09         ` [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script SZEDER Gábor
@ 2012-04-16 23:49         ` Jonathan Nieder
  2012-04-17  0:42           ` SZEDER Gábor
  2012-04-17  7:20         ` Johannes Sixt
  2 siblings, 1 reply; 14+ messages in thread
From: Jonathan Nieder @ 2012-04-16 23:49 UTC (permalink / raw)
  To: SZEDER Gábor
  Cc: git, Felipe Contreras, Junio C Hamano, Thomas Rast, Jeff King

SZEDER Gábor wrote:

> --- a/t/t9902-completion.sh
> +++ b/t/t9902-completion.sh
> @@ -3,21 +3,9 @@
>  # Copyright (c) 2012 Felipe Contreras
>  #
>  
> -if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
> -	# we are in full-on bash mode
> -	true
> -elif type bash >/dev/null 2>&1; then
> -	# execute in full-on bash mode
> -	unset POSIXLY_CORRECT
> -	exec bash "$0" "$@"
> -else
> -	echo '1..0 #SKIP skipping bash completion tests; bash not available'
> -	exit 0
> -fi
> -
>  test_description='test bash completion'
>  
> -. ./test-lib.sh
> +. ./lib-completion.sh

If I understand correctly, this sources lib-completion immediately
instead of following the usual pattern of

	. ./test-lib.sh
	. "$TEST_DIRECTORY/lib-completion.sh"

to get the self-execing over with ASAP.  "$0" always refers to the
original shell script and not the file being sourced so this should be
safe.  Looks good.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script
  2012-04-16 22:09         ` [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script SZEDER Gábor
@ 2012-04-16 23:50           ` Jonathan Nieder
  2012-04-17  0:33             ` SZEDER Gábor
  0 siblings, 1 reply; 14+ messages in thread
From: Jonathan Nieder @ 2012-04-16 23:50 UTC (permalink / raw)
  To: SZEDER Gábor
  Cc: git, Felipe Contreras, Junio C Hamano, Thomas Rast, Jeff King

SZEDER Gábor wrote:

>  create mode 100644 t/t9903-bash-prompt.sh

Should be 100755, no?

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script
  2012-04-16 23:50           ` Jonathan Nieder
@ 2012-04-17  0:33             ` SZEDER Gábor
  0 siblings, 0 replies; 14+ messages in thread
From: SZEDER Gábor @ 2012-04-17  0:33 UTC (permalink / raw)
  To: Jonathan Nieder
  Cc: git, Felipe Contreras, Junio C Hamano, Thomas Rast, Jeff King

On Mon, Apr 16, 2012 at 06:50:26PM -0500, Jonathan Nieder wrote:
> SZEDER Gábor wrote:
> 
> >  create mode 100644 t/t9903-bash-prompt.sh
> 
> Should be 100755, no?

Yes, of course.  Forgot to re-format-patch after amend.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library
  2012-04-16 23:49         ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library Jonathan Nieder
@ 2012-04-17  0:42           ` SZEDER Gábor
  0 siblings, 0 replies; 14+ messages in thread
From: SZEDER Gábor @ 2012-04-17  0:42 UTC (permalink / raw)
  To: Jonathan Nieder
  Cc: git, Felipe Contreras, Junio C Hamano, Thomas Rast, Jeff King

On Mon, Apr 16, 2012 at 06:49:24PM -0500, Jonathan Nieder wrote:
> SZEDER Gábor wrote:
> 
> > --- a/t/t9902-completion.sh
> > +++ b/t/t9902-completion.sh
> > @@ -3,21 +3,9 @@
> >  # Copyright (c) 2012 Felipe Contreras
> >  #
> >  
> > -if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
> > -	# we are in full-on bash mode
> > -	true
> > -elif type bash >/dev/null 2>&1; then
> > -	# execute in full-on bash mode
> > -	unset POSIXLY_CORRECT
> > -	exec bash "$0" "$@"
> > -else
> > -	echo '1..0 #SKIP skipping bash completion tests; bash not available'
> > -	exit 0
> > -fi
> > -
> >  test_description='test bash completion'
> >  
> > -. ./test-lib.sh
> > +. ./lib-completion.sh
> 
> If I understand correctly, this sources lib-completion immediately
> instead of following the usual pattern of
> 
> 	. ./test-lib.sh
> 	. "$TEST_DIRECTORY/lib-completion.sh"

There are a couple of other test libs that source test-lib.sh
themselves, similarly to the new t/lib-completion.sh.

> to get the self-execing over with ASAP.

Exactly, like the original t/t9902-completion.sh.

> "$0" always refers to the
> original shell script and not the file being sourced so this should be
> safe.  Looks good.

Yeah, I tested the tests ;) with dash as /bin/sh; works for me.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library
  2012-04-16 22:09       ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library SZEDER Gábor
  2012-04-16 22:09         ` [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script SZEDER Gábor
  2012-04-16 23:49         ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library Jonathan Nieder
@ 2012-04-17  7:20         ` Johannes Sixt
  2012-04-17  7:37           ` Felipe Contreras
  2 siblings, 1 reply; 14+ messages in thread
From: Johannes Sixt @ 2012-04-17  7:20 UTC (permalink / raw)
  To: SZEDER Gábor
  Cc: git, Jonathan Nieder, Felipe Contreras, Junio C Hamano,
	Thomas Rast, Jeff King

Am 4/17/2012 0:09, schrieb SZEDER Gábor:
> diff --git a/t/lib-completion.sh b/t/lib-completion.sh
> new file mode 100644
> index 00000000..3d85feb2
> --- /dev/null
> +++ b/t/lib-completion.sh
> @@ -0,0 +1,17 @@
> +#!/bin/sh
> +#
> +# Ensures that tests of the completion script are run under Bash.
> +
> +if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
> +	# we are in full-on bash mode
> +	true
> +elif type bash >/dev/null 2>&1; then
> +	# execute in full-on bash mode
> +	unset POSIXLY_CORRECT
> +	exec bash "$0" "$@"
> +else
> +	echo '1..0 #SKIP skipping bash completion tests; bash not available'
> +	exit 0
> +fi

I wonder what this 'echo...;exit' is about (I do so since I saw it the
first time when Felipe submitted his patch). Shouldn't it be more like:

	skip_all='skipping bash completion tests; bash not available'
	test_done

-- Hannes

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library
  2012-04-17  7:20         ` Johannes Sixt
@ 2012-04-17  7:37           ` Felipe Contreras
  0 siblings, 0 replies; 14+ messages in thread
From: Felipe Contreras @ 2012-04-17  7:37 UTC (permalink / raw)
  To: Johannes Sixt
  Cc: SZEDER Gábor, git, Jonathan Nieder, Junio C Hamano,
	Thomas Rast, Jeff King

2012/4/17 Johannes Sixt <j.sixt@viscovery.net>:
> Am 4/17/2012 0:09, schrieb SZEDER Gábor:
>> diff --git a/t/lib-completion.sh b/t/lib-completion.sh
>> new file mode 100644
>> index 00000000..3d85feb2
>> --- /dev/null
>> +++ b/t/lib-completion.sh
>> @@ -0,0 +1,17 @@
>> +#!/bin/sh
>> +#
>> +# Ensures that tests of the completion script are run under Bash.
>> +
>> +if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
>> +     # we are in full-on bash mode
>> +     true
>> +elif type bash >/dev/null 2>&1; then
>> +     # execute in full-on bash mode
>> +     unset POSIXLY_CORRECT
>> +     exec bash "$0" "$@"
>> +else
>> +     echo '1..0 #SKIP skipping bash completion tests; bash not available'
>> +     exit 0
>> +fi
>
> I wonder what this 'echo...;exit' is about (I do so since I saw it the
> first time when Felipe submitted his patch). Shouldn't it be more like:
>
>        skip_all='skipping bash completion tests; bash not available'
>        test_done

It should, if the test library was loaded at that point, but it isn't.
BTW, I didn't write that code.

In any case, what the user sees is exactly the same, except without color.

Cheers.

-- 
Felipe Contreras

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-04-17  7:37 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-15 20:31 [PATCH] tests: add tests for the bash prompt functions in the completion script SZEDER Gábor
2012-04-15 20:56 ` Felipe Contreras
2012-04-16  9:49   ` SZEDER Gábor
2012-04-16 10:04     ` Felipe Contreras
2012-04-16 10:20       ` SZEDER Gábor
2012-04-16 16:01     ` Jonathan Nieder
2012-04-16 22:09       ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library SZEDER Gábor
2012-04-16 22:09         ` [PATCH v2 2/2] tests: add tests for the bash prompt functions in the completion script SZEDER Gábor
2012-04-16 23:50           ` Jonathan Nieder
2012-04-17  0:33             ` SZEDER Gábor
2012-04-16 23:49         ` [PATCH v2 1/2] tests: move code to run completion tests under bash into a helper library Jonathan Nieder
2012-04-17  0:42           ` SZEDER Gábor
2012-04-17  7:20         ` Johannes Sixt
2012-04-17  7:37           ` Felipe Contreras

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.