aboutsummaryrefslogtreecommitdiff
path: root/src/flag
diff options
context:
space:
mode:
authorDaniel Martí <mvdan@mvdan.cc>2022-03-06 11:26:11 +0000
committerDaniel Martí <mvdan@mvdan.cc>2022-03-07 09:29:14 +0000
commit8893175c3b5267f1eb70c518b5de6f03037c4d03 (patch)
tree0339afb1a54a678dc2365f3cab528e3eec991d50 /src/flag
parent82a65299050cb1146583c72350f841684256bb3c (diff)
downloadgo-8893175c3b5267f1eb70c518b5de6f03037c4d03.tar.gz
go-8893175c3b5267f1eb70c518b5de6f03037c4d03.zip
flag: make tests silent
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>
Diffstat (limited to 'src/flag')
-rw-r--r--src/flag/export_test.go6
-rw-r--r--src/flag/flag_test.go9
2 files changed, 11 insertions, 4 deletions
diff --git a/src/flag/export_test.go b/src/flag/export_test.go
index 838cfaf6a4..9ef93ed6c5 100644
--- a/src/flag/export_test.go
+++ b/src/flag/export_test.go
@@ -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
}
diff --git a/src/flag/flag_test.go b/src/flag/flag_test.go
index 5835fcf22c..d5c443d3c6 100644
--- a/src/flag/flag_test.go
+++ b/src/flag/flag_test.go
@@ -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")