testexec: quote error from child; attribution better via more t.Helper.
commit a217051880653c6144c1ba668cb7cc4b17137d5c · parent a56e7c3c7a
· browse this tree
Eric Myhre, 2021-10-20 08:37:55 UTC
The line reported from t.Fail should now be the line in your code where you called into testexec -- not some line within the testexec code. The error being quoted reads better, is my practical experience. It's from a whole different context, so quoting makes sense.
diff --git a/testexec/testexec.go b/testexec/testexec.go index 88bbd04..f59ddb2 100644 --- a/testexec/testexec.go +++ b/testexec/testexec.go @@ -140,14 +140,17 @@ func (tcfg *Tester) init() { // As an edge case, note that if that an exitcode hunk is absent, but a nonzero exitcode is encountered, // the test will still be failed, even though in patch regen mode most assertions are usually skipped. func (tcfg Tester) TestSequence(t *testing.T, data testmark.DirEnt) { + t.Helper() tcfg.test(t, data, true, false) } func (tcfg Tester) TestScript(t *testing.T, data testmark.DirEnt) { + t.Helper() tcfg.test(t, data, false, true) } func (tcfg Tester) Test(t *testing.T, data testmark.DirEnt) { + t.Helper() tcfg.test(t, data, true, true) } @@ -275,6 +278,7 @@ func (tcfg Tester) test(t *testing.T, data testmark.DirEnt, allowExec, allowScri } func (tcfg Tester) doSequence(t *testing.T, hunk *testmark.Hunk, stdout, stderr io.Writer) (exitcode int) { + t.Helper() // Loop over the lines in the sequence. lines := bytes.Split(hunk.Body, []byte{'\n'}) for _, line := range lines { @@ -286,7 +290,7 @@ func (tcfg Tester) doSequence(t *testing.T, hunk *testmark.Hunk, stdout, stderr var err error exitcode, err = tcfg.ExecFn(args, bytes.NewReader(nil), stdout, stderr) if err != nil { - t.Fatalf("execution failed: %s", err) + t.Fatalf("execution failed: error from ExecFn is %q", err) } if exitcode != 0 { break // TODO: it's probably still an error if that happens before the end? @@ -296,10 +300,11 @@ func (tcfg Tester) doSequence(t *testing.T, hunk *testmark.Hunk, stdout, stderr } func (tcfg Tester) doScript(t *testing.T, hunk *testmark.Hunk, stdout, stderr io.Writer) (exitcode int) { + t.Helper() var err error exitcode, err = tcfg.ScriptFn(string(hunk.Body), bytes.NewReader(nil), stdout, stderr) if err != nil { - t.Fatalf("execution failed: %s", err) + t.Fatalf("execution failed: error from script is %q", err) } return }