github.com/aca02djr/gb@v0.4.1/cmd/gb/test.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "sort" 8 9 "github.com/constabulary/gb" 10 "github.com/constabulary/gb/cmd" 11 "github.com/constabulary/gb/debug" 12 "github.com/constabulary/gb/test" 13 ) 14 15 func init() { 16 registerCommand(TestCmd) 17 } 18 19 var ( 20 tfs []string // Arguments passed to the test binary 21 testCover bool 22 testCoverMode string 23 testCoverPkg string 24 testVerbose bool // enable verbose output of test commands 25 ) 26 27 func addTestFlags(fs *flag.FlagSet) { 28 addBuildFlags(fs) 29 fs.BoolVar(&testCover, "cover", false, "enable coverage analysis") 30 fs.StringVar(&testCoverMode, "covermode", "set", "Set covermode: set (default), count, atomic") 31 fs.StringVar(&testCoverPkg, "coverpkg", "", "enable coverage analysis") 32 fs.BoolVar(&testVerbose, "v", false, "enable verbose output of subcommands") 33 } 34 35 var TestCmd = &cmd.Command{ 36 Name: "test", 37 UsageLine: "test [build flags] -v [packages] [flags for test binary]", 38 Short: "test packages", 39 Long: ` 40 Test automates testing the packages named by the import paths. 41 42 'gb test' recompiles each package along with any files with names matching 43 the file pattern "*_test.go". 44 45 Flags: 46 47 -v 48 print output from test subprocess. 49 `, 50 Run: func(ctx *gb.Context, args []string) error { 51 ctx.Force = F 52 ctx.Install = !FF 53 ctx.Verbose = testVerbose 54 r := test.TestResolver(ctx) 55 56 // gb build builds packages in dependency order, however 57 // gb test tests packages in alpha order. This matches the 58 // expected behaviour from go test; tests are executed in 59 // stable order. 60 sort.Strings(args) 61 62 pkgs, err := resolveRootPackages(r, args...) 63 if err != nil { 64 return err 65 } 66 67 test, err := test.TestPackages(TestFlags(tfs), pkgs...) 68 if err != nil { 69 return err 70 } 71 72 if dotfile != "" { 73 f, err := os.Create(dotfile) 74 if err != nil { 75 return err 76 } 77 defer f.Close() 78 printActions(f, test) 79 } 80 81 startSigHandlers() 82 return gb.ExecuteConcurrent(test, P, interrupted) 83 }, 84 AddFlags: addTestFlags, 85 FlagParse: func(flags *flag.FlagSet, args []string) error { 86 var err error 87 debug.Debugf("%s", args) 88 args, tfs, err = TestFlagsExtraParse(args[2:]) 89 debug.Debugf("%s %s", args, tfs) 90 if err != nil { 91 fmt.Fprintf(os.Stderr, "gb test: %s\n", err) 92 fmt.Fprintf(os.Stderr, `run "go help test" or "go help testflag" for more information`+"\n") 93 exit(2) 94 } 95 return flags.Parse(args) 96 }, 97 }