| // Copyright 2017 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package testing |
| |
| import ( |
| "bytes" |
| "regexp" |
| "strings" |
| ) |
| |
| func TestTBHelper(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", testHelper) |
| |
| want := `--- FAIL: Test (?s) |
| helperfuncs_test.go:12: 0 |
| helperfuncs_test.go:33: 1 |
| helperfuncs_test.go:21: 2 |
| helperfuncs_test.go:35: 3 |
| helperfuncs_test.go:42: 4 |
| --- FAIL: Test/sub (?s) |
| helperfuncs_test.go:45: 5 |
| helperfuncs_test.go:21: 6 |
| helperfuncs_test.go:44: 7 |
| helperfuncs_test.go:56: 8 |
| helperfuncs_test.go:64: 9 |
| helperfuncs_test.go:60: 10 |
| ` |
| lines := strings.Split(buf.String(), "\n") |
| durationRE := regexp.MustCompile(`\(.*\)$`) |
| for i, line := range lines { |
| line = strings.TrimSpace(line) |
| line = durationRE.ReplaceAllString(line, "(?s)") |
| lines[i] = line |
| } |
| got := strings.Join(lines, "\n") |
| if got != want { |
| t.Errorf("got output:\n\n%s\nwant:\n\n%s", got, want) |
| } |
| } |
| |
| func TestTBHelperParallel(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", parallelTestHelper) |
| |
| lines := strings.Split(strings.TrimSpace(buf.String()), "\n") |
| if len(lines) != 6 { |
| t.Fatalf("parallelTestHelper gave %d lines of output; want 6", len(lines)) |
| } |
| want := "helperfuncs_test.go:21: parallel" |
| if got := strings.TrimSpace(lines[1]); got != want { |
| t.Errorf("got output line %q; want %q", got, want) |
| } |
| } |
| |
| type noopWriter int |
| |
| func (nw *noopWriter) Write(b []byte) (int, error) { return len(b), nil } |
| |
| func BenchmarkTBHelper(b *B) { |
| w := noopWriter(0) |
| ctx := newTestContext(1, newMatcher(regexp.MatchString, "", "")) |
| t1 := &T{ |
| common: common{ |
| signal: make(chan bool), |
| w: &w, |
| }, |
| context: ctx, |
| } |
| f1 := func() { |
| t1.Helper() |
| } |
| f2 := func() { |
| t1.Helper() |
| } |
| b.ResetTimer() |
| b.ReportAllocs() |
| for i := 0; i < b.N; i++ { |
| if i&1 == 0 { |
| f1() |
| } else { |
| f2() |
| } |
| } |
| } |