Web lists-archives.com

Re: Do test-path_is_{file,dir,exists} make sense anymore with -x?

On Sun, Mar 03, 2019 at 05:04:59PM +0100, SZEDER Gábor wrote:

> > >   - && chains in test helper functions; we must make sure that the
> > >     tracing is restored even in case of a failure.
> Actually, the && chain is not really an issue, because we can simply
> break the && chain at the very end:
>   test_func () {
>         { disable_tracing ; } 2>/dev/null 4>&2
>         do this &&
>         do that
>         restore_tracing
>   }
> and make restore_tracing exit with $? (like you did above in pop_x()).

Yeah, good point.

> > Yeah, there is no "goto out" to help give a common exit point from the
> > function. You could probably do it with a wrapper, like:
> Yeah, the wrapper works.
> There are only a few test helper functions with multiple 'return'
> statements, and refactoring them to have a single 'return $ret' at the
> end worked, too.

Yeah, that might be less sneaky than this wrapper business. Or we could
just do a few basic wrappers. The non-portable bit in my wrapper
suggestion was the renaming of the old function. But if we accept just:

  real_foo() {
	... do stuff with multiple returns ...
  disable_function_tracing real_foo foo

then that is pretty trivial to do with an eval. It does disallow your
"wrap all functions at once", but I think that is OK. We might want to
only do a subset anyway.

> We should also be careful and don't switch on tracing when returning
> from test helper functions invoked outside of tests, e.g.
> 'test_create_repo' while initializing the trash directory or
> 'test_set_port' while sourcing a daemon-specific lib.

Yeah, it would probably make sense in the "push" half to check that we
are actually tracing at that moment.

> On a mostly unrelated note, but I just noticed it while playing around
> with this: 't0000'-basic.sh' runs its internal tests with $SHELL_PATH
> instead of $TEST_SHELL_PATH.  I'm not sure whether that's right or
> wrong.

I'd say probably wrong, though it likely doesn't matter that much in