git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: phillip.wood@dunelm.org.uk
Cc: git@vger.kernel.org, "René Scharfe" <l.s.r@web.de>,
	"Junio C Hamano" <gitster@pobox.com>,
	"Kyle Lippincott" <spectral@google.com>,
	"Josh Steadmon" <steadmon@google.com>,
	rsbecker@nexbridge.com,
	"Edward Thomson" <ethomson@edwardthomson.com>,
	"Johannes Schindelin" <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH v7 11/14] t/unit-tests: implement test driver
Date: Wed, 4 Sep 2024 16:12:05 +0200	[thread overview]
Message-ID: <ZthqtWVntB-PgSH-@pks.im> (raw)
In-Reply-To: <e435e05a-376c-4928-9852-6925df855399@gmail.com>

On Wed, Sep 04, 2024 at 02:35:20PM +0100, Phillip Wood wrote:
> Hi Patrick
> 
> On 03/09/2024 10:15, Patrick Steinhardt wrote:
> > The test driver in "unit-test.c" is responsible for setting up our unit
> > tests and eventually running them. As such, it is also responsible for
> > parsing the command line arguments.
> > 
> > The clar unit testing framework provides function `clar_test()` that
> > parses command line arguments and then executes the tests for us. In
> > theory that would already be sufficient. We have the special requirement
> > to always generate TAP-formatted output though, so we'd have to always
> > pass the "-t" argument to clar. Furthermore, some of the options exposed
> > by clar are ineffective when "-t" is used, but they would still be shown
> > when the user passes the "-h" parameter to have the clar show its usage.
> > 
> > Implement our own option handling instead of using the one provided by
> > clar, which gives us greater flexibility in how exactly we set things
> > up.
> 
> That makes sense
> 
> > We would ideally not use any "normal" code of ours for this such that
> > the unit testing framework doesn't depend on it working correctly. But
> > it is somewhat dubious whether we really want to reimplement all of the
> > option parsing. So for now, let's be pragmatic and reuse it until we
> > find a good reason in the future why we'd really want to avoid it.
> 
> I think that's fine for now. Using parse_options() gives a much nicer user
> experience than clar_test() as it supports long options and has more
> flexible support for option arguments. I'd expect the code that implements
> "struct string_list" and "struct strvec" to be pretty stable so its probably
> safe to rely on those.
> 
> Given there's only a couple of options it wouldn't be too bad to implement
> the parsing ourselves if we have to in the future. We might need to do that
> to support the libification work as I suspect we wont want to link tests for
> other libraries against libgit.a.
> 
> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
> >   t/unit-tests/unit-test.c | 43 ++++++++++++++++++++++++++++++++++++++--
> >   1 file changed, 41 insertions(+), 2 deletions(-)
> > 
> > diff --git a/t/unit-tests/unit-test.c b/t/unit-tests/unit-test.c
> > index 3d12cde6dae..96fa64de71d 100644
> > --- a/t/unit-tests/unit-test.c
> > +++ b/t/unit-tests/unit-test.c
> > @@ -1,6 +1,45 @@
> >   #include "unit-test.h"
> > +#include "parse-options.h"
> > +#include "string-list.h"
> > +#include "strvec.h"
> > -int cmd_main(int argc UNUSED, const char **argv UNUSED)
> > +static const char * const unit_test_usage[] = {
> > +	N_("unit-test [<options>]"),
> > +	NULL,
> > +};
> > +
> > +int cmd_main(int argc, const char **argv)
> >   {
> > -	return 0;
> > +	struct string_list run_args = STRING_LIST_INIT_NODUP;
> > +	struct string_list exclude_args = STRING_LIST_INIT_NODUP;
> > +	int immediate = 0;
> > +	struct option options[] = {
> > +		OPT_BOOL('i', "--immediate", &immediate,
> > +			 N_("immediately exit upon the first failed test")),
> 
> This is unused. If we want to to behave like the "--immediate" option of our
> integration tests that's  hard to implement by wrapping clar_test() which
> requires "-i<suite>". The simplest thing would be to just drop it for now.
> Otherwise as the most likely use for "-i" is manually testing some tests in
> a suite we could require "--run" with "-i". Then we would have one or more
> suite names which we can append to "-i" when passing it to clar_test().
> Alternatively we could include "clar.suite" and wade through all the test
> suite names ourselves to construct a suitable list of "-i" options to pass
> to clar_test() but that would probably mean we have to parse the excludes as
> well which makes it all a bit of a faff.

Oh, that's a plain oversight on my side. It is easy to wire up given
that the clar already supports it via "-Q". Also made me notice that I
wrote "--immediate" instead of "immediate".

> > +		OPT_STRING_LIST('r', "run", &run_args, N_("name"),
> > +				N_("run only test suite or individual test <name>")),
> 
> It's nice that this option name now matches our integration tests. It would
> be helpful to show the syntax for "name" (I think it expects
> <suite>[::<test>]) but I failed to come up with a concise description to add
> to the help here.

Isn't `<suite[::test]>` concise enough? I certainly like it.

Patrick

  reply	other threads:[~2024-09-04 14:12 UTC|newest]

Thread overview: 172+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-31  9:04 [RFC PATCH 0/3] Introduce clar testing framework Patrick Steinhardt
2024-07-31  9:04 ` [RFC PATCH 1/3] t: import the clar unit " Patrick Steinhardt
2024-07-31 18:27   ` Josh Steadmon
2024-07-31 19:36     ` Junio C Hamano
2024-08-01  9:32       ` Patrick Steinhardt
2024-07-31 20:04     ` rsbecker
2024-08-01  9:31       ` Patrick Steinhardt
2024-08-01 12:15         ` rsbecker
2024-08-01 12:54           ` rsbecker
2024-08-01 13:37             ` Patrick Steinhardt
2024-08-01 13:47               ` rsbecker
2024-08-01 13:50                 ` Patrick Steinhardt
2024-08-01 13:53                   ` rsbecker
2024-08-01 13:55                     ` Patrick Steinhardt
2024-08-01 14:04                       ` rsbecker
2024-08-01 14:43                         ` Patrick Steinhardt
2024-08-01 16:31                           ` rsbecker
2024-08-01 17:06                           ` rsbecker
2024-08-01 17:43                           ` [RFC PATCH 1/3] t: import the clar unit testing framework (better one) rsbecker
2024-08-01 18:12                             ` René Scharfe
2024-08-01 18:33                               ` rsbecker
2024-07-31  9:04 ` [RFC PATCH 2/3] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-07-31 16:48   ` René Scharfe
2024-08-01  9:32     ` Patrick Steinhardt
2024-07-31 17:01   ` Junio C Hamano
2024-07-31 21:39     ` Junio C Hamano
2024-08-01  9:32       ` Patrick Steinhardt
2024-07-31  9:04 ` [RFC PATCH 3/3] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-07-31 15:51 ` [RFC PATCH 0/3] Introduce clar testing framework Junio C Hamano
2024-07-31 15:56   ` rsbecker
2024-07-31 16:52     ` Junio C Hamano
2024-07-31 20:25       ` rsbecker
2024-07-31 20:37         ` rsbecker
2024-08-01  9:31           ` Patrick Steinhardt
2024-08-01  9:31   ` Patrick Steinhardt
2024-07-31 18:33 ` Josh Steadmon
2024-08-01  9:31   ` Patrick Steinhardt
2024-08-06 14:14 ` [RFC PATCH v2 0/7] " Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 1/7] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 2/7] t: import the clar unit testing framework Patrick Steinhardt
2024-08-06 22:18     ` Josh Steadmon
2024-08-07  5:52       ` Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 3/7] t/clar: fix whitespace errors Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 4/7] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 5/7] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 6/7] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-06 23:05     ` Josh Steadmon
2024-08-07  5:52       ` Patrick Steinhardt
2024-08-06 14:15   ` [RFC PATCH v2 7/7] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-08  5:38 ` [RFC PATCH v3 0/7] Introduce clar testing framework Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 1/7] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 2/7] t: import the clar unit testing framework Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 3/7] t/clar: fix whitespace errors Patrick Steinhardt
2024-08-13 15:25     ` Junio C Hamano
2024-08-13 15:31       ` rsbecker
2024-08-13 18:43         ` Junio C Hamano
2024-08-13 19:14           ` rsbecker
2024-08-13 20:42       ` Junio C Hamano
2024-08-14  5:58         ` Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 4/7] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 5/7] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 6/7] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 7/7] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-12 18:10   ` [RFC PATCH v3 0/7] Introduce clar testing framework Josh Steadmon
2024-08-12 18:13     ` rsbecker
2024-08-12 20:50     ` Junio C Hamano
2024-08-12 20:58       ` rsbecker
2024-08-12 22:13         ` Junio C Hamano
2024-08-13  7:23           ` Patrick Steinhardt
2024-08-15  9:47 ` [PATCH v4 " Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 1/7] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 2/7] t: import the clar unit testing framework Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 3/7] t/clar: fix whitespace errors Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 4/7] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 5/7] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 6/7] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 7/7] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-15 16:21   ` [PATCH v4 0/7] Introduce clar testing framework Junio C Hamano
2024-08-16  5:10     ` Patrick Steinhardt
2024-08-16  7:04 ` [PATCH v5 0/9] " Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 1/9] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 2/9] t: import the clar unit testing framework Patrick Steinhardt
2024-08-16 13:37     ` Phillip Wood
2024-08-23 12:16       ` Johannes Schindelin
2024-08-28 13:20         ` Phillip Wood
2024-08-19 21:21     ` Junio C Hamano
2024-08-19 21:50       ` rsbecker
2024-08-19 22:13         ` Junio C Hamano
2024-08-19 22:38           ` rsbecker
2024-08-20 12:59       ` Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 3/9] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 4/9] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 5/9] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 6/9] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 7/9] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 8/9] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-16 13:38     ` Phillip Wood
2024-08-16 16:11       ` Junio C Hamano
2024-08-20 12:59         ` Patrick Steinhardt
2024-08-16  7:05   ` [PATCH v5 9/9] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-16 13:38     ` Phillip Wood
2024-08-20 12:59       ` Patrick Steinhardt
2024-08-18  6:39     ` Junio C Hamano
2024-08-16 13:37   ` [PATCH v5 0/9] Introduce clar testing framework Phillip Wood
2024-08-20 12:59     ` Patrick Steinhardt
2024-08-28 15:15       ` phillip.wood123
2024-08-20 14:02 ` [PATCH v6 00/13] " Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 01/13] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 02/13] t: import the clar unit testing framework Patrick Steinhardt
2024-08-28 13:16     ` Phillip Wood
2024-09-03  7:45       ` Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 03/13] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 04/13] clar: avoid compile error with mingw-w64 Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 05/13] clar(win32): avoid compile error due to unused `fs_copy()` Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 06/13] clar: stop including `shellapi.h` unnecessarily Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 07/13] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 08/13] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 09/13] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 10/13] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 11/13] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-28 13:17     ` Phillip Wood
2024-09-03  7:45       ` Patrick Steinhardt
2024-09-03  9:48         ` phillip.wood123
2024-09-04  6:37           ` Patrick Steinhardt
2024-09-04  9:31             ` phillip.wood123
2024-08-20 14:02   ` [PATCH v6 12/13] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-28 13:18     ` Phillip Wood
2024-09-03  7:45       ` Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 13/13] clar: add CMake support Patrick Steinhardt
2024-08-28 13:18   ` [PATCH v6 00/13] Introduce clar testing framework Phillip Wood
2024-08-28 14:03     ` Patrick Steinhardt
2024-08-28 14:58       ` phillip.wood123
2024-09-03  9:14 ` [PATCH v7 00/14] " Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 01/14] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 02/14] t: import the clar unit testing framework Patrick Steinhardt
2024-09-03  9:47     ` Eric Sunshine
2024-09-04  6:38       ` Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 03/14] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 04/14] clar: avoid compile error with mingw-w64 Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 05/14] clar(win32): avoid compile error due to unused `fs_copy()` Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 06/14] clar: stop including `shellapi.h` unnecessarily Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 07/14] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 08/14] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 09/14] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 10/14] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 11/14] t/unit-tests: implement test driver Patrick Steinhardt
2024-09-04 13:35     ` Phillip Wood
2024-09-04 14:12       ` Patrick Steinhardt [this message]
2024-09-04 14:35         ` phillip.wood123
2024-09-03  9:15   ` [PATCH v7 12/14] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 13/14] t/unit-tests: convert ctype " Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 14/14] clar: add CMake support Patrick Steinhardt
2024-09-04 13:35   ` [PATCH v7 00/14] Introduce clar testing framework Phillip Wood
2024-09-04 14:12     ` Patrick Steinhardt
2024-09-04 14:16 ` [PATCH v8 " Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 01/14] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 02/14] t: import the clar unit testing framework Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 03/14] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 04/14] clar: avoid compile error with mingw-w64 Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 05/14] clar(win32): avoid compile error due to unused `fs_copy()` Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 06/14] clar: stop including `shellapi.h` unnecessarily Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 07/14] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 08/14] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 09/14] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 10/14] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-09-09 18:17     ` Junio C Hamano
2024-09-10  6:20       ` Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 11/14] t/unit-tests: implement test driver Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 12/14] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 13/14] t/unit-tests: convert ctype " Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 14/14] clar: add CMake support Patrick Steinhardt
2024-09-04 14:32   ` [PATCH v8 00/14] Introduce clar testing framework phillip.wood123

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=ZthqtWVntB-PgSH-@pks.im \
    --to=ps@pks.im \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=ethomson@edwardthomson.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=l.s.r@web.de \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=rsbecker@nexbridge.com \
    --cc=spectral@google.com \
    --cc=steadmon@google.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).