On Sat, Apr 16, 2016 at 12:13 PM, Michael Rappazzo <rappazzo@xxxxxxxxx> wrote: > test-lib: add a function to compare an expection with stdout from a command Rather long subject. Perhaps: test-lib: add convenience function to check command output > test_stdout accepts an expection and a command to execute. It will execute > the command and then compare the stdout from that command to an expectation. > If the expectation is not met, a mock diff output is written to stderr. I wonder if this deserves more flexibility by accepting a comparison operator, such as = and !=, similar to test_line_count()? Although, I suppose such functionality could be added later if deemed useful. > Based-on-a-patch-by: Jeff King <peff@xxxxxxxx> Since Peff wrote the actual code[1], it might be worthwhile to give him authorship by prepending the commit message with a "From: Jeff King <peff@xxxxxxxx>" header. > Signed-off-by: Michael Rappazzo <rappazzo@xxxxxxxxx> > --- > diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh > @@ -941,3 +941,37 @@ mingw_read_file_strip_cr_ () { > +# test_stdout is a helper function to compare expected output with > +# the standard output of a command execution > +# > +# Args: > +# 1: The expected output > +# 2: The command to run > +# > +# You can use it like: > +# > +# test_expect_success 'foo works' ' > +# test_cmp "This is expected" cmd_to_run arg1 arg2 ... argN > +# ' test_cmp? > +# The output when there is a mismatch mimics diff output, but this > +# can break down for a multi-line result Hmm, considering that $(...) collapses each whitespace run (including newlines) down to a single space, I don't see how you could get a multi-line result. By the way, either the documentation should mention this limitation ("not possible to check multi-line output") or the implementation should be upgraded to support it. > +test_stdout () { > + expect=$1 > + shift > + if ! actual=$("$@") > + then > + echo "test_stdout: command failed: '$*'" >&2 > + return 1 > + fi > + if test "$expect" != "$actual" > + then > + echo "test_stdout: unexpected output for '$*'" >&2 > + echo "@@ -N +N @@" >&2 > + echo "-$expect" >&2 > + echo "+$actual" >&2 This faux diff output is quite a bit more noisy than the simple error message emitted by Peff's original[1] and it doesn't provide any additional useful information, so it doesn't feel like an improvement. Adding quotes around $expect and $actual in Peff's error message would probably be an improvement, though. > + return 1 > + fi > + return 0 > +} [1]: http://article.gmane.org/gmane.comp.version-control.git/291475 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html