func buildTestMain(pkg *gb.Package) (*gb.Package, error) { if pkg.Scope != "test" { return nil, fmt.Errorf("package %q is not test scoped", pkg.Name) } dir := pkg.Objdir() if err := mkdir(dir); err != nil { return nil, fmt.Errorf("buildTestmain: %v", err) } tests, err := loadTestFuncs(pkg.Package) if err != nil { return nil, err } if len(pkg.Package.XTestGoFiles) > 0 { // if there are external tests ensure that we import the // test package into the final binary for side effects. tests.ImportXtest = true } if err := writeTestmain(filepath.Join(dir, "_testmain.go"), tests); err != nil { return nil, err } testmain := gb.NewPackage(pkg.Context, &build.Package{ Name: pkg.Name, ImportPath: path.Join(pkg.ImportPath, "testmain"), Dir: dir, SrcRoot: pkg.SrcRoot, GoFiles: []string{"_testmain.go"}, Imports: pkg.Package.Imports, }) testmain.Scope = "test" testmain.ExtraIncludes = filepath.Join(pkg.Workdir(), filepath.FromSlash(pkg.ImportPath), "_test") return testmain, nil }