git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/3] test-lib: '--run' to run only specific tests

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 23, 2014, 18:40 UTC
Message-ID
<xmqqlhuvzy6r.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1398154767-1276-4-git-send-email-ilya.bobyr@gmail.com>
Ilya Bobyr <ilya.bobyr@gmail.com> writes:
Show 44 quoted lines
> @@ -187,10 +192,70 @@ and either can match the "t[0-9]{4}" part to skip the whole
>  test, or t[0-9]{4} followed by ".$number" to say which
>  particular test to skip.
>  
> -Note that some tests in the existing test suite rely on previous
> -test item, so you cannot arbitrarily disable one and expect the
> -remainder of test to check what the test originally was intended
> -to check.
> +For an individual test suite --run could be used to specify that
> +only some tests should be run or that some tests should be
> +excluded from a run.
> +
> +The argument for --run is a list of individual test numbers or
> +ranges with an optional negation prefix that define what tests in
> +a test suite to include in the run.  A range is two numbers
> +separated with a dash and matches a range of tests with both ends
> +been included.  You may omit the first or the second number to
> +mean "from the first test" or "up to the very last test"
> +respectively.
> +
> +Optional prefix of '!' means that the test or a range of tests
> +should be excluded from the run.
> +
> +If --run starts with an unprefixed number or range the initial
> +set of tests to run is empty. If the first item starts with '!'
> +all the tests are added to the initial set.  After initial set is
> +determined every test number or range is added or excluded from
> +the set one by one, from left to right.
> +
> +Individual numbers or ranges could be separated either by a space
> +or a comma.
> +
> +For example, common case is to run several setup tests (1, 2, 3)
> +and then a specific test (21) that relies on that setup:
> +
> +    $ sh ./t9200-git-cvsexport-commit.sh --run='1 2 3 21'
> +
> +or:
> +
> +    $ sh ./t9200-git-cvsexport-commit.sh --run=1,2,3,21
> +
> +or:
> +
> +    $ sh ./t9200-git-cvsexport-commit.sh --run='-3 21'
Good and easily understandable examples. 
Show 7 quoted lines
> +To run only tests up to a specific test (21), one could do this:
> +
> +    $ sh ./t9200-git-cvsexport-commit.sh --run='1-21'
> +
> +or this:
> +
> +    $ sh ./t9200-git-cvsexport-commit.sh --run='-21'

These may be redundant, given that the reader would have to have grokked the earlier "-3 21" already at this point.

Show 6 quoted lines
> +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.

I do not quite understand what you mean by "left to right"; is that implementation detail necessary for the user of the feature, or is it talking about some limitation coming from the implementation? e.g. perhaps "!3 1-4" would not work as people would expect "do not run 3, but run tests from 1 thru 4 otherwise", and warning against having such an expectation that cannot be fulfilled?

> +You may use negation with ranges.  The following will run all
> +test as a test suite except from 7 upto 11:
> +
> +    $ sh ./t9200-git-cvsexport-commit.sh --run='!7-11'

Hmm, that is somewhat counter-intuitive or at least ambiguous. I first thought you would be running everything but skipping 7 thru 11, but your explanation is that it is equivalent to "-6,8-11" (that is, to intersect set "-11" and set "!7").

The above two illustrate the reason rather well why I said it would be better to avoid negation because it would complicate the mental model the user needs to form when using the feature.

> +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.

What this text (moved from the top of this hunk) tells the reader applies to both the traditional t0123.4 and the new "--run=1-3,5-" syntaxes, but the new placement of it make it sound as if it is only for skipping with "--run", especially because the text before this paragraph and also after this paragraph both apply only to "--run".

> +--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.

Likewise for "and know what you are doing" part. I'd suggest dropping that phrase from here, and/or make it part of the "you cannot randomly omit and expect later ones to work" that covers both ways to skip tests.

Thanks.
Previous: Ilya BobyrNext: Ilya Bobyr
Message 7 of 17 in “Better control of the tests run by a test suite”
  1. Better control of the tests run by a test suiteIlya Bobyr, Apr 22, 2014
  2. 1/3 test-lib: Document short options in t/READMEIlya Bobyr, Apr 22, 2014
  3. Junio C HamanoApr 23, 2014
  4. Ilya BobyrApr 30, 2014
  5. 2/3 test-lib: tests skipped by GIT_SKIP_TESTS say soIlya Bobyr, Apr 22, 2014
  6. 3/3 test-lib: '--run' to run only specific testsIlya Bobyr, Apr 22, 2014
  7. Junio C HamanoApr 23, 2014
  8. Ilya BobyrApr 30, 2014
  9. Junio C HamanoApr 30, 2014
  10. Eric SunshineApr 23, 2014
  11. Ilya BobyrApr 30, 2014
  12. Better control of the tests run by a test suiteIlya Bobyr, Apr 30, 2014
  13. 1/3 test-lib: Document short options in t/READMEIlya Bobyr, Apr 30, 2014
  14. 2/3 test-lib: tests skipped by GIT_SKIP_TESTS say soIlya Bobyr, Apr 30, 2014
  15. 3/3 test-lib: '--run' to run only specific testsIlya Bobyr, Apr 30, 2014
  16. Junio C HamanoMay 6, 2014
  17. Junio C HamanoMay 6, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.