]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.16] testing: update helperNames just before checking it
authorTao Qingyun <qingyunha@gmail.com>
Thu, 18 Mar 2021 00:10:38 +0000 (00:10 +0000)
committerIan Lance Taylor <iant@golang.org>
Wed, 24 Mar 2021 20:20:01 +0000 (20:20 +0000)
parent's helperNames has not been set when frameSkip called, moving
helperNames initilazing to frameSkip.

For #44887
Fixes #44888

Change-Id: I5107c5951033e5e47d1ac441eac3ba5344a7bdc0
GitHub-Last-Rev: 44b90b2e2eeca8e2bb4a2084ec6fdd279c88f76d
GitHub-Pull-Request: golang/go#45071
Reviewed-on: https://go-review.googlesource.com/c/go/+/302469
Trust: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
(cherry picked from commit 67048432026062a98a3937a865aeb05a398148c5)
Reviewed-on: https://go-review.googlesource.com/c/go/+/303189
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
src/testing/helper_test.go
src/testing/testing.go

index 8858196cf08c9e2e5c7e1661c70da85fae3f3f4a..b27fd62ee8f7182c5c1709f60a1e62908ce051cf 100644 (file)
@@ -71,6 +71,38 @@ func TestTBHelperParallel(t *T) {
        }
 }
 
+func TestTBHelperLineNumer(t *T) {
+       var buf bytes.Buffer
+       ctx := newTestContext(1, newMatcher(regexp.MatchString, "", ""))
+       t1 := &T{
+               common: common{
+                       signal: make(chan bool),
+                       w:      &buf,
+               },
+               context: ctx,
+       }
+       t1.Run("Test", func(t *T) {
+               helperA := func(t *T) {
+                       t.Helper()
+                       t.Run("subtest", func(t *T) {
+                               t.Helper()
+                               t.Fatal("fatal error message")
+                       })
+               }
+               helperA(t)
+       })
+
+       want := "helper_test.go:92: fatal error message"
+       got := ""
+       lines := strings.Split(strings.TrimSpace(buf.String()), "\n")
+       if len(lines) > 0 {
+               got = strings.TrimSpace(lines[len(lines)-1])
+       }
+       if got != want {
+               t.Errorf("got output:\n\n%v\nwant:\n\n%v", got, want)
+       }
+}
+
 type noopWriter int
 
 func (nw *noopWriter) Write(b []byte) (int, error) { return len(b), nil }
index 80354d5ce8390735d7409db722acc0a4079397c4..dec39d24da27b7c7d4987b8393da78c58fe57c45 100644 (file)
@@ -509,6 +509,13 @@ func (c *common) frameSkip(skip int) runtime.Frame {
                        }
                        return prevFrame
                }
+               // If more helper PCs have been added since we last did the conversion
+               if c.helperNames == nil {
+                       c.helperNames = make(map[string]struct{})
+                       for pc := range c.helperPCs {
+                               c.helperNames[pcToName(pc)] = struct{}{}
+                       }
+               }
                if _, ok := c.helperNames[frame.Function]; !ok {
                        // Found a frame that wasn't inside a helper function.
                        return frame
@@ -521,14 +528,6 @@ func (c *common) frameSkip(skip int) runtime.Frame {
 // and inserts the final newline if needed and indentation spaces for formatting.
 // This function must be called with c.mu held.
 func (c *common) decorate(s string, skip int) string {
-       // If more helper PCs have been added since we last did the conversion
-       if c.helperNames == nil {
-               c.helperNames = make(map[string]struct{})
-               for pc := range c.helperPCs {
-                       c.helperNames[pcToName(pc)] = struct{}{}
-               }
-       }
-
        frame := c.frameSkip(skip)
        file := frame.File
        line := frame.Line