]> Cypherpunks repositories - gostls13.git/commitdiff
flag: make tests silent
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 6 Mar 2022 11:26:11 +0000 (11:26 +0000)
committerDaniel Martí <mvdan@mvdan.cc>
Mon, 7 Mar 2022 09:29:14 +0000 (09:29 +0000)
A few of the tests were printing garbage to stderr,
since FlagSet's default Output is os.Stderr:

$ go test
flag provided but not defined: -x
invalid value "1" for flag -v: test error
Usage of test:
flag needs an argument: -b
Usage of test:
  -b usage
PASS
ok   flag 0.008s

Add the remaining SetOutput(io.Discard) method calls.

Note that TestUserDefinedFunc was a tricky one.
Even with the added SetOutput calls,
the last part of the test would still print usage text to stderr.
It took me a while to figure out the problem was copying FlagSet.
I've filed go.dev/issue/51507 to record this particular sharp edge,
and the test code now avoids making FlagSet copies to avoid the bug.

Change-Id: I323f24091b98386312aa72df3eb890af6625628d
Reviewed-on: https://go-review.googlesource.com/c/go/+/390234
Trust: Daniel Martí <mvdan@mvdan.cc>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/flag/export_test.go
src/flag/flag_test.go

index 838cfaf6a4c8997c511faf5a678879d06808a1e7..9ef93ed6c5be1d0ea9949a150b7e92e6b3d59d44 100644 (file)
@@ -4,7 +4,10 @@
 
 package flag
 
-import "os"
+import (
+       "io"
+       "os"
+)
 
 // Additional routines compiled into the package only during testing.
 
@@ -15,6 +18,7 @@ var DefaultUsage = Usage
 // exit the program.
 func ResetForTesting(usage func()) {
        CommandLine = NewFlagSet(os.Args[0], ContinueOnError)
+       CommandLine.SetOutput(io.Discard)
        CommandLine.Usage = commandLineUsage
        Usage = usage
 }
index 5835fcf22cd7a9ff2c1eddfc3980d92cd7d5c13b..d5c443d3c660d3f8cd89e7314e171790240e30af 100644 (file)
@@ -246,6 +246,7 @@ func (f *flagVar) Set(value string) error {
 func TestUserDefined(t *testing.T) {
        var flags FlagSet
        flags.Init("test", ContinueOnError)
+       flags.SetOutput(io.Discard)
        var v flagVar
        flags.Var(&v, "v", "usage")
        if err := flags.Parse([]string{"-v", "1", "-v", "2", "-v=3"}); err != nil {
@@ -261,8 +262,8 @@ func TestUserDefined(t *testing.T) {
 }
 
 func TestUserDefinedFunc(t *testing.T) {
-       var flags FlagSet
-       flags.Init("test", ContinueOnError)
+       flags := NewFlagSet("test", ContinueOnError)
+       flags.SetOutput(io.Discard)
        var ss []string
        flags.Func("v", "usage", func(s string) error {
                ss = append(ss, s)
@@ -286,7 +287,8 @@ func TestUserDefinedFunc(t *testing.T) {
                t.Errorf("usage string not included: %q", usage)
        }
        // test Func error
-       flags = *NewFlagSet("test", ContinueOnError)
+       flags = NewFlagSet("test", ContinueOnError)
+       flags.SetOutput(io.Discard)
        flags.Func("v", "usage", func(s string) error {
                return fmt.Errorf("test error")
        })
@@ -335,6 +337,7 @@ func (b *boolFlagVar) IsBoolFlag() bool {
 func TestUserDefinedBool(t *testing.T) {
        var flags FlagSet
        flags.Init("test", ContinueOnError)
+       flags.SetOutput(io.Discard)
        var b boolFlagVar
        var err error
        flags.Var(&b, "b", "usage")