2021-09-21 17:15:26 +03:00
|
|
|
//go:build !go1.17
|
|
|
|
// +build !go1.17
|
|
|
|
|
2020-09-30 14:02:07 +03:00
|
|
|
package testutil
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Based on https://github.com/frankban/quicktest/blob/577841610793d24f99e31cc2c0ef3a541fefd7c7/patch.go#L34-L64
|
|
|
|
// Licensed under the MIT license
|
|
|
|
// Copyright (c) 2017 Canonical Ltd.
|
|
|
|
|
|
|
|
// Setenv sets an environment variable to a temporary value for the
|
|
|
|
// duration of the test.
|
|
|
|
//
|
|
|
|
// At the end of the test (see "Deferred execution" in the package docs), the
|
|
|
|
// environment variable is returned to its original value.
|
|
|
|
func Setenv(t *testing.T, name, val string) {
|
|
|
|
setenv(t, name, val, true)
|
|
|
|
}
|
|
|
|
|
|
|
|
// setenv sets or unsets an environment variable to a temporary value for the
|
|
|
|
// duration of the test
|
|
|
|
func setenv(t *testing.T, name, val string, valOK bool) {
|
|
|
|
oldVal, oldOK := os.LookupEnv(name)
|
|
|
|
if valOK {
|
|
|
|
os.Setenv(name, val)
|
|
|
|
} else {
|
|
|
|
os.Unsetenv(name)
|
|
|
|
}
|
|
|
|
t.Cleanup(func() {
|
|
|
|
if oldOK {
|
|
|
|
os.Setenv(name, oldVal)
|
|
|
|
} else {
|
|
|
|
os.Unsetenv(name)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|