tinyyarn

scenario testing of Unix command line tools
Log | Files | Refs | README | LICENSE

commit 3f9cd8512da191a6b5329bedfb17e839dcc13c5e
parent b13d103099ea0abf93b047610aa72cc9563378d6
Author: Richard Ipsum <richardipsum@fastmail.co.uk>
Date:   Sat, 22 Jun 2019 22:49:09 +0100

Add options to show test's stdout/stderr messages

Diffstat:
Mtyarn.1 | 6++++++
Mtyarn.c | 16+++++++++++++++-
Mtyarn.in | 6++++++
3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/tyarn.1 b/tyarn.1 @@ -106,5 +106,11 @@ Use DIR as temporary directory for tests, DIR is a template e.g. /tmp/foo.XXXXXX .TP .BR \-v Show verbose messages +.TP +.BR \-1 +Display any messages printed to stdout during execution of scenario steps +.TP +.BR \-2 +Display any messages printed to stderr during execution of scenario steps .SH "SEE ALSO" yarn(1) diff --git a/tyarn.c b/tyarn.c @@ -353,6 +353,8 @@ static void help(void) " (this argument can be repeated to add multiple variables)\n" " -h This help message\n" " -l SHELL_LIBRARY\n" + " -1 Show any messages printed to stdout during execution of scenario steps\n" + " -2 Show any messages printed to stderr during execution of scenario steps\n" " Shell library to be used by scenario implementations\n" " -s SHELL Execute scenario implementations using SHELL\n" " -t DIR\n" @@ -388,6 +390,8 @@ static int tyarn_parse_args(lua_State *L) char *shell = NULL; char *envopts[8192]; size_t envoptsn = 0; + bool show_stdout = false; + bool show_stderr = false; luaL_checktype(L, 1, LUA_TTABLE); @@ -411,8 +415,14 @@ static int tyarn_parse_args(lua_State *L) buf[bufn++] = strdup(args[i]); } - while ((c = getopt(bufn, buf, ":l:s:dECht:e:v")) != -1) { + while ((c = getopt(bufn, buf, ":12l:s:dECht:e:v")) != -1) { switch (c) { + case '1': + show_stdout = true; + break; + case '2': + show_stderr = true; + break; case 'C': no_cleanup = true; break; @@ -466,6 +476,10 @@ static int tyarn_parse_args(lua_State *L) lua_setfield(L, -2, "verbose"); lua_pushstring(L, shell); lua_setfield(L, -2, "shell"); + lua_pushboolean(L, show_stdout); + lua_setfield(L, -2, "show_stdout"); + lua_pushboolean(L, show_stderr); + lua_setfield(L, -2, "show_stderr"); int tn = 1; for (int i = optind; i < bufn; i++) { diff --git a/tyarn.in b/tyarn.in @@ -282,6 +282,12 @@ function run_step(scenario_dir, datadir, implementations, scenario_key, step, sh cmd = {"/usr/bin/env", parsed_args["shell"] or DEFAULT_SHELL, path} ret, exit_code, stdout, stderr = tyarn.exec(cmd, env, datadir) + if parsed_args["show_stdout"] and string.len(stdout) > 0 then + io.stderr:write("STDOUT:\n" .. stdout) + end + if parsed_args["show_stderr"] and string.len(stderr) > 0 then + io.stderr:write("STDERR:\n" .. stderr) + end debug('ret', ret, 'exit_code', exit_code) if ret == -1 then error(string.format("Failed to exec step: %s", impl_step))