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  }