Source file
src/testing/helper_test.go
Documentation: testing
1
2
3
4
5 package testing
6
7 import (
8 "bytes"
9 "regexp"
10 "strings"
11 )
12
13 func TestTBHelper(t *T) {
14 var buf bytes.Buffer
15 ctx := newTestContext(1, newMatcher(regexp.MatchString, "", ""))
16 t1 := &T{
17 common: common{
18 signal: make(chan bool),
19 w: &buf,
20 },
21 context: ctx,
22 }
23 t1.Run("Test", testHelper)
24
25 want := `--- FAIL: Test (?s)
26 helperfuncs_test.go:12: 0
27 helperfuncs_test.go:33: 1
28 helperfuncs_test.go:21: 2
29 helperfuncs_test.go:35: 3
30 helperfuncs_test.go:42: 4
31 --- FAIL: Test/sub (?s)
32 helperfuncs_test.go:45: 5
33 helperfuncs_test.go:21: 6
34 helperfuncs_test.go:44: 7
35 helperfuncs_test.go:56: 8
36 helperfuncs_test.go:64: 9
37 helperfuncs_test.go:60: 10
38 `
39 lines := strings.Split(buf.String(), "\n")
40 durationRE := regexp.MustCompile(`\(.*\)$`)
41 for i, line := range lines {
42 line = strings.TrimSpace(line)
43 line = durationRE.ReplaceAllString(line, "(?s)")
44 lines[i] = line
45 }
46 got := strings.Join(lines, "\n")
47 if got != want {
48 t.Errorf("got output:\n\n%s\nwant:\n\n%s", got, want)
49 }
50 }
51
52 func TestTBHelperParallel(t *T) {
53 var buf bytes.Buffer
54 ctx := newTestContext(1, newMatcher(regexp.MatchString, "", ""))
55 t1 := &T{
56 common: common{
57 signal: make(chan bool),
58 w: &buf,
59 },
60 context: ctx,
61 }
62 t1.Run("Test", parallelTestHelper)
63
64 lines := strings.Split(strings.TrimSpace(buf.String()), "\n")
65 if len(lines) != 6 {
66 t.Fatalf("parallelTestHelper gave %d lines of output; want 6", len(lines))
67 }
68 want := "helperfuncs_test.go:21: parallel"
69 if got := strings.TrimSpace(lines[1]); got != want {
70 t.Errorf("got output line %q; want %q", got, want)
71 }
72 }
73
74 func TestTBHelperLineNumer(t *T) {
75 var buf bytes.Buffer
76 ctx := newTestContext(1, newMatcher(regexp.MatchString, "", ""))
77 t1 := &T{
78 common: common{
79 signal: make(chan bool),
80 w: &buf,
81 },
82 context: ctx,
83 }
84 t1.Run("Test", func(t *T) {
85 helperA := func(t *T) {
86 t.Helper()
87 t.Run("subtest", func(t *T) {
88 t.Helper()
89 t.Fatal("fatal error message")
90 })
91 }
92 helperA(t)
93 })
94
95 want := "helper_test.go:92: fatal error message"
96 got := ""
97 lines := strings.Split(strings.TrimSpace(buf.String()), "\n")
98 if len(lines) > 0 {
99 got = strings.TrimSpace(lines[len(lines)-1])
100 }
101 if got != want {
102 t.Errorf("got output:\n\n%v\nwant:\n\n%v", got, want)
103 }
104 }
105
106 type noopWriter int
107
108 func (nw *noopWriter) Write(b []byte) (int, error) { return len(b), nil }
109
110 func BenchmarkTBHelper(b *B) {
111 w := noopWriter(0)
112 ctx := newTestContext(1, newMatcher(regexp.MatchString, "", ""))
113 t1 := &T{
114 common: common{
115 signal: make(chan bool),
116 w: &w,
117 },
118 context: ctx,
119 }
120 f1 := func() {
121 t1.Helper()
122 }
123 f2 := func() {
124 t1.Helper()
125 }
126 b.ResetTimer()
127 b.ReportAllocs()
128 for i := 0; i < b.N; i++ {
129 if i&1 == 0 {
130 f1()
131 } else {
132 f2()
133 }
134 }
135 }
136
View as plain text