github.com/blugnu/test-report@v0.1.3/opts.go (about) 1 package main 2 3 import ( 4 "flag" 5 "os" 6 ) 7 8 // parseFlags if a variable function that parses the command line arguments. 9 // This is a variable so that it can be replaced in tests to avoid side effects. 10 var parseFlags = func(f *flag.FlagSet, args []string) error { 11 return f.Parse(args) 12 } 13 14 // opts is a struct that implements a parser for the program options. 15 type opts struct{} 16 17 // parse is a method that parses the command line arguments and returns the 18 // appropriate command to run (if any). 19 func (o *opts) parse() (interface{ run(*opts) }, error) { 20 var ( 21 of string = "test-report.md" 22 rm reportMode = rmFailedTests 23 rt string = "Test Report" 24 25 opts = struct { 26 h, help bool 27 f, full bool 28 o, output string 29 s, summary bool 30 t, title string 31 }{} 32 ) 33 34 if len(os.Args) > 1 { 35 if os.Args[1] == "version" { 36 return showVersion{}, nil 37 } 38 39 flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError) 40 flags.BoolVar(&opts.f, "f", false, "complete test report") 41 flags.BoolVar(&opts.full, "full", false, "") 42 flags.BoolVar(&opts.h, "h", false, "display help on usage") 43 flags.BoolVar(&opts.help, "help", false, "") 44 flags.StringVar(&opts.o, "o", "", "output filename") 45 flags.StringVar(&opts.output, "output", "", "") 46 flags.BoolVar(&opts.s, "s", false, "summary only") 47 flags.BoolVar(&opts.summary, "summary", false, "") 48 flags.StringVar(&opts.t, "t", "", "report title") 49 flags.StringVar(&opts.title, "title", "", "") 50 if err := parseFlags(flags, os.Args[1:]); err != nil { 51 return nil, err 52 } 53 54 switch { 55 case opts.o != "": 56 of = opts.o 57 case opts.output != "": 58 of = opts.output 59 } 60 61 switch { 62 case opts.t != "": 63 rt = opts.t 64 case opts.title != "": 65 rt = opts.title 66 } 67 68 switch { 69 case opts.f || opts.full: 70 rm = rmAllTests 71 case opts.s || opts.summary: 72 rm = rmSummaryOnly 73 } 74 } 75 76 switch { 77 case opts.h || opts.help: 78 return showUsage{}, nil 79 80 default: 81 return generateReport{ 82 filename: of, 83 title: rt, 84 mode: rm, 85 }, nil 86 } 87 }