func TestTestPackage(t *testing.T) { gb.Verbose = false defer func() { gb.Verbose = false }() tests := []struct { pkg string testArgs []string ldflags string err error }{ { pkg: "a", err: nil, }, { pkg: "b", err: nil, }, { pkg: "c", err: nil, }, { pkg: "e", err: nil, }, { pkg: "cmd/f", err: nil, }, { pkg: "extest", // test external tests err: nil, }, { pkg: "g", // test that _test files can modify the internal package under test err: nil, }, { pkg: "ldflags", ldflags: "-X ldflags.gitTagInfo banana -X ldflags.gitRevision f7926af2", }, { pkg: "cgotest", }, { pkg: "testflags", testArgs: []string{"-debug"}, }} for _, tt := range tests { ctx := testContext(t, gb.Ldflags(tt.ldflags)) // TODO(dfc) can we resolve the duplication here ? pkg, err := ctx.ResolvePackageWithTests(tt.pkg) if err != nil { t.Errorf("ResolvePackage(%v): want %v, got %v", tt.pkg, tt.err, err) continue } if err := Test(tt.testArgs, pkg); err != tt.err { t.Errorf("Test(%v): want %v, got %v", tt.pkg, tt.err, err) time.Sleep(500 * time.Millisecond) } ctx.Destroy() } }
func main() { args := os.Args if len(args) < 2 || args[1] == "-h" { fs.Usage() os.Exit(1) } name := args[1] if name == "help" { help(args[2:]) return } command, ok := commands[name] if (command != nil && !command.Runnable()) || !ok { if _, err := lookupPlugin(name); err != nil { gb.Errorf("unknown command %q", name) fs.Usage() os.Exit(1) } command = commands["plugin"] } // add extra flags if necessary if command.AddFlags != nil { command.AddFlags(fs) } var err error if command.FlagParse != nil { err = command.FlagParse(fs, args) } else { err = fs.Parse(args[2:]) } if err != nil { gb.Fatalf("could not parse flags: %v", err) } args = fs.Args() // reset args to the leftovers from fs.Parse if command == commands["plugin"] { args = append([]string{name}, args...) } cwd, err := filepath.Abs(cwd) // if cwd was passed in via -R, make sure it is absolute if err != nil { gb.Fatalf("could not make project root absolute: %v", err) } ctx, err := cmd.NewContext( cwd, // project root gb.GcToolchain(), gb.Gcflags(gcflags), gb.Ldflags(ldflags), ) if err != nil { gb.Fatalf("unable to construct context: %v", err) } if command.ParseArgs != nil { args = command.ParseArgs(ctx, ctx.Projectdir(), args) } else { args = cmd.ImportPaths(ctx, ctx.Projectdir(), args) } gb.Debugf("args: %v", args) if err := command.Run(ctx, args); err != nil { gb.Fatalf("command %q failed: %v", name, err) } }