From: Ilya Bobyr <ilya.bobyr@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: Git List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Subject: Re: [PATCH 3/3] test-lib: '--run' to run only specific tests
Date: Wed, 30 Apr 2014 02:41:19 -0700 [thread overview]
Message-ID: <5360C53F.5080909@gmail.com> (raw)
In-Reply-To: <CAPig+cTK8i6rGYmum0m-wCmTUE4oqMVEdryiAt29vJXYdgSuYQ@mail.gmail.com>
On 4/23/2014 12:51 PM, Eric Sunshine wrote:
> On Tue, Apr 22, 2014 at 4:19 AM, Ilya Bobyr <ilya.bobyr@gmail.com> wrote:
>> Allow better control of the set of tests that will be executed for a
>> single test suite. Mostly useful while debugging or developing as it
>> allows to focus on a specific test.
>>
>> Signed-off-by: Ilya Bobyr <ilya.bobyr@gmail.com>
>> ---
>> diff --git a/t/README b/t/README
>> index 6b93aca..2dac619 100644
>> --- a/t/README
>> +++ b/t/README
>> +As noted above, the test set is built going though items left to
>> +right, so this:
>> +
>> + $ sh ./t9200-git-cvsexport-commit.sh --run='1-4 !3'
>> +
>> +will run tests 1, 2, and 4.
>> +
>> +You may use negation with ranges. The following will run all
>> +test as a test suite except from 7 upto 11:
> s/upto/up to/
> ...or...
> s/upto/through/
Fixed. Thanks.
>> + $ sh ./t9200-git-cvsexport-commit.sh --run='!7-11'
>> +
>> +Some tests in a test suite rely on the previous tests performing
>> +certain actions, specifically some tests are designated as
>> +"setup" test, so you cannot _arbitrarily_ disable one test and
>> +expect the rest to function correctly.
>> +--run is mostly useful when you want to focus on a specific test
>> +and know what you are doing. Or when you want to run up to a
>> +certain test.
>>
>>
>> Naming Tests
>> diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
>> index ae8874e..e2589cc 100755
>> --- a/t/t0000-basic.sh
>> +++ b/t/t0000-basic.sh
>> @@ -84,6 +97,18 @@ check_sub_test_lib_test () {
>> )
>> }
>>
>> +check_sub_test_lib_test_err () {
>> + name="$1" # stdin is the expected output output from the test
>> + # expecte error output is in descriptor 3
> s/expecte/expected/
Fixed.
>> + (
>> + cd "$name" &&
>> + sed -e 's/^> //' -e 's/Z$//' >expect.out &&
>> + test_cmp expect.out out &&
>> + sed -e 's/^> //' -e 's/Z$//' <&3 >expect.err &&
>> + test_cmp expect.err err
>> + )
>> +}
>> +
>> test_expect_success 'pretend we have a fully passing test suite' "
>> run_sub_test_lib_test full-pass '3 passing tests' <<-\\EOF &&
>> for i in 1 2 3
>> @@ -333,6 +358,329 @@ test_expect_success 'GIT_SKIP_TESTS sh pattern' "
>> +test_expect_success '--run invalid range start' "
>> + run_sub_test_lib_test_err run-inv-range-start \
>> + '--run invalid range start' \
>> + --run='a-5' <<-\\EOF &&
>> + test_expect_success \"passing test #1\" 'true'
>> + test_done
>> + EOF
>> + check_sub_test_lib_test_err run-inv-range-start \
>> + <<-\\EOF_OUT 3<<-\\EOF_ERR
>> + > FATAL: Unexpected exit with code 1
>> + EOF_OUT
>> + > error: --run: range start should contain only digits: 'a-5'
> This reads rather strangely, as if it's attempting to give an example
> (after the colon) of a valid digit range, but then shows something
> that is not valid. Rewording it slightly can eliminate the ambiguity:
>
> error: --run: invalid non-numeric range start: 'a-5'
Changed.
>> + EOF_ERR
>> +"
>> +
>> +test_expect_success '--run invalid range end' "
>> + run_sub_test_lib_test_err run-inv-range-end \
>> + '--run invalid range end' \
>> + --run='1-z' <<-\\EOF &&
>> + test_expect_success \"passing test #1\" 'true'
>> + test_done
>> + EOF
>> + check_sub_test_lib_test_err run-inv-range-end \
>> + <<-\\EOF_OUT 3<<-\\EOF_ERR
>> + > FATAL: Unexpected exit with code 1
>> + EOF_OUT
>> + > error: --run: range end should contain only digits: '1-z'
> Ditto.
Fixed.
>> + EOF_ERR
>> +"
>> +
>> +test_expect_success '--run invalid selector' "
>> + run_sub_test_lib_test_err run-inv-selector \
>> + '--run invalid selector' \
>> + --run='1?' <<-\\EOF &&
>> + test_expect_success \"passing test #1\" 'true'
>> + test_done
>> + EOF
>> + check_sub_test_lib_test_err run-inv-selector \
>> + <<-\\EOF_OUT 3<<-\\EOF_ERR
>> + > FATAL: Unexpected exit with code 1
>> + EOF_OUT
>> + > error: --run: test selector should contain only digits: '1?'
> And here:
>
> error: --run: invalid non-digit in range selector: '1?'
>
> or something.
Changed to "invalid non-digit in test selector". This one is only shown
if it does not have a "-", so it is probably not a range.
>> + EOF_ERR
>> +"
>> +
>> +
>> test_set_prereq HAVEIT
>> haveit=no
>> test_expect_success HAVEIT 'test runs if prerequisite is satisfied' '
>> diff --git a/t/test-lib.sh b/t/test-lib.sh
>> index e7d9c51..46ba513 100644
>> --- a/t/test-lib.sh
>> +++ b/t/test-lib.sh
>> @@ -366,6 +374,100 @@ match_pattern_list () {
>> return 1
>> }
>>
>> +match_test_selector_list () {
>> + title="$1"
>> + shift
>> + arg="$1"
>> + shift
>> + test -z "$1" && return 0
>> +
>> + # Both commas and spaces are accepted as separators
>> + OLDIFS=$IFS
>> + IFS=' ,'
> The comment mentions only space and comma, but the actual assigned IFS
> value also treats tabs as separators. Perhaps update the comment to
> say "commas and whitespace".
I thought that tab is a space character =) Changed it.
>> + set -- $1
>> + IFS=$OLDIFS
>> +
>> + # If the first selector is negative we include by default.
>> + include=
>> + case "$1" in
>> + !*) include=t ;;
>> + esac
>> +
>> + for selector
>> + do
>> + orig_selector=$selector
>> +
>> +
> Unnecessary extra blank line.
Thanks.
> [...]
>> + ;;
>> + *)
>> + if expr "z$selector" : "z[0-9]*[^0-9]" >/dev/null
>> + then
>> + echo "error: $title: test selector should contain" \
>> + "only digits: '$orig_selector'" >&2
>> + exit 1
>> + fi
>> + esac
>> +
>> + # Short cut for "obvious" cases
>> + test -z "$include" && test -z "$positive" && continue
>> + test -n "$include" && test -n "$positive" && continue
>> +
>> + case "$selector" in
>> + -*)
>> + if test $arg -le ${selector#-}
>> + then
>> + include=$positive
>> + fi
>> + ;;
>> + *-)
>> + if test $arg -ge ${selector%-}
>> + then
>> + include=$positive
>> + fi
>> + ;;
>> + *-*)
>> + if test ${selector%%-*} -le $arg \
>> + -a $arg -le ${selector#*-}
> The -a option to 'test' is not portable [1] and is considered obsolete
> by POSIX [2]. Use "test foo && test bar" instead.
>
> [1]: http://www.gnu.org/software/autoconf/manual/autoconf.html#index-g_t_0040command_007btest_007d-1793
> [2]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html
Did not know that. Thanks. Changed it.
It is used a number of times thought:
$ git grep '\<test\>.*-a\>' | wc -l
72
About 10 matches are accidental, but the rest are '-a' uses in 'test'.
>> [...]
Thanks a lot for looking into it :)
next prev parent reply other threads:[~2014-04-30 9:41 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-22 8:19 [RFC/PATCH v3] Better control of the tests run by a test suite Ilya Bobyr
2014-04-22 8:19 ` [PATCH 1/3] test-lib: Document short options in t/README Ilya Bobyr
2014-04-23 18:24 ` Junio C Hamano
2014-04-30 9:38 ` Ilya Bobyr
2014-04-22 8:19 ` [PATCH 2/3] test-lib: tests skipped by GIT_SKIP_TESTS say so Ilya Bobyr
2014-04-22 8:19 ` [PATCH 3/3] test-lib: '--run' to run only specific tests Ilya Bobyr
2014-04-23 18:40 ` Junio C Hamano
2014-04-30 9:40 ` Ilya Bobyr
2014-04-30 14:17 ` Junio C Hamano
2014-04-23 19:51 ` Eric Sunshine
2014-04-30 9:41 ` Ilya Bobyr [this message]
2014-04-30 9:50 ` [RFC/PATCH v4] Better control of the tests run by a test suite Ilya Bobyr
2014-04-30 9:50 ` [PATCH 1/3] test-lib: Document short options in t/README Ilya Bobyr
2014-04-30 9:50 ` [PATCH 2/3] test-lib: tests skipped by GIT_SKIP_TESTS say so Ilya Bobyr
2014-04-30 9:50 ` [PATCH 3/3] test-lib: '--run' to run only specific tests Ilya Bobyr
2014-05-06 20:53 ` Junio C Hamano
2014-05-06 21:02 ` Junio C Hamano
-- strict thread matches above, loose matches on Subject: below --
2014-03-24 8:49 [RFC/PATCH] Better control of the tests run by a test suite Ilya Bobyr
2014-03-24 8:49 ` [PATCH 3/3] test-lib: '--run' to run only specific tests Ilya Bobyr
2014-03-27 10:32 ` [RFC/PATCH v2] Better control of the tests run by a test suite Ilya Bobyr
2014-03-27 10:32 ` [PATCH 3/3] test-lib: '--run' to run only specific tests Ilya Bobyr
2014-03-28 3:36 ` Eric Sunshine
2014-03-28 7:05 ` Ilya Bobyr
2014-03-30 9:41 ` Eric Sunshine
2014-03-31 17:09 ` Junio C Hamano
2014-03-31 19:35 ` David Tran
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=5360C53F.5080909@gmail.com \
--to=ilya.bobyr@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=ramsay@ramsay1.demon.co.uk \
--cc=sunshine@sunshineco.com \
/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 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).