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
next prev 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.