All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Karl Hasselström" <kha@treskal.com>
To: Catalin Marinas <catalin.marinas@gmail.com>
Cc: git@vger.kernel.org
Subject: [StGit PATCH 3/5] Steal more test-lib.sh updates from git
Date: Thu, 17 Apr 2008 23:12:58 +0200	[thread overview]
Message-ID: <20080417211258.12809.75008.stgit@yoghurt> (raw)
In-Reply-To: <20080417210137.12809.88457.stgit@yoghurt>

This patch incorporates the updates that were made to git's
test-lib.sh from revision v1.2.2-66-g6643688 up to revision
v1.5.5-67-g9a49e00. A few manual adjustments had to be made -- for
example, the StGit tests assume that the repository starts out with an
initial commit, and there's no need to try to get hold of a git binary
other than the one reachable via $PATH. And the test_must_fail helper
function is not that useful to us, since a crashing Python program
won't kill the entire Python interpreter.

The main improvement is that the test script output is now in color!

Shortlog of the imported changes:

  Alex Riesen (2):
        Fix permissions on test scripts
        Do no colorify test output if stdout is not a terminal

  Christian Couder (1):
        Trace into a file or an open fd and refactor tracing code.

  Clemens Buchacher (1):
        http-push: add regression tests

  Eric Wong (3):
        tests: Set EDITOR=: and VISUAL=: globally
        test-lib: quiet down init-db output for tests
        Update tests to use test-chmtime

  Gerrit Pape (1):
        Set $HOME for selftests

  Jeff King (3):
        fix config reading in tests
        use build-time SHELL_PATH in test scripts
        add test_cmp function for test scripts

  Johannes Schindelin (2):
        Introduce GIT_TEMPLATE_DIR
        Make tests independent of global config files

  Johannes Sixt (1):
        test-lib.sh: A command dying due to a signal is an unexpected failure.

  Josh Triplett (1):
        Fall back to $EMAIL for missing GIT_AUTHOR_EMAIL and GIT_COMMITTER_EMAIL

  Junio C Hamano (26):
        Perl interface: make testsuite work again.
        Perly Git: make sure we do test the freshly built one.
        test-lib: unset GIT_TRACE
        Merge branch 'ml/trace'
        Merge branch 'master' into pb/gitpm
        Deprecate merge-recursive.py
        Merge branch 'jc/gitpm'
        remove merge-recursive-old
        fix testsuite: make sure they use templates freshly built from the source
        Revert "fix testsuite: make sure they use templates freshly built from the source"
        GIT_SKIP_TESTS: allow users to omit tests that are known to break
        t5400 send-pack test: try a bit more nontrivial transfer.
        Fix timestamp for test-tick
        t/test-lib.sh: Protect ourselves from common misconfiguration
        War on whitespace
        Merge branch 'ei/worktree+filter'
        Unset GIT_EDITOR while running tests.
        Sane use of test_expect_failure
        test: reword the final message of tests with known breakages
        tests: introduce test_must_fail
        Merge branch 'cb/http-test'
        tests: introduce test_must_fail
        test-lib: fix TERM to dumb for test repeatability
        Merge branch 'maint'
        Test: catch if trash cannot be removed
        test_must_fail: 129 is a valid error code from usage()

  Martin Waitz (1):
        test-lib: separate individual test better in verbose mode.

  Matthias Lederhofer (1):
        introduce GIT_WORK_TREE to specify the work tree

  Michele Ballabio (2):
        test-lib.sh: move error line after error() declaration
        Fix typo in a comment in t/test-lib.sh

  Nicolas Pitre (1):
        use 'init' instead of 'init-db' for shipped docs and tools

  Petr Baudis (1):
        Use $GITPERLLIB instead of $RUNNING_GIT_TESTS and centralize @INC munging

  Pierre Habouzit (2):
        Add some fancy colors in the test library when terminal supports it.
        Support a --quiet option in the test-suite.

  Robin Rosenberg (1):
        Quote arguments to tr in test-lib

  Shawn O. Pearce (1):
        Default GIT_MERGE_VERBOSITY to 5 during tests.

Signed-off-by: Karl Hasselström <kha@treskal.com>

---

 t/test-lib.sh |  179 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 139 insertions(+), 40 deletions(-)


diff --git a/t/test-lib.sh b/t/test-lib.sh
index 5e4c7a1..87c143a 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -4,14 +4,19 @@
 # Copyright (c) 2006 Yann Dirson - tuning for stgit
 #
 
+# Keep the original TERM for say_color
+ORIGINAL_TERM=$TERM
+
 # For repeatability, reset the environment to known value.
 LANG=C
 LC_ALL=C
 PAGER=cat
 TZ=UTC
-export LANG LC_ALL PAGER TZ
+TERM=dumb
+export LANG LC_ALL PAGER TERM TZ
 EDITOR=:
 VISUAL=:
+unset GIT_EDITOR
 unset AUTHOR_DATE
 unset AUTHOR_EMAIL
 unset AUTHOR_NAME
@@ -27,6 +32,7 @@ GIT_COMMITTER_EMAIL=committer@example.com
 GIT_COMMITTER_NAME='C O Mitter'
 unset GIT_DIFF_OPTS
 unset GIT_DIR
+unset GIT_WORK_TREE
 unset GIT_EXTERNAL_DIFF
 unset GIT_INDEX_FILE
 unset GIT_OBJECT_DIRECTORY
@@ -37,6 +43,7 @@ export GIT_MERGE_VERBOSITY
 export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME
 export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME
 export EDITOR VISUAL
+GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
 
 # Protect ourselves from common misconfiguration to export
 # CDPATH into the environment
@@ -57,19 +64,15 @@ esac
 # This test checks if command xyzzy does the right thing...
 # '
 # . ./test-lib.sh
-
-error () {
-	echo "* error: $*"
-	trap - exit
-	exit 1
-}
-
-say () {
-	echo "* $*"
-}
-
-test "${test_description}" != "" ||
-error "Test script did not set test_description."
+[ "x$ORIGINAL_TERM" != "xdumb" ] && (
+		TERM=$ORIGINAL_TERM &&
+		export TERM &&
+		[ -t 1 ] &&
+		tput bold >/dev/null 2>&1 &&
+		tput setaf 1 >/dev/null 2>&1 &&
+		tput sgr0 >/dev/null 2>&1
+	) &&
+	color=t
 
 while test "$#" -ne 0
 do
@@ -79,16 +82,63 @@ do
 	-i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate)
 		immediate=t; shift ;;
 	-h|--h|--he|--hel|--help)
-		echo "$test_description"
-		exit 0 ;;
+		help=t; shift ;;
 	-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
 		export STGIT_DEBUG_LEVEL="-1"
 		verbose=t; shift ;;
+	-q|--q|--qu|--qui|--quie|--quiet)
+		quiet=t; shift ;;
+	--no-color)
+		color=; shift ;;
 	*)
 		break ;;
 	esac
 done
 
+if test -n "$color"; then
+	say_color () {
+		(
+		TERM=$ORIGINAL_TERM
+		export TERM
+		case "$1" in
+			error) tput bold; tput setaf 1;; # bold red
+			skip)  tput bold; tput setaf 2;; # bold green
+			pass)  tput setaf 2;;            # green
+			info)  tput setaf 3;;            # brown
+			*) test -n "$quiet" && return;;
+		esac
+		shift
+		echo "* $*"
+		tput sgr0
+		)
+	}
+else
+	say_color() {
+		test -z "$1" && test -n "$quiet" && return
+		shift
+		echo "* $*"
+	}
+fi
+
+error () {
+	say_color error "error: $*"
+	trap - exit
+	exit 1
+}
+
+say () {
+	say_color info "$*"
+}
+
+test "${test_description}" != "" ||
+error "Test script did not set test_description."
+
+if test "$help" = "t"
+then
+	echo "$test_description"
+	exit 0
+fi
+
 exec 5>&1
 if test "$verbose" = "t"
 then
@@ -99,8 +149,15 @@ fi
 
 test_failure=0
 test_count=0
+test_fixed=0
+test_broken=0
+
+die () {
+	echo >&5 "FATAL: Unexpected exit with code $?"
+	exit 1
+}
 
-trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
+trap 'die' exit
 
 test_tick () {
 	if test -z "${test_tick+set}"
@@ -119,18 +176,29 @@ test_tick () {
 
 test_ok_ () {
 	test_count=$(expr "$test_count" + 1)
-	say "  ok $test_count: $@"
+	say_color "" "  ok $test_count: $@"
 }
 
 test_failure_ () {
 	test_count=$(expr "$test_count" + 1)
 	test_failure=$(expr "$test_failure" + 1);
-	say "FAIL $test_count: $1"
+	say_color error "FAIL $test_count: $1"
 	shift
 	echo "$@" | sed -e 's/^/	/'
 	test "$immediate" = "" || { trap - exit; exit 1; }
 }
 
+test_known_broken_ok_ () {
+	test_count=$(expr "$test_count" + 1)
+	test_fixed=$(($test_fixed+1))
+	say_color "" "  FIXED $test_count: $@"
+}
+
+test_known_broken_failure_ () {
+	test_count=$(expr "$test_count" + 1)
+	test_broken=$(($test_broken+1))
+	say_color skip "  still broken $test_count: $@"
+}
 
 test_debug () {
 	test "$debug" = "" || eval "$1"
@@ -155,9 +223,9 @@ test_skip () {
 	done
 	case "$to_skip" in
 	t)
-		say >&3 "skipping test: $@"
+		say_color skip >&3 "skipping test: $@"
 		test_count=$(expr "$test_count" + 1)
-		say "skip $test_count: $1"
+		say_color skip "skip $test_count: $1"
 		: true
 		;;
 	*)
@@ -171,13 +239,13 @@ test_expect_failure () {
 	error "bug in the test script: not 2 parameters to test-expect-failure"
 	if ! test_skip "$@"
 	then
-		say >&3 "expecting failure: $2"
+		say >&3 "checking known breakage: $2"
 		test_run_ "$2"
-		if [ "$?" = 0 -a "$eval_ret" != 0 -a "$eval_ret" -lt 129 ]
+		if [ "$?" = 0 -a "$eval_ret" = 0 ]
 		then
-			test_ok_ "$1"
+			test_known_broken_ok_ "$1"
 		else
-			test_failure_ "$@"
+		    test_known_broken_failure_ "$1"
 		fi
 	fi
 	echo >&3 ""
@@ -217,7 +285,24 @@ test_expect_code () {
 	echo >&3 ""
 }
 
-# Most tests can use the created repository, but some amy need to create more.
+# test_cmp is a helper function to compare actual and expected output.
+# You can use it like:
+#
+#	test_expect_success 'foo works' '
+#		echo expected >expected &&
+#		foo >actual &&
+#		test_cmp expected actual
+#	'
+#
+# This could be written as either "cmp" or "diff -u", but:
+# - cmp's output is not nearly as easy to read as diff -u
+# - not all diff versions understand "-u"
+
+test_cmp() {
+	$GIT_TEST_CMP "$@"
+}
+
+# Most tests can use the created repository, but some may need to create more.
 # Usage: test_create_repo <directory>
 test_create_repo () {
 	test "$#" = 1 ||
@@ -226,17 +311,28 @@ test_create_repo () {
 	repo="$1"
 	mkdir "$repo"
 	cd "$repo" || error "Cannot setup test environment"
-	git-init >/dev/null 2>&1 ||
-	error "cannot run git-init -- have you installed git-core?"
-	mkdir .git/info
-	echo "empty start" |
-	git-commit-tree `git-write-tree` >.git/refs/heads/master 2>&4 ||
-	error "cannot run git-commit -- is your git-core functioning?"
+	git init >/dev/null 2>&1 || error "cannot run git init"
+	echo "empty start" | \
+	    git commit-tree `git write-tree` >.git/refs/heads/master 2>&4 || \
+	    error "cannot run git commit"
+	mv .git/hooks .git/hooks-disabled
 	cd "$owd"
 }
 
 test_done () {
 	trap - exit
+
+	if test "$test_fixed" != 0
+	then
+		say_color pass "fixed $test_fixed known breakage(s)"
+	fi
+	if test "$test_broken" != 0
+	then
+		say_color error "still have $test_broken known breakage(s)"
+		msg="remaining $(($test_count-$test_broken)) test(s)"
+	else
+		msg="$test_count test(s)"
+	fi
 	case "$test_failure" in
 	0)
 		# We could:
@@ -247,11 +343,11 @@ test_done () {
 		# The Makefile provided will clean this test area so
 		# we will leave things as they are.
 
-		say "passed all $test_count test(s)"
+		say_color pass "passed all $msg"
 		exit 0 ;;
 
 	*)
-		say "failed $test_failure among $test_count test(s)"
+		say_color error "failed $test_failure among $msg"
 		exit 1 ;;
 
 	esac
@@ -261,14 +357,17 @@ test_done () {
 # t/ subdirectory and are run in trash subdirectory.
 PATH=$(pwd)/..:$PATH
 HOME=$(pwd)/trash
-GIT_TEMPLATE_DIR=$(pwd)/../templates
 GIT_CONFIG=.git/config
-export PATH HOME GIT_TEMPLATE_DIR GIT_CONFIG
-
+export PATH HOME GIT_CONFIG
 
 # Test repository
 test=trash
-rm -fr "$test"
+rm -fr "$test" || {
+	trap - exit
+	echo >&5 "FATAL: Cannot prepare test area"
+	exit 1
+}
+
 test_create_repo $test
 cd "$test"
 
@@ -285,8 +384,8 @@ do
 	done
 	case "$to_skip" in
 	t)
-		say >&3 "skipping test $this_test altogether"
-		say "skip all tests in $this_test"
+		say_color skip >&3 "skipping test $this_test altogether"
+		say_color skip "skip all tests in $this_test"
 		test_done
 	esac
 done

  parent reply	other threads:[~2008-04-17 21:13 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-17 21:12 [StGit PATCH 0/5] test suite update Karl Hasselström
2008-04-17 21:12 ` [StGit PATCH 1/5] If a patch is not changed when pushing, reuse the same commit object Karl Hasselström
2008-04-17 21:12 ` [StGit PATCH 2/5] Use hardcoded author and committer names in tests Karl Hasselström
2008-04-17 21:12 ` Karl Hasselström [this message]
2008-04-17 21:13 ` [StGit PATCH 4/5] Get rid of backticks in test-lib.sh Karl Hasselström
2008-04-17 21:13 ` [StGit PATCH 5/5] Use test_cmp instead of diff -u in the test suite Karl Hasselström
2008-04-17 21:14 ` [StGit PATCH 0/5] test suite update Karl Hasselström

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080417211258.12809.75008.stgit@yoghurt \
    --to=kha@treskal.com \
    --cc=catalin.marinas@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.