213 lines
5.6 KiB
Go
213 lines
5.6 KiB
Go
package appdata_test
|
|
|
|
import (
|
|
"os"
|
|
"os/user"
|
|
"path/filepath"
|
|
"runtime"
|
|
"testing"
|
|
"unicode"
|
|
|
|
"github.com/indra-labs/indra/pkg/util/appdata"
|
|
)
|
|
|
|
// TestAppDataDir tests the API for Dir to ensure it gives expected results for various operating systems.
|
|
func TestAppDataDir(t *testing.T) {
|
|
// App name plus upper and lowercase variants.
|
|
appName := "myapp"
|
|
appNameUpper := string(unicode.ToUpper(rune(appName[0]))) + appName[1:]
|
|
appNameLower := string(unicode.ToLower(rune(appName[0]))) + appName[1:]
|
|
// When we're on Windows, set the expected local and roaming directories per the environment vars. When we aren't
|
|
// on Windows, the function should return the current directory when forced to provide the Windows path since the
|
|
// environment variables won't exist.
|
|
winLocal := "."
|
|
winRoaming := "."
|
|
if runtime.GOOS == "windows" {
|
|
localAppData := os.Getenv("LOCALAPPDATA")
|
|
roamingAppData := os.Getenv("APPDATA")
|
|
if localAppData == "" {
|
|
localAppData = roamingAppData
|
|
}
|
|
winLocal = filepath.Join(localAppData, appNameUpper)
|
|
winRoaming = filepath.Join(roamingAppData, appNameUpper)
|
|
}
|
|
// Get the home directory to use for testing expected results.
|
|
var homeDir string
|
|
usr, e := user.Current()
|
|
if e != nil {
|
|
t.Errorf("user.Current: %v", e)
|
|
return
|
|
}
|
|
homeDir = usr.HomeDir
|
|
// Mac node data directory.
|
|
macAppData := filepath.Join(homeDir, "Library", "Application Support")
|
|
tests := []struct {
|
|
goos string
|
|
appName string
|
|
roaming bool
|
|
want string
|
|
}{
|
|
// Various combinations of application name casing, leading period, operating system, and roaming flags.
|
|
{"windows", appNameLower, false, winLocal},
|
|
{"windows", appNameUpper, false, winLocal},
|
|
{"windows", "." + appNameLower, false, winLocal},
|
|
{"windows", "." + appNameUpper, false, winLocal},
|
|
{"windows", appNameLower, true, winRoaming},
|
|
{"windows", appNameUpper, true, winRoaming},
|
|
{"windows", "." + appNameLower, true, winRoaming},
|
|
{"windows", "." + appNameUpper, true, winRoaming},
|
|
{
|
|
"linux",
|
|
appNameLower,
|
|
false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"linux",
|
|
appNameUpper,
|
|
false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"linux", "." + appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"linux", "." + appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"darwin",
|
|
appNameLower,
|
|
false,
|
|
filepath.Join(macAppData, appNameUpper),
|
|
},
|
|
{
|
|
"darwin",
|
|
appNameUpper,
|
|
false,
|
|
filepath.Join(macAppData, appNameUpper),
|
|
},
|
|
{
|
|
"darwin", "." + appNameLower, false,
|
|
filepath.Join(macAppData, appNameUpper),
|
|
},
|
|
{
|
|
"darwin", "." + appNameUpper, false,
|
|
filepath.Join(macAppData, appNameUpper),
|
|
},
|
|
{
|
|
"openbsd", appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"openbsd", appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"openbsd", "." + appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"openbsd", "." + appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"freebsd", appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"freebsd", appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"freebsd", "." + appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"freebsd", "." + appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"netbsd", appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"netbsd", appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"netbsd", "." + appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"netbsd", "." + appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{"plan9", appNameLower, false, filepath.Join(homeDir, appNameLower)},
|
|
{"plan9", appNameUpper, false, filepath.Join(homeDir, appNameLower)},
|
|
{
|
|
"plan9", "." + appNameLower, false,
|
|
filepath.Join(homeDir, appNameLower),
|
|
},
|
|
{
|
|
"plan9", "." + appNameUpper, false,
|
|
filepath.Join(homeDir, appNameLower),
|
|
},
|
|
{
|
|
"unrecognized", appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"unrecognized", appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"unrecognized", "." + appNameLower, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
{
|
|
"unrecognized", "." + appNameUpper, false,
|
|
filepath.Join(homeDir, "."+appNameLower),
|
|
},
|
|
// No application name provided, so expect current directory.
|
|
{"windows", "", false, "."},
|
|
{"windows", "", true, "."},
|
|
{"linux", "", false, "."},
|
|
{"darwin", "", false, "."},
|
|
{"openbsd", "", false, "."},
|
|
{"freebsd", "", false, "."},
|
|
{"netbsd", "", false, "."},
|
|
{"plan9", "", false, "."},
|
|
{"unrecognized", "", false, "."},
|
|
// Single dot provided for application name, so expect current
|
|
// directory.
|
|
{"windows", ".", false, "."},
|
|
{"windows", ".", true, "."},
|
|
{"linux", ".", false, "."},
|
|
{"darwin", ".", false, "."},
|
|
{"openbsd", ".", false, "."},
|
|
{"freebsd", ".", false, "."},
|
|
{"netbsd", ".", false, "."},
|
|
{"plan9", ".", false, "."},
|
|
{"unrecognized", ".", false, "."},
|
|
}
|
|
t.Logf("Running %d tests", len(tests))
|
|
for i, test := range tests {
|
|
ret := TstAppDataDir(test.goos, test.appName, test.roaming)
|
|
if ret != test.want {
|
|
t.Errorf(
|
|
"AppDataDir #%d (%s) does not match - "+
|
|
"expected got %s, want %s", i, test.goos, ret,
|
|
test.want,
|
|
)
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
// TstAppDataDir makes the internal appDataDir function available to the test package.
|
|
func TstAppDataDir(goos, appName string, roaming bool) string {
|
|
return appdata.GetDataDir(goos, appName, roaming)
|
|
}
|