github.com/aexvir/courtney@v0.3.0/courtney.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"os"
     6  
     7  	"strings"
     8  
     9  	"fmt"
    10  
    11  	"github.com/dave/courtney/scanner"
    12  	"github.com/dave/courtney/shared"
    13  	"github.com/dave/courtney/tester"
    14  	"github.com/dave/patsy"
    15  	"github.com/dave/patsy/vos"
    16  )
    17  
    18  func main() {
    19  	// notest
    20  	env := vos.Os()
    21  
    22  	enforceFlag := flag.Bool("e", false, "Enforce 100% code coverage")
    23  	verboseFlag := flag.Bool("v", false, "Verbose output")
    24  	shortFlag := flag.Bool("short", false, "Pass the short flag to the go test command")
    25  	timeoutFlag := flag.String("timeout", "", "Pass the timeout flag to the go test command")
    26  	outputFlag := flag.String("o", "", "Override coverage file location")
    27  	argsFlag := new(argsValue)
    28  	flag.Var(argsFlag, "t", "Argument to pass to the 'go test' command. Can be used more than once.")
    29  	loadFlag := flag.String("l", "", "Load coverage file(s) instead of running 'go test'")
    30  
    31  	flag.Parse()
    32  
    33  	setup := &shared.Setup{
    34  		Env:      env,
    35  		Paths:    patsy.NewCache(env),
    36  		Enforce:  *enforceFlag,
    37  		Verbose:  *verboseFlag,
    38  		Short:    *shortFlag,
    39  		Timeout:  *timeoutFlag,
    40  		Output:   *outputFlag,
    41  		TestArgs: argsFlag.args,
    42  		Load:     *loadFlag,
    43  	}
    44  	if err := Run(setup); err != nil {
    45  		fmt.Println(err)
    46  		os.Exit(1)
    47  	}
    48  }
    49  
    50  // Run initiates the command with the provided setup
    51  func Run(setup *shared.Setup) error {
    52  
    53  	if err := setup.Parse(flag.Args()); err != nil {
    54  		return err
    55  	}
    56  
    57  	s := scanner.New(setup)
    58  	if err := s.LoadProgram(); err != nil {
    59  		return err
    60  	}
    61  	if err := s.ScanPackages(); err != nil {
    62  		return err
    63  	}
    64  
    65  	t := tester.New(setup)
    66  	if setup.Load == "" {
    67  		if err := t.Test(); err != nil {
    68  			return err
    69  		}
    70  	} else {
    71  		if err := t.Load(); err != nil {
    72  			return err
    73  		}
    74  	}
    75  	if err := t.ProcessExcludes(s.Excludes); err != nil {
    76  		return err
    77  	}
    78  	if err := t.Save(); err != nil {
    79  		return err
    80  	}
    81  	if err := t.Enforce(); err != nil {
    82  		return err
    83  	}
    84  
    85  	return nil
    86  }
    87  
    88  type argsValue struct {
    89  	args []string
    90  }
    91  
    92  var _ flag.Value = (*argsValue)(nil)
    93  
    94  func (v *argsValue) String() string {
    95  	// notest
    96  	if v == nil {
    97  		return ""
    98  	}
    99  	return strings.Join(v.args, " ")
   100  }
   101  func (v *argsValue) Set(s string) error {
   102  	// notest
   103  	v.args = append(v.args, s)
   104  	return nil
   105  }