git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 4/5] Add test for sanitized work-tree behaviour
@ 2007-07-26  6:32 Johannes Schindelin
  2007-07-26  7:15 ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: Johannes Schindelin @ 2007-07-26  6:32 UTC (permalink / raw)
  To: git, gitster


Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---

	This test was also something that I almost got eye cancer from.

	I am very willing to extend this script with many more test
	cases.  Just give me a recipe what you would like to have tested.

 t/t1501-worktree.sh |  157 ++++++++++++++++++++++++++++----------------------
 1 files changed, 88 insertions(+), 69 deletions(-)

diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh
index aadeeab..145c28e 100755
--- a/t/t1501-worktree.sh
+++ b/t/t1501-worktree.sh
@@ -3,90 +3,109 @@
 test_description='test separate work tree'
 . ./test-lib.sh
 
+i=1
+
 test_rev_parse() {
-	name=$1
-	shift
-
-	test_expect_success "$name: is-bare-repository" \
-	"test '$1' = \"\$(git rev-parse --is-bare-repository)\""
-	shift
-	[ $# -eq 0 ] && return
-
-	test_expect_success "$name: is-inside-git-dir" \
-	"test '$1' = \"\$(git rev-parse --is-inside-git-dir)\""
-	shift
-	[ $# -eq 0 ] && return
-
-	test_expect_success "$name: is-inside-work-tree" \
-	"test '$1' = \"\$(git rev-parse --is-inside-work-tree)\""
-	shift
-	[ $# -eq 0 ] && return
-
-	test_expect_success "$name: prefix" \
-	"test '$1' = \"\$(git rev-parse --show-prefix)\""
-	shift
-	[ $# -eq 0 ] && return
+	name="$1"
+	for option in --is-bare-repository --is-inside-git-dir \
+		--is-inside-work-tree --show-prefix
+	do
+		shift
+		test_expect_success "$name: $option" \
+			"test '$1' = \"\$(git rev-parse $option)\""
+i=$(($i+1))
+test $i = $STOPI && gdb --args git rev-parse $option
+		test $# -eq 1 && return
+	done
+}
+
+# usage: set_repo <working directory> [<git dir> [<work tree> [env]]]
+set_repo () {
+	cd "$1"
+	say "switching to $(pwd) with GIT_DIR $2"
+
+	test -z "$2" || {
+		GIT_DIR="$2"
+		GIT_CONFIG="$2"/config
+		export GIT_DIR GIT_CONFIG
+	}
+
+	test -z "$3" ||
+	case "$4" in
+	env)
+		GIT_WORK_TREE="$3"
+		export GIT_WORK_TREE
+		git config core.workTree non-existent
+	;;
+	*)
+		git config core.workTree "$3"
+	esac
 }
 
-mkdir -p work/sub/dir || exit 1
-mv .git repo.git || exit 1
+test_expect_success 'setup' '
+	mkdir -p work/sub/dir &&
+	mv .git repo.git
+'
 
 say "core.worktree = relative path"
-export GIT_DIR=repo.git
-export GIT_CONFIG=$GIT_DIR/config
-unset GIT_WORK_TREE
-git config core.worktree ../work
-test_rev_parse 'outside'      false false false
-cd work || exit 1
-export GIT_DIR=../repo.git
-export GIT_CONFIG=$GIT_DIR/config
-test_rev_parse 'inside'       false false true ''
-cd sub/dir || exit 1
-export GIT_DIR=../../../repo.git
-export GIT_CONFIG=$GIT_DIR/config
+
+set_repo . repo.git ../work
+test_rev_parse 'outside git dir' false false false
+
+set_repo work ../repo.git
+test_rev_parse 'inside git dir' false false true ''
+
+set_repo sub/dir ../../../repo.git
 test_rev_parse 'subdirectory' false false true sub/dir/
-cd ../../.. || exit 1
+cd ../../..
 
 say "core.worktree = absolute path"
-export GIT_DIR=$(pwd)/repo.git
-export GIT_CONFIG=$GIT_DIR/config
-git config core.worktree "$(pwd)/work"
-test_rev_parse 'outside'      false false false
-cd work || exit 1
-test_rev_parse 'inside'       false false true ''
-cd sub/dir || exit 1
+set_repo . $(pwd)/repo.git $(pwd)/work
+test_rev_parse 'outside git dir' false false false
+
+set_repo work
+test_rev_parse 'inside git dir' false false true ''
+
+set_repo sub/dir
 test_rev_parse 'subdirectory' false false true sub/dir/
-cd ../../.. || exit 1
+cd ../../..
 
 say "GIT_WORK_TREE=relative path (override core.worktree)"
-export GIT_DIR=$(pwd)/repo.git
-export GIT_CONFIG=$GIT_DIR/config
-git config core.worktree non-existent
-export GIT_WORK_TREE=work
-test_rev_parse 'outside'      false false false
-cd work || exit 1
-export GIT_WORK_TREE=.
-test_rev_parse 'inside'       false false true ''
-cd sub/dir || exit 1
-export GIT_WORK_TREE=../..
+
+set_repo . $(pwd)/repo.git work env
+test_rev_parse 'outside git dir' false false false
+
+set_repo work "" . env
+test_rev_parse 'inside git dir' false false true ''
+
+set_repo sub/dir "" ../../ env
 test_rev_parse 'subdirectory' false false true sub/dir/
 cd ../../.. || exit 1
 
+say "GIT_WORK_TREE=absolute path, work tree below git dir"
+
 mv work repo.git/work
 
-say "GIT_WORK_TREE=absolute path, work tree below git dir"
-export GIT_DIR=$(pwd)/repo.git
-export GIT_CONFIG=$GIT_DIR/config
-export GIT_WORK_TREE=$(pwd)/repo.git/work
-test_rev_parse 'outside'              false false false
-cd repo.git || exit 1
-test_rev_parse 'in repo.git'              false true  false
-cd objects || exit 1
-test_rev_parse 'in repo.git/objects'      false true  false
-cd ../work || exit 1
-test_rev_parse 'in repo.git/work'         false false true ''
-cd sub/dir || exit 1
-test_rev_parse 'in repo.git/sub/dir' false false true sub/dir/
-cd ../../../.. || exit 1
+set_repo . $(pwd)/repo.git $(pwd)/repo.git/work env
+test_rev_parse 'outside git dir' false false false
+
+set_repo repo.git
+test_rev_parse 'in repo.git' false true false
+
+set_repo objects
+test_rev_parse 'in repo.git/objects' false true  false
+
+set_repo ../work
+test_rev_parse 'in repo.git/work' false true true ''
+
+set_repo sub/dir
+test_rev_parse 'in repo.git/sub/dir' false true true sub/dir/
+cd ../../../..
+
+test_expect_success 'repo finds its work tree' '
+	(cd repo.git &&
+	 : > work/sub/dir/untracked &&
+	 test sub/dir/untracked = "$(git ls-files --others)")
+'
 
 test_done
-- 
1.5.3.rc2.42.gda8d-dirty

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

* Re: [PATCH 4/5] Add test for sanitized work-tree behaviour
  2007-07-26  6:32 [PATCH 4/5] Add test for sanitized work-tree behaviour Johannes Schindelin
@ 2007-07-26  7:15 ` Junio C Hamano
  2007-07-26 14:05   ` Johannes Schindelin
  0 siblings, 1 reply; 3+ messages in thread
From: Junio C Hamano @ 2007-07-26  7:15 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, gitster

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
> ...
> @@ -3,90 +3,109 @@
>  test_description='test separate work tree'
>  . ./test-lib.sh
>  
> +i=1
> +
>  test_rev_parse() {
> - ...
> +	name="$1"
> +	for option in --is-bare-repository --is-inside-git-dir \
> +		--is-inside-work-tree --show-prefix
> +	do
> +		shift
> +		test_expect_success "$name: $option" \
> +			"test '$1' = \"\$(git rev-parse $option)\""

> +i=$(($i+1))
> +test $i = $STOPI && gdb --args git rev-parse $option

Eh?

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

* Re: [PATCH 4/5] Add test for sanitized work-tree behaviour
  2007-07-26  7:15 ` Junio C Hamano
@ 2007-07-26 14:05   ` Johannes Schindelin
  0 siblings, 0 replies; 3+ messages in thread
From: Johannes Schindelin @ 2007-07-26 14:05 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi,

On Thu, 26 Jul 2007, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> > ...
> > @@ -3,90 +3,109 @@
> >  test_description='test separate work tree'
> >  . ./test-lib.sh
> >  
> > +i=1
> > +
> >  test_rev_parse() {
> > - ...
> > +	name="$1"
> > +	for option in --is-bare-repository --is-inside-git-dir \
> > +		--is-inside-work-tree --show-prefix
> > +	do
> > +		shift
> > +		test_expect_success "$name: $option" \
> > +			"test '$1' = \"\$(git rev-parse $option)\""
> 
> > +i=$(($i+1))
> > +test $i = $STOPI && gdb --args git rev-parse $option
> 
> Eh?

Yes, got me there.  It was a real PITA to debug that thing, given that the 
tests were written in the spirit of Malbolge.  So the easiest method to 
debug it was for me to "-i -v" the test, run it again with "STOPI=$n .. 
-v", and work out what was the intended behaviour, and whether to fix the 
test or the logic.

Will clean up.

Ciao,
Dscho

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

end of thread, other threads:[~2007-07-26 14:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-26  6:32 [PATCH 4/5] Add test for sanitized work-tree behaviour Johannes Schindelin
2007-07-26  7:15 ` Junio C Hamano
2007-07-26 14:05   ` Johannes Schindelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).