123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package parser
- import (
- "os"
- "os/user"
- "path/filepath"
- "runtime"
- "testing"
- )
- func TestExpandPath(t *testing.T) {
- mockCurrentUser := func() (*user.User, error) {
- return &user.User{
- Username: "testuser",
- HomeDir: func() string {
- if os.PathSeparator == '\\' {
- return filepath.FromSlash("D:/home/testuser")
- }
- return "/home/testuser"
- }(),
- }, nil
- }
- mockLookupUser := func(username string) (*user.User, error) {
- fakeUsers := map[string]string{
- "testuser": func() string {
- if os.PathSeparator == '\\' {
- return filepath.FromSlash("D:/home/testuser")
- }
- return "/home/testuser"
- }(),
- "anotheruser": func() string {
- if os.PathSeparator == '\\' {
- return filepath.FromSlash("D:/home/anotheruser")
- }
- return "/home/anotheruser"
- }(),
- }
- if homeDir, ok := fakeUsers[username]; ok {
- return &user.User{
- Username: username,
- HomeDir: homeDir,
- }, nil
- }
- return nil, os.ErrNotExist
- }
- pwd, err := os.Getwd()
- if err != nil {
- t.Fatal(err)
- }
- t.Run("unix tests", func(t *testing.T) {
- if runtime.GOOS == "windows" {
- return
- }
- tests := []struct {
- path string
- relativeDir string
- expected string
- shouldErr bool
- }{
- {"~", "", "/home/testuser", false},
- {"~/myfolder/myfile.txt", "", "/home/testuser/myfolder/myfile.txt", false},
- {"~anotheruser/docs/file.txt", "", "/home/anotheruser/docs/file.txt", false},
- {"~nonexistentuser/file.txt", "", "", true},
- {"relative/path/to/file", "", filepath.Join(pwd, "relative/path/to/file"), false},
- {"/absolute/path/to/file", "", "/absolute/path/to/file", false},
- {"/absolute/path/to/file", "someotherdir/", "/absolute/path/to/file", false},
- {".", pwd, pwd, false},
- {".", "", pwd, false},
- {"somefile", "somedir", filepath.Join(pwd, "somedir", "somefile"), false},
- }
- for _, test := range tests {
- result, err := expandPathImpl(test.path, test.relativeDir, mockCurrentUser, mockLookupUser)
- if (err != nil) != test.shouldErr {
- t.Errorf("expandPathImpl(%q) returned error: %v, expected error: %v", test.path, err != nil, test.shouldErr)
- }
- if result != test.expected && !test.shouldErr {
- t.Errorf("expandPathImpl(%q) = %q, want %q", test.path, result, test.expected)
- }
- }
- })
- t.Run("windows tests", func(t *testing.T) {
- if runtime.GOOS != "windows" {
- return
- }
- tests := []struct {
- path string
- relativeDir string
- expected string
- shouldErr bool
- }{
- {"~", "", "D:\\home\\testuser", false},
- {"~/myfolder/myfile.txt", "", "D:\\home\\testuser\\myfolder\\myfile.txt", false},
- {"~anotheruser/docs/file.txt", "", "D:\\home\\anotheruser\\docs\\file.txt", false},
- {"~nonexistentuser/file.txt", "", "", true},
- {"relative\\path\\to\\file", "", filepath.Join(pwd, "relative\\path\\to\\file"), false},
- {"D:\\absolute\\path\\to\\file", "", "D:\\absolute\\path\\to\\file", false},
- {"D:\\absolute\\path\\to\\file", "someotherdir/", "D:\\absolute\\path\\to\\file", false},
- {".", pwd, pwd, false},
- {".", "", pwd, false},
- {"somefile", "somedir", filepath.Join(pwd, "somedir", "somefile"), false},
- }
- for _, test := range tests {
- result, err := expandPathImpl(test.path, test.relativeDir, mockCurrentUser, mockLookupUser)
- if (err != nil) != test.shouldErr {
- t.Errorf("expandPathImpl(%q) returned error: %v, expected error: %v", test.path, err != nil, test.shouldErr)
- }
- if result != test.expected && !test.shouldErr {
- t.Errorf("expandPathImpl(%q) = %q, want %q", test.path, result, test.expected)
- }
- }
- })
- }
|