atf_check() equivalent to test individual shell functions?

Julio Merino jmmv at
Mon Jul 28 00:01:08 UTC 2014

On Sat, Jul 26, 2014 at 4:30 AM, Fabian Keil
<freebsd-listen at> wrote:
> Here's another zogftw-related problem.

What's zogftw?

> Putting something like this in a test case works as expected:
> | atf_check -s exit:0 -o empty -e empty $ZOGFTW cmd zogftw_string_ends_with "abc" "c"

What is "$ZOGFTW cmd ..." supposed to be doing?

> It would be preferably to source zogftw once at the beginning
> and call the shell function zogftw_string_ends_with() directly
> afterwards to reduce the overhead, though.
> The following sort of does this, but the stdout and stderr
> output isn't verified, it's tedious to write and if nothing
> fails, the "kyua debug" output isn't particular useful:
> | . $ZOGFTW source || atf_fail "Failed to source zogftw"
> |
> | if ! zogftw_string_ends_with "abc" "c"; then
> |     atf_fail "Failed to find 'c' at the end of 'abc'"
> | fi
> The following also sort of works, but in case of errors the output
> isn't helpful (because atf_check_equal() doesn't see the actual
> function) and the stderr output isn't verified either:
> | . $ZOGFTW source || atf_fail "Failed to source zogftw"
> |
> | atf_check_equal $(zogftw_string_ends_with "abc" "c"; echo $?) "0"

Or just:

zogftw_string_ends_with "abc" "c" || atf_fail "abc doesn't end with c"

There is no reason to compare the exit code literally with atf_check_equal.

> What I'm looking for is something like this:
> | atf_check_shell_function -s return:0 -o empty -e empty zogftw_string_ends_with "abc" "c"

That could be interesting.

However, note that atf_check currently is just a thin wrapper over the
atf-check binary and that's the reason why you cannot feed shell
functions into it. Implementing an atf_check_shell_function would
involve rewriting atf-check's functionality in libatf-sh.subr.

> atf-sh-api(3) doesn't seem to mention anything like it,
> so I'm wondering how other people are testing individual
> shell functions?

Take a look at the test programs in here for other ideas:

The background is that atf-sh has been mostly used for integration
testing until now so the support for unit-testing shell functions
hasn't been necessary. I agree that building some would be good.

More information about the freebsd-testing mailing list