refactor(test): replace os.Setenv() with t.Setenv()

This commit is contained in:
Alec Thomas
2024-12-29 08:02:45 +09:00
parent a14bb2072c
commit 36257680f1
2 changed files with 23 additions and 48 deletions
+4 -7
View File
@@ -955,14 +955,12 @@ func TestDefaultEnumValidated(t *testing.T) {
} }
func TestEnvarEnumValidated(t *testing.T) { func TestEnvarEnumValidated(t *testing.T) {
restore := tempEnv(map[string]string{
"FLAG": "invalid",
})
defer restore()
var cli struct { var cli struct {
Flag string `env:"FLAG" required:"" enum:"valid"` Flag string `env:"FLAG" required:"" enum:"valid"`
} }
p := mustNew(t, &cli) p := newEnvParser(t, &cli, envMap{
"FLAG": "invalid",
})
_, err := p.Parse(nil) _, err := p.Parse(nil)
assert.EqualError(t, err, "--flag must be one of \"valid\" but got \"invalid\"") assert.EqualError(t, err, "--flag must be one of \"valid\" but got \"invalid\"")
} }
@@ -1234,10 +1232,9 @@ func TestIssue153(t *testing.T) {
Ls LsCmd `cmd help:"List paths."` Ls LsCmd `cmd help:"List paths."`
} }
p, revert := newEnvParser(t, &cli, envMap{ p := newEnvParser(t, &cli, envMap{
"CMD_PATHS": "hello", "CMD_PATHS": "hello",
}) })
defer revert()
_, err := p.Parse([]string{"ls"}) _, err := p.Parse([]string{"ls"})
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, []string{"hello"}, cli.Ls.Paths) assert.Equal(t, []string{"hello"}, cli.Ls.Paths)
+19 -41
View File
@@ -2,7 +2,6 @@ package kong_test
import ( import (
"errors" "errors"
"os"
"reflect" "reflect"
"strings" "strings"
"testing" "testing"
@@ -13,23 +12,13 @@ import (
type envMap map[string]string type envMap map[string]string
func tempEnv(env envMap) func() { func newEnvParser(t *testing.T, cli interface{}, env envMap, options ...kong.Option) *kong.Kong {
for k, v := range env {
os.Setenv(k, v)
}
return func() {
for k := range env {
os.Unsetenv(k)
}
}
}
func newEnvParser(t *testing.T, cli interface{}, env envMap, options ...kong.Option) (*kong.Kong, func()) {
t.Helper() t.Helper()
restoreEnv := tempEnv(env) for name, value := range env {
t.Setenv(name, value)
}
parser := mustNew(t, cli, options...) parser := mustNew(t, cli, options...)
return parser, restoreEnv return parser
} }
func TestEnvarsFlagBasic(t *testing.T) { func TestEnvarsFlagBasic(t *testing.T) {
@@ -39,7 +28,7 @@ func TestEnvarsFlagBasic(t *testing.T) {
Interp string `env:"${kongInterp}"` Interp string `env:"${kongInterp}"`
} }
kongInterpEnv := "KONG_INTERP" kongInterpEnv := "KONG_INTERP"
parser, unsetEnvs := newEnvParser(t, &cli, parser := newEnvParser(t, &cli,
envMap{ envMap{
"KONG_STRING": "bye", "KONG_STRING": "bye",
"KONG_SLICE": "5,2,9", "KONG_SLICE": "5,2,9",
@@ -49,7 +38,6 @@ func TestEnvarsFlagBasic(t *testing.T) {
"kongInterp": kongInterpEnv, "kongInterp": kongInterpEnv,
}, },
) )
defer unsetEnvs()
_, err := parser.Parse([]string{}) _, err := parser.Parse([]string{})
assert.NoError(t, err) assert.NoError(t, err)
@@ -63,14 +51,13 @@ func TestEnvarsFlagMultiple(t *testing.T) {
FirstENVPresent string `env:"KONG_TEST1_1,KONG_TEST1_2"` FirstENVPresent string `env:"KONG_TEST1_1,KONG_TEST1_2"`
SecondENVPresent string `env:"KONG_TEST2_1,KONG_TEST2_2"` SecondENVPresent string `env:"KONG_TEST2_1,KONG_TEST2_2"`
} }
parser, unsetEnvs := newEnvParser(t, &cli, parser := newEnvParser(t, &cli,
envMap{ envMap{
"KONG_TEST1_1": "value1.1", "KONG_TEST1_1": "value1.1",
"KONG_TEST1_2": "value1.2", "KONG_TEST1_2": "value1.2",
"KONG_TEST2_2": "value2.2", "KONG_TEST2_2": "value2.2",
}, },
) )
defer unsetEnvs()
_, err := parser.Parse([]string{}) _, err := parser.Parse([]string{})
assert.NoError(t, err) assert.NoError(t, err)
@@ -82,8 +69,7 @@ func TestEnvarsFlagOverride(t *testing.T) {
var cli struct { var cli struct {
Flag string `env:"KONG_FLAG"` Flag string `env:"KONG_FLAG"`
} }
parser, restoreEnv := newEnvParser(t, &cli, envMap{"KONG_FLAG": "bye"}) parser := newEnvParser(t, &cli, envMap{"KONG_FLAG": "bye"})
defer restoreEnv()
_, err := parser.Parse([]string{"--flag=hello"}) _, err := parser.Parse([]string{"--flag=hello"})
assert.NoError(t, err) assert.NoError(t, err)
@@ -94,8 +80,7 @@ func TestEnvarsTag(t *testing.T) {
var cli struct { var cli struct {
Slice []int `env:"KONG_NUMBERS"` Slice []int `env:"KONG_NUMBERS"`
} }
parser, restoreEnv := newEnvParser(t, &cli, envMap{"KONG_NUMBERS": "5,2,9"}) parser := newEnvParser(t, &cli, envMap{"KONG_NUMBERS": "5,2,9"})
defer restoreEnv()
_, err := parser.Parse([]string{}) _, err := parser.Parse([]string{})
assert.NoError(t, err) assert.NoError(t, err)
@@ -109,8 +94,7 @@ func TestEnvarsEnvPrefix(t *testing.T) {
var cli struct { var cli struct {
Anonymous `envprefix:"KONG_"` Anonymous `envprefix:"KONG_"`
} }
parser, restoreEnv := newEnvParser(t, &cli, envMap{"KONG_NUMBERS": "1,2,3"}) parser := newEnvParser(t, &cli, envMap{"KONG_NUMBERS": "1,2,3"})
defer restoreEnv()
_, err := parser.Parse([]string{}) _, err := parser.Parse([]string{})
assert.NoError(t, err) assert.NoError(t, err)
@@ -125,8 +109,7 @@ func TestEnvarsEnvPrefixMultiple(t *testing.T) {
var cli struct { var cli struct {
Anonymous `envprefix:"KONG_"` Anonymous `envprefix:"KONG_"`
} }
parser, restoreEnv := newEnvParser(t, &cli, envMap{"KONG_NUMBERS1_1": "1,2,3", "KONG_NUMBERS2_2": "5,6,7"}) parser := newEnvParser(t, &cli, envMap{"KONG_NUMBERS1_1": "1,2,3", "KONG_NUMBERS2_2": "5,6,7"})
defer restoreEnv()
_, err := parser.Parse([]string{}) _, err := parser.Parse([]string{})
assert.NoError(t, err) assert.NoError(t, err)
@@ -144,8 +127,7 @@ func TestEnvarsNestedEnvPrefix(t *testing.T) {
var cli struct { var cli struct {
Anonymous `envprefix:"KONG_"` Anonymous `envprefix:"KONG_"`
} }
parser, restoreEnv := newEnvParser(t, &cli, envMap{"KONG_ANON_STRING": "abc"}) parser := newEnvParser(t, &cli, envMap{"KONG_ANON_STRING": "abc"})
defer restoreEnv()
_, err := parser.Parse([]string{}) _, err := parser.Parse([]string{})
assert.NoError(t, err) assert.NoError(t, err)
@@ -156,15 +138,13 @@ func TestEnvarsWithDefault(t *testing.T) {
var cli struct { var cli struct {
Flag string `env:"KONG_FLAG" default:"default"` Flag string `env:"KONG_FLAG" default:"default"`
} }
parser, restoreEnv := newEnvParser(t, &cli, envMap{}) parser := newEnvParser(t, &cli, envMap{})
defer restoreEnv()
_, err := parser.Parse(nil) _, err := parser.Parse(nil)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, "default", cli.Flag) assert.Equal(t, "default", cli.Flag)
parser, restoreEnv = newEnvParser(t, &cli, envMap{"KONG_FLAG": "moo"}) parser = newEnvParser(t, &cli, envMap{"KONG_FLAG": "moo"})
defer restoreEnv()
_, err = parser.Parse(nil) _, err = parser.Parse(nil)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, "moo", cli.Flag) assert.Equal(t, "moo", cli.Flag)
@@ -194,7 +174,7 @@ func TestEnv(t *testing.T) {
} }
// With the prefix // With the prefix
parser, unsetEnvs := newEnvParser(t, &cli, envMap{ parser := newEnvParser(t, &cli, envMap{
"KONG_ONE_FLAG": "one", "KONG_ONE_FLAG": "one",
"KONG_TWO_FLAG": "two", "KONG_TWO_FLAG": "two",
"KONG_THREE_FLAG": "three", "KONG_THREE_FLAG": "three",
@@ -202,14 +182,13 @@ func TestEnv(t *testing.T) {
"KONG_FIVE": "true", "KONG_FIVE": "true",
"KONG_SIX": "true", "KONG_SIX": "true",
}, kong.DefaultEnvars("KONG")) }, kong.DefaultEnvars("KONG"))
defer unsetEnvs()
_, err := parser.Parse(nil) _, err := parser.Parse(nil)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, expected, cli) assert.Equal(t, expected, cli)
// Without the prefix // Without the prefix
parser, unsetEnvs = newEnvParser(t, &cli, envMap{ parser = newEnvParser(t, &cli, envMap{
"ONE_FLAG": "one", "ONE_FLAG": "one",
"TWO_FLAG": "two", "TWO_FLAG": "two",
"THREE_FLAG": "three", "THREE_FLAG": "three",
@@ -217,7 +196,6 @@ func TestEnv(t *testing.T) {
"FIVE": "true", "FIVE": "true",
"SIX": "true", "SIX": "true",
}, kong.DefaultEnvars("")) }, kong.DefaultEnvars(""))
defer unsetEnvs()
_, err = parser.Parse(nil) _, err = parser.Parse(nil)
assert.NoError(t, err) assert.NoError(t, err)
@@ -281,10 +259,10 @@ func TestResolversWithMappers(t *testing.T) {
Flag string `env:"KONG_MOO" type:"upper"` Flag string `env:"KONG_MOO" type:"upper"`
} }
restoreEnv := tempEnv(envMap{"KONG_MOO": "meow"}) t.Setenv("KONG_MOO", "meow")
defer restoreEnv()
parser := mustNew(t, &cli, parser := newEnvParser(t, &cli,
envMap{"KONG_MOO": "meow"},
kong.NamedMapper("upper", testUppercaseMapper{}), kong.NamedMapper("upper", testUppercaseMapper{}),
) )
_, err := parser.Parse([]string{}) _, err := parser.Parse([]string{})