mirror of https://go.googlesource.com/go
117 lines
2.6 KiB
Go
117 lines
2.6 KiB
Go
// 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_test
|
|
|
|
import (
|
|
"internal/testenv"
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestTBHelper(t *testing.T) {
|
|
if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" {
|
|
testTestHelper(t)
|
|
|
|
// Check that calling Helper from inside a top-level test function
|
|
// has no effect.
|
|
t.Helper()
|
|
t.Error("8")
|
|
return
|
|
}
|
|
|
|
testenv.MustHaveExec(t)
|
|
t.Parallel()
|
|
|
|
exe, err := os.Executable()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
cmd := testenv.Command(t, exe, "-test.run=^TestTBHelper$")
|
|
cmd = testenv.CleanCmdEnv(cmd)
|
|
cmd.Env = append(cmd.Env, "GO_WANT_HELPER_PROCESS=1")
|
|
out, _ := cmd.CombinedOutput()
|
|
|
|
want := `--- FAIL: TestTBHelper \([^)]+\)
|
|
helperfuncs_test.go:15: 0
|
|
helperfuncs_test.go:47: 1
|
|
helperfuncs_test.go:24: 2
|
|
helperfuncs_test.go:49: 3
|
|
helperfuncs_test.go:56: 4
|
|
--- FAIL: TestTBHelper/sub \([^)]+\)
|
|
helperfuncs_test.go:59: 5
|
|
helperfuncs_test.go:24: 6
|
|
helperfuncs_test.go:58: 7
|
|
--- FAIL: TestTBHelper/sub2 \([^)]+\)
|
|
helperfuncs_test.go:80: 11
|
|
helperfuncs_test.go:84: recover 12
|
|
helperfuncs_test.go:86: GenericFloat64
|
|
helperfuncs_test.go:87: GenericInt
|
|
helper_test.go:22: 8
|
|
helperfuncs_test.go:73: 9
|
|
helperfuncs_test.go:69: 10
|
|
`
|
|
if !regexp.MustCompile(want).Match(out) {
|
|
t.Errorf("got output:\n\n%s\nwant matching:\n\n%s", out, want)
|
|
}
|
|
}
|
|
|
|
func TestTBHelperParallel(t *testing.T) {
|
|
if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" {
|
|
parallelTestHelper(t)
|
|
return
|
|
}
|
|
|
|
testenv.MustHaveExec(t)
|
|
t.Parallel()
|
|
|
|
exe, err := os.Executable()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
cmd := testenv.Command(t, exe, "-test.run=^TestTBHelperParallel$")
|
|
cmd = testenv.CleanCmdEnv(cmd)
|
|
cmd.Env = append(cmd.Env, "GO_WANT_HELPER_PROCESS=1")
|
|
out, _ := cmd.CombinedOutput()
|
|
|
|
t.Logf("output:\n%s", out)
|
|
|
|
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
|
|
|
// We expect to see one "--- FAIL" line at the start
|
|
// of the log, five lines of "parallel" logging,
|
|
// and a final "FAIL" line at the end of the test.
|
|
const wantLines = 7
|
|
|
|
if len(lines) != wantLines {
|
|
t.Fatalf("parallelTestHelper gave %d lines of output; want %d", len(lines), wantLines)
|
|
}
|
|
want := "helperfuncs_test.go:24: parallel"
|
|
if got := strings.TrimSpace(lines[1]); got != want {
|
|
t.Errorf("got second output line %q; want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func BenchmarkTBHelper(b *testing.B) {
|
|
f1 := func() {
|
|
b.Helper()
|
|
}
|
|
f2 := func() {
|
|
b.Helper()
|
|
}
|
|
b.ResetTimer()
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
if i&1 == 0 {
|
|
f1()
|
|
} else {
|
|
f2()
|
|
}
|
|
}
|
|
}
|