]> git.ipfire.org Git - thirdparty/git.git/commitdiff
tests: when run in Bash, annotate test failures with file name/line number
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 10 Apr 2020 17:18:12 +0000 (00:18 +0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 10 Apr 2020 17:30:40 +0000 (10:30 -0700)
When a test fails, it is nice to see where the corresponding code lives
in the worktree. Sadly, it seems that only Bash allows us to infer this
information. Let's do it when we detect that we're running in a Bash.

This will come in handy in the next commit, where we teach the GitHub
Actions workflow to annotate failed test runs with this information.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/test-lib.sh

index 9fe390bd5a2ad3fc4da3d706aa9fffdb14633772..936c348edfdb6ecf8e7a95f2f062973745ff23cd 100644 (file)
@@ -642,6 +642,18 @@ die () {
        fi
 }
 
+file_lineno () {
+       test -z "$GIT_TEST_FRAMEWORK_SELFTEST" && test -n "$BASH" || return 0
+       local i
+       for i in ${!BASH_SOURCE[*]}
+       do
+               case $i,"${BASH_SOURCE[$i]##*/}" in
+               0,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }"; return;;
+               *,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }"; return;;
+               esac
+       done
+}
+
 GIT_EXIT_OK=
 trap 'die' EXIT
 # Disable '-x' tracing, because with some shells, notably dash, it
@@ -687,7 +699,7 @@ test_failure_ () {
                write_junit_xml_testcase "$1" "      $junit_insert"
        fi
        test_failure=$(($test_failure + 1))
-       say_color error "not ok $test_count - $1"
+       say_color error "$(file_lineno error)not ok $test_count - $1"
        shift
        printf '%s\n' "$*" | sed -e 's/^/#      /'
        test "$immediate" = "" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }