Re: [PATCH 1/2] test-lib: allow test snippets as here-docs
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Jul 1, 2024, 22:45 UTC
- Message-ID
- <CAPig+cQdioTBinkacLFb7yktm168oB+qyP9MpZtTRE=1aBz5yg@mail.gmail.com>
- In-Reply-To
- <20240701220840.GA20631@coredump.intra.peff.net>
On Mon, Jul 1, 2024 at 6:08 PM Jeff King <peff@peff.net> wrote:
Show 17 quoted lines
> [...] > This commit adds another option: feeding the snippet via the function's > stdin. This doesn't conflict with anything the snippet would want to do, > because we always redirect its stdin from /dev/null anyway (which we'll > continue to do). > > Signed-off-by: Jeff King <peff@peff.net> > --- > diff --git a/t/README b/t/README > @@ -906,6 +906,14 @@ see test-lib-functions.sh for the full list and their options. > + If <script> is `-` (a single dash), then the script to run is read > + from stdin. This lets you more easily use single quotes within the > + script by using a here-doc. For example: > + > + test_expect_success 'output contains expected string' - <<\EOT > + grep "this string has 'quotes' in it" output > + EOT
We lose `chainlint` functionality for test bodies specified in this manner.
Restoring such functionality will require some (possibly) not-so-subtle changes. There are at least a couple issues which need to be addressed:
(1) chainlint.pl:ScriptParser::parse_cmd() only currently recognizes `test_expect_* [prereq] 'title' 'body'` but will now also need to recognize `test_expect_success [prereq] 'title' - <body-as-here-doc>`.
(2) Until now, chainlint.pl has never had to concern itself with the body of a here-doc; it just throws them away. With this new calling convention, here-doc bodies become relevant and must be returned by the lexer. This may involve some not-so-minor surgery.