testmark-go

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
 }