From 175f70547db1e05f9a9ab28e9bb288a4a8ed9b9b Mon Sep 17 00:00:00 2001 From: Toby Hsieh Date: Tue, 4 Jul 2023 02:43:10 -0700 Subject: [PATCH] Fix verbose option in CLI mode (#28) Before, `v` would always be false, so the `-verbose` option never worked. --- main.go | 11 ++++++----- main_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index f6d4b9b..46acd49 100644 --- a/main.go +++ b/main.go @@ -103,7 +103,12 @@ func cliOptions(stdout io.Writer, args []string) (*options, error) { flags.StringVar(&opts.format, "format", "text", "The format of the output: text or markdown") flags.StringVar(&opts.filename, "filename", "CODENOTIFY", "The filename in which file subscribers are defined") flags.IntVar(&opts.subscriberThreshold, "subscriber-threshold", 0, "The threshold of notifying subscribers") - v := *flags.Bool("verbose", false, "Verbose messages printed to stderr") + var v bool + flags.BoolVar(&v, "verbose", false, "Verbose messages printed to stderr") + + if err := flags.Parse(args); err != nil { + return nil, err + } if v { verbose = os.Stderr @@ -111,10 +116,6 @@ func cliOptions(stdout io.Writer, args []string) (*options, error) { verbose = ioutil.Discard } - if err := flags.Parse(args); err != nil { - return nil, err - } - opts.print = func(notifs map[string][]string) error { return opts.writeNotifications(stdout, notifs) } diff --git a/main_test.go b/main_test.go index 855f92d..fc1ca9e 100644 --- a/main_test.go +++ b/main_test.go @@ -3,6 +3,7 @@ package main import ( "bytes" "fmt" + "io" "io/ioutil" "os" "os/exec" @@ -129,6 +130,37 @@ func TestMain(t *testing.T) { } } +func TestCliOptions(t *testing.T) { + var originalVerbose io.Writer = verbose + defer func() { verbose = originalVerbose }() + tests := []struct { + name string + args []string + verbose io.Writer + }{ + { + name: "no arguments", + args: []string{}, + verbose: ioutil.Discard, + }, + { + name: "verbose option", + args: []string{"-verbose"}, + verbose: os.Stderr, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + stdout := &bytes.Buffer{} + cliOptions(stdout, test.args) + if verbose != test.verbose { + t.Errorf("expected verbose to be %v; got %v", test.verbose, verbose) + } + }) + } +} + func TestWriteNotifications(t *testing.T) { tests := []struct { name string