Re: [PATCH v2] tests: Use skip_all=<reason> to skip tests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ævar Arnfjörð Bjarmason  <avarab@xxxxxxxxx> writes:

> Change tests to skip with skip_all=<reason> + test_done, instead of
> using say <reason> + test_done.
>
> This is a follow-up to "tests: Skip tests in a way that makes sense
> under TAP" (fadb5156e4). I missed these cases when preparing that
> patch, hopefully this is all of them.
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
> ---
>
> On Fri, Jul 9, 2010 at 09:33, Michael J Gruber <git@xxxxxxxxxxxxxxxxxxxx> wrote:
>> After trying out tests with prove (I like it!) I was just about to make
>> a patch before I saw this...
>
> Great, good to know that you find the TAP support useful.
>
>> So, this does what it should, at least with my set of prerequisites.
>>
>> Ævar Arnfjörð Bjarmason venit, vidit, dixit 08.07.2010 03:16:
>>> Change tests to skip with skip_all=* + test_done instead of using say
>>> + test_done.
>>
>> I didn't understand this at all at first, only after I was about to
>> write that patch myself. Maybe 'with skip_all="reason"' or
>> 'skip_all=<reason>' etc.?
>
> Changed the subject + body of the patch to use <reason>

That makes sense, but I am beginning to hate this skip_all business.

There is no "skip"-ness to what the variable does from the semantic point
of view.  In the context of test helper library whose service consists of
counting the number of tests that succeeded, failed, and are known to be
still broken, one would expect that the word "skip" would mean it somehow
would help counting the tests that are prepared by the test author but
were not run for some reason, but this variable is not about that (note
that I am not suggesting us to actually count and say "N tests skipped").
It is only about giving parting words at the end before the test script
exits.

The variable is not about skip_ALL either.  In the majority of cases, it
is more like "finishing here, telling the user that we are doing so
without running the remainder of the script", and in one case, it is more
like "skipped one test, reporting after the fact".

Among 63 assignments to $skip_all that are all over in t/*.sh scripts, the
only ones that are not immediately followed by test_done are in
lib-git-svn.sh (chooses one among 3 messages), lib-httpd.sh (sets a trap
before calling test_done), and t3600-rm (makes a mental note to report
that one test was skipped long before all the tests run).

I suspect that it might be much easier in the long run for test writers if
we made test_done take optional "parting words" parameter instead of using
a global variable "$skip_all" and forcing them to carefully set it.  Then
we can lose special meaning to the global variable $skip_all, most of the
scripts that currently assign to the variable do not need the assignments,
and only the very few special cases can use $skip_all as their local
convention to decide what optional "parting words" parameter to give to
the test_done helper.

The change would look something like this (I just did a few as a
demonstration).

What do you think?

 t/lib-git-svn.sh            |   11 ++++-------
 t/t2007-checkout-symlink.sh |    3 +--
 t/test-lib.sh               |    5 +----
 3 files changed, 6 insertions(+), 13 deletions(-)

diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh
index c3f6676..cfc0d5b 100644
--- a/t/lib-git-svn.sh
+++ b/t/lib-git-svn.sh
@@ -5,12 +5,10 @@ git_svn_id=git""-svn-id
 
 if test -n "$NO_SVN_TESTS"
 then
-	skip_all='skipping git svn tests, NO_SVN_TESTS defined'
-	test_done
+	test_done 'skipping git svn tests, NO_SVN_TESTS defined'
 fi
 if ! test_have_prereq PERL; then
-	skip_all='skipping git svn tests, perl not available'
-	test_done
+	test_done 'skipping git svn tests, perl not available'
 fi
 
 GIT_DIR=$PWD/.git
@@ -21,8 +19,7 @@ PERL=${PERL:-perl}
 svn >/dev/null 2>&1
 if test $? -ne 1
 then
-    skip_all='skipping git svn tests, svn not found'
-    test_done
+    test_done 'skipping git svn tests, svn not found'
 fi
 
 svnrepo=$PWD/svnrepo
@@ -46,7 +43,7 @@ then
 	else
 		skip_all='Perl SVN libraries not found or unusable'
 	fi
-	test_done
+	test_done "$skip_all"
 fi
 
 rawsvnrepo="$svnrepo"
diff --git a/t/t2007-checkout-symlink.sh b/t/t2007-checkout-symlink.sh
index 05cc8fd..fd3d7be 100755
--- a/t/t2007-checkout-symlink.sh
+++ b/t/t2007-checkout-symlink.sh
@@ -8,8 +8,7 @@ test_description='git checkout to switch between branches with symlink<->dir'
 
 if ! test_have_prereq SYMLINKS
 then
-	skip_all="symbolic links not supported - skipping tests"
-	test_done
+	test_done "symbolic links not supported - skipping tests"
 fi
 
 test_expect_success setup '
diff --git a/t/test-lib.sh b/t/test-lib.sh
index ac496aa..2c4474d 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -657,12 +657,9 @@ test_done () {
 	fi
 	case "$test_failure" in
 	0)
-		# Maybe print SKIP message
-		[ -z "$skip_all" ] || skip_all=" # SKIP $skip_all"
-
 		if test $test_external_has_tap -eq 0; then
 			say_color pass "# passed all $msg"
-			say "1..$test_count$skip_all"
+			say "1..$test_count${1:+" # SKIP $1"}"
 		fi
 
 		test -d "$remove_trash" &&
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]