var pmain, ptest, pxtest *load.Package
var err error
if *listE {
- pmain, ptest, pxtest = load.TestPackagesAndErrors(p, nil)
+ pmain, ptest, pxtest = load.TestPackagesAndErrors(ctx, p, nil)
} else {
- pmain, ptest, pxtest, err = load.TestPackagesFor(p, nil)
+ pmain, ptest, pxtest, err = load.TestPackagesFor(ctx, p, nil)
if err != nil {
base.Errorf("can't load test package: %s", err)
}
import (
"bytes"
- "cmd/go/internal/str"
+ "context"
"errors"
"fmt"
"go/ast"
"strings"
"unicode"
"unicode/utf8"
+
+ "cmd/go/internal/str"
+ "cmd/go/internal/trace"
)
var TestMainDeps = []string{
// TestPackagesFor is like TestPackagesAndErrors but it returns
// an error if the test packages or their dependencies have errors.
// Only test packages without errors are returned.
-func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Package, err error) {
- pmain, ptest, pxtest = TestPackagesAndErrors(p, cover)
+func TestPackagesFor(ctx context.Context, p *Package, cover *TestCover) (pmain, ptest, pxtest *Package, err error) {
+ pmain, ptest, pxtest = TestPackagesAndErrors(ctx, p, cover)
for _, p1 := range []*Package{ptest, pxtest, pmain} {
if p1 == nil {
// pxtest may be nil
//
// The caller is expected to have checked that len(p.TestGoFiles)+len(p.XTestGoFiles) > 0,
// or else there's no point in any of this.
-func TestPackagesAndErrors(p *Package, cover *TestCover) (pmain, ptest, pxtest *Package) {
+func TestPackagesAndErrors(ctx context.Context, p *Package, cover *TestCover) (pmain, ptest, pxtest *Package) {
+ ctx, span := trace.StartSpan(ctx, "load.TestPackagesAndErrors")
+ defer span.Done()
+
pre := newPreload()
defer pre.flush()
allImports := append([]string{}, p.TestImports...)
ensureImport(p, "sync/atomic")
}
- buildTest, runTest, printTest, err := builderTest(&b, p)
+ buildTest, runTest, printTest, err := builderTest(&b, ctx, p)
if err != nil {
str := err.Error()
str = strings.TrimPrefix(str, "\n")
"update",
}
-func builderTest(b *work.Builder, p *load.Package) (buildAction, runAction, printAction *work.Action, err error) {
+func builderTest(b *work.Builder, ctx context.Context, p *load.Package) (buildAction, runAction, printAction *work.Action, err error) {
if len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 {
build := b.CompileAction(work.ModeBuild, work.ModeBuild, p)
run := &work.Action{Mode: "test run", Package: p, Deps: []*work.Action{build}}
DeclVars: declareCoverVars,
}
}
- pmain, ptest, pxtest, err := load.TestPackagesFor(p, cover)
+ pmain, ptest, pxtest, err := load.TestPackagesFor(ctx, p, cover)
if err != nil {
return nil, nil, nil, err
}
root := &work.Action{Mode: "go vet"}
for _, p := range pkgs {
- _, ptest, pxtest, err := load.TestPackagesFor(p, nil)
+ _, ptest, pxtest, err := load.TestPackagesFor(ctx, p, nil)
if err != nil {
base.Errorf("%v", err)
continue