diff --git a/context_test.go b/context_test.go index ccf8846505..f302caf7cf 100644 --- a/context_test.go +++ b/context_test.go @@ -183,6 +183,7 @@ func TestContext_IsSet_fromEnv(t *testing.T) { unparsableIsSet, uIsSet bool ) + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_TIMEOUT_SECONDS", "15.5") _ = os.Setenv("APP_PASSWORD", "") @@ -539,6 +540,7 @@ func TestCheckRequiredFlags(t *testing.T) { t.Run(test.testCase, func(t *testing.T) { // setup if test.envVarInput[0] != "" { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv(test.envVarInput[0], test.envVarInput[1]) } diff --git a/flag_test.go b/flag_test.go index 8e4a9e87ab..431eb03a13 100644 --- a/flag_test.go +++ b/flag_test.go @@ -14,8 +14,6 @@ import ( "time" ) -var osTempDir = os.TempDir() - var boolFlagTests = []struct { name string expected string @@ -24,6 +22,13 @@ var boolFlagTests = []struct { {"h", "-h\t(default: false)"}, } +func resetEnv(env []string) { + for _, e := range env { + fields := strings.SplitN(e, "=", 2) + os.Setenv(fields[0], fields[1]) + } +} + func TestBoolFlagHelpOutput(t *testing.T) { for _, test := range boolFlagTests { fl := &BoolFlag{Name: test.name} @@ -116,6 +121,7 @@ func TestFlagsFromEnv(t *testing.T) { } for i, test := range flagTests { + defer resetEnv(os.Environ()) os.Clearenv() envVarSlice := reflect.Indirect(reflect.ValueOf(test.flag)).FieldByName("EnvVars").Slice(0, 1) _ = os.Setenv(envVarSlice.Index(0).String(), test.input) @@ -185,7 +191,7 @@ func TestStringFlagDefaultText(t *testing.T) { } func TestStringFlagWithEnvVarHelpOutput(t *testing.T) { - + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_FOO", "derp") @@ -265,6 +271,7 @@ func TestPathFlagHelpOutput(t *testing.T) { } func TestPathFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_PATH", "/path/to/file") for _, test := range pathFlagTests { @@ -352,6 +359,7 @@ func TestStringSliceFlagHelpOutput(t *testing.T) { } func TestStringSliceFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_QWWX", "11,4") @@ -398,6 +406,7 @@ func TestIntFlagHelpOutput(t *testing.T) { } func TestIntFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_BAR", "2") @@ -446,6 +455,7 @@ func TestInt64FlagHelpOutput(t *testing.T) { } func TestInt64FlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_BAR", "2") @@ -483,6 +493,7 @@ func TestUintFlagHelpOutput(t *testing.T) { } func TestUintFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_BAR", "2") @@ -520,6 +531,7 @@ func TestUint64FlagHelpOutput(t *testing.T) { } func TestUint64FlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_BAR", "2") @@ -557,6 +569,7 @@ func TestDurationFlagHelpOutput(t *testing.T) { } func TestDurationFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_BAR", "2h3m6s") @@ -608,6 +621,7 @@ func TestIntSliceFlagHelpOutput(t *testing.T) { } func TestIntSliceFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_SMURF", "42,3") @@ -658,6 +672,7 @@ func TestInt64SliceFlagHelpOutput(t *testing.T) { } func TestInt64SliceFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_SMURF", "42,17179869184") @@ -695,6 +710,7 @@ func TestFloat64FlagHelpOutput(t *testing.T) { } func TestFloat64FlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_BAZ", "99.4") @@ -747,6 +763,7 @@ func TestFloat64SliceFlagHelpOutput(t *testing.T) { } func TestFloat64SliceFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_SMURF", "0.1234,-10.5") for _, test := range float64SliceFlagTests { @@ -784,6 +801,7 @@ func TestGenericFlagHelpOutput(t *testing.T) { } func TestGenericFlagWithEnvVarHelpOutput(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_ZAP", "3") @@ -846,6 +864,7 @@ func TestParseDestinationString(t *testing.T) { } func TestParseMultiStringFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_COUNT", "20") _ = (&App{ @@ -865,6 +884,7 @@ func TestParseMultiStringFromEnv(t *testing.T) { } func TestParseMultiStringFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_COUNT", "20") _ = (&App{ @@ -939,6 +959,7 @@ func TestParseMultiStringSliceWithDestination(t *testing.T) { } func TestParseMultiStringSliceWithDestinationAndEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -978,6 +999,7 @@ func TestParseMultiStringSliceWithDefaultsUnset(t *testing.T) { } func TestParseMultiStringSliceFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -998,6 +1020,7 @@ func TestParseMultiStringSliceFromEnv(t *testing.T) { } func TestParseMultiStringSliceFromEnvWithDefaults(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -1018,6 +1041,7 @@ func TestParseMultiStringSliceFromEnvWithDefaults(t *testing.T) { } func TestParseMultiStringSliceFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -1038,6 +1062,7 @@ func TestParseMultiStringSliceFromEnvCascade(t *testing.T) { } func TestParseMultiStringSliceFromEnvCascadeWithDefaults(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -1058,6 +1083,7 @@ func TestParseMultiStringSliceFromEnvCascadeWithDefaults(t *testing.T) { } func TestParseMultiStringSliceFromEnvWithDestination(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -1114,6 +1140,7 @@ func TestParseDestinationInt(t *testing.T) { } func TestParseMultiIntFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_TIMEOUT_SECONDS", "10") _ = (&App{ @@ -1133,6 +1160,7 @@ func TestParseMultiIntFromEnv(t *testing.T) { } func TestParseMultiIntFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_TIMEOUT_SECONDS", "10") _ = (&App{ @@ -1203,6 +1231,7 @@ func TestParseMultiIntSliceWithDefaultsUnset(t *testing.T) { } func TestParseMultiIntSliceFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -1223,6 +1252,7 @@ func TestParseMultiIntSliceFromEnv(t *testing.T) { } func TestParseMultiIntSliceFromEnvWithDefaults(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -1243,6 +1273,7 @@ func TestParseMultiIntSliceFromEnvWithDefaults(t *testing.T) { } func TestParseMultiIntSliceFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,40") @@ -1280,6 +1311,7 @@ func TestParseMultiInt64Slice(t *testing.T) { } func TestParseMultiInt64SliceFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,17179869184") @@ -1300,6 +1332,7 @@ func TestParseMultiInt64SliceFromEnv(t *testing.T) { } func TestParseMultiInt64SliceFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "20,30,17179869184") @@ -1355,6 +1388,7 @@ func TestParseDestinationFloat64(t *testing.T) { } func TestParseMultiFloat64FromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_TIMEOUT_SECONDS", "15.5") _ = (&App{ @@ -1374,6 +1408,7 @@ func TestParseMultiFloat64FromEnv(t *testing.T) { } func TestParseMultiFloat64FromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_TIMEOUT_SECONDS", "15.5") _ = (&App{ @@ -1393,6 +1428,7 @@ func TestParseMultiFloat64FromEnvCascade(t *testing.T) { } func TestParseMultiFloat64SliceFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "0.1,-10.5") @@ -1413,6 +1449,7 @@ func TestParseMultiFloat64SliceFromEnv(t *testing.T) { } func TestParseMultiFloat64SliceFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_INTERVALS", "0.1234,-10.5") @@ -1492,6 +1529,7 @@ func TestParseDestinationBool(t *testing.T) { } func TestParseMultiBoolFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_DEBUG", "1") _ = (&App{ @@ -1511,6 +1549,7 @@ func TestParseMultiBoolFromEnv(t *testing.T) { } func TestParseMultiBoolFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_DEBUG", "1") _ = (&App{ @@ -1541,6 +1580,7 @@ func TestParseBoolFromEnv(t *testing.T) { } for _, test := range boolFlagTests { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("DEBUG", test.input) _ = (&App{ @@ -1617,6 +1657,7 @@ func TestParseGeneric(t *testing.T) { } func TestParseGenericFromEnv(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_SERVE", "20,30") _ = (&App{ @@ -1641,6 +1682,7 @@ func TestParseGenericFromEnv(t *testing.T) { } func TestParseGenericFromEnvCascade(t *testing.T) { + defer resetEnv(os.Environ()) os.Clearenv() _ = os.Setenv("APP_FOO", "99,2000") _ = (&App{ @@ -1661,14 +1703,16 @@ func TestParseGenericFromEnvCascade(t *testing.T) { } func TestFlagFromFile(t *testing.T) { - os.Clearenv() - os.Setenv("APP_FOO", "123") - - temp, err := ioutil.TempFile(osTempDir, "urfave_cli_test") + temp, err := ioutil.TempFile("", "urfave_cli_test") if err != nil { t.Error(err) return } + + defer resetEnv(os.Environ()) + os.Clearenv() + os.Setenv("APP_FOO", "123") + _, _ = io.WriteString(temp, "abc") _ = temp.Close() defer func() {