diff options
author | Robin Jarry <robin@jarry.cc> | 2023-08-23 19:51:54 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-08-27 18:44:06 +0200 |
commit | fff16640ad7cd8c4b73187fbce10f2aa558701be (patch) | |
tree | 8112c2d2414231d78d05dc255a430512c26fc4e1 /lib/xdg/xdg_test.go | |
parent | bc8fdbbe8479f9f604f429931e7c90e396ea6f00 (diff) | |
download | aerc-fff16640ad7cd8c4b73187fbce10f2aa558701be.tar.gz |
xdg: add functions to deal with user home paths
These are intended to replace the following deprecated libraries:
github.com/kyoh86/xdg
github.com/mitchellh/go-homedir
The feature set should be roughly equivalent with some tweaks to make
our life easier in aerc.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Reviewed-by: Moritz Poldrack <moritz@poldrack.dev>
Diffstat (limited to 'lib/xdg/xdg_test.go')
-rw-r--r-- | lib/xdg/xdg_test.go | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/lib/xdg/xdg_test.go b/lib/xdg/xdg_test.go new file mode 100644 index 00000000..6b8eac35 --- /dev/null +++ b/lib/xdg/xdg_test.go @@ -0,0 +1,179 @@ +package xdg + +import ( + "runtime" + "testing" +) + +func TestCachePath(t *testing.T) { + t.Setenv("HOME", "/home/user") + vectors := []struct { + args []string + env map[string]string + expected map[string]string + }{ + { + args: []string{"aerc", "foo", "history"}, + expected: map[string]string{ + "": "/home/user/.cache/aerc/foo/history", + "darwin": "/home/user/Library/Caches/aerc/foo/history", + }, + }, + { + args: []string{"aerc", "foo/zuul"}, + env: map[string]string{"XDG_CACHE_HOME": "/home/x/.cache"}, + expected: map[string]string{"": "/home/x/.cache/aerc/foo/zuul"}, + }, + { + args: []string{}, + env: map[string]string{"XDG_CACHE_HOME": "/blah"}, + expected: map[string]string{"": "/blah"}, + }, + } + for _, vec := range vectors { + expected, found := vec.expected[runtime.GOOS] + if !found { + expected = vec.expected[""] + } + t.Run(expected, func(t *testing.T) { + for key, value := range vec.env { + t.Setenv(key, value) + } + res := CachePath(vec.args...) + if res != expected { + t.Errorf("got %q expected %q", res, expected) + } + }) + } +} + +func TestConfigPath(t *testing.T) { + t.Setenv("HOME", "/home/user") + vectors := []struct { + args []string + env map[string]string + expected map[string]string + }{ + { + args: []string{"aerc", "accounts.conf"}, + expected: map[string]string{ + "": "/home/user/.config/aerc/accounts.conf", + "darwin": "/home/user/Library/Preferences/aerc/accounts.conf", + }, + }, + { + args: []string{"aerc", "accounts.conf"}, + env: map[string]string{"XDG_CONFIG_HOME": "/users/x/.config"}, + expected: map[string]string{"": "/users/x/.config/aerc/accounts.conf"}, + }, + { + args: []string{}, + env: map[string]string{"XDG_CONFIG_HOME": "/blah"}, + expected: map[string]string{"": "/blah"}, + }, + } + for _, vec := range vectors { + expected, found := vec.expected[runtime.GOOS] + if !found { + expected = vec.expected[""] + } + t.Run(expected, func(t *testing.T) { + for key, value := range vec.env { + t.Setenv(key, value) + } + res := ConfigPath(vec.args...) + if res != expected { + t.Errorf("got %q expected %q", res, expected) + } + }) + } +} + +func TestDataPath(t *testing.T) { + t.Setenv("HOME", "/home/user") + vectors := []struct { + args []string + env map[string]string + expected map[string]string + }{ + { + args: []string{"aerc", "templates"}, + expected: map[string]string{ + "": "/home/user/.local/share/aerc/templates", + "darwin": "/home/user/Library/Application Support/aerc/templates", + }, + }, + { + args: []string{"aerc", "templates"}, + env: map[string]string{"XDG_DATA_HOME": "/users/x/.local/share"}, + expected: map[string]string{"": "/users/x/.local/share/aerc/templates"}, + }, + { + args: []string{}, + env: map[string]string{"XDG_DATA_HOME": "/blah"}, + expected: map[string]string{"": "/blah"}, + }, + } + for _, vec := range vectors { + expected, found := vec.expected[runtime.GOOS] + if !found { + expected = vec.expected[""] + } + t.Run(expected, func(t *testing.T) { + for key, value := range vec.env { + t.Setenv(key, value) + } + res := DataPath(vec.args...) + if res != expected { + t.Errorf("got %q expected %q", res, expected) + } + }) + } +} + +func TestRuntimePath(t *testing.T) { + // poor man's function mocking + orig := userRuntimePath + userRuntimePath = func() string { return "/run/user/1000" } + defer func() { userRuntimePath = orig }() + t.Setenv("HOME", "/home/user") + + vectors := []struct { + args []string + env map[string]string + expected map[string]string + }{ + { + args: []string{"aerc.sock"}, + expected: map[string]string{ + "": "/run/user/1000/aerc.sock", + "darwin": "/home/user/Library/Application Support/aerc.sock", + }, + }, + { + args: []string{"aerc.sock"}, + env: map[string]string{"XDG_RUNTIME_DIR": "/run/user/1234"}, + expected: map[string]string{"": "/run/user/1234/aerc.sock"}, + }, + { + args: []string{}, + env: map[string]string{"XDG_RUNTIME_DIR": "/blah"}, + expected: map[string]string{"": "/blah"}, + }, + } + for _, vec := range vectors { + expected, found := vec.expected[runtime.GOOS] + if !found { + expected = vec.expected[""] + } + t.Run(expected, func(t *testing.T) { + for key, value := range vec.env { + t.Setenv(key, value) + } + res := RuntimePath(vec.args...) + if res != expected { + t.Errorf("got %q expected %q", res, expected) + } + }) + } +} |