| 107 | } |
| 108 | |
| 109 | func TestListFilesSuccess(t *testing.T) { |
| 110 | t.Parallel() |
| 111 | |
| 112 | tc := []struct { |
| 113 | name string |
| 114 | baseFunc func(t *testing.T) string |
| 115 | relativity workspacesdk.LSRelativity |
| 116 | }{ |
| 117 | { |
| 118 | name: "home", |
| 119 | baseFunc: func(t *testing.T) string { |
| 120 | home, err := os.UserHomeDir() |
| 121 | require.NoError(t, err) |
| 122 | return home |
| 123 | }, |
| 124 | relativity: workspacesdk.LSRelativityHome, |
| 125 | }, |
| 126 | { |
| 127 | name: "root", |
| 128 | baseFunc: func(*testing.T) string { |
| 129 | if runtime.GOOS == "windows" { |
| 130 | return "" |
| 131 | } |
| 132 | return "/" |
| 133 | }, |
| 134 | relativity: workspacesdk.LSRelativityRoot, |
| 135 | }, |
| 136 | } |
| 137 | |
| 138 | // nolint:paralleltest // Not since Go v1.22. |
| 139 | for _, tc := range tc { |
| 140 | t.Run(tc.name, func(t *testing.T) { |
| 141 | t.Parallel() |
| 142 | |
| 143 | fs := afero.NewMemMapFs() |
| 144 | base := tc.baseFunc(t) |
| 145 | tmpDir := t.TempDir() |
| 146 | |
| 147 | reposDir := filepath.Join(tmpDir, "repos") |
| 148 | err := fs.MkdirAll(reposDir, 0o755) |
| 149 | require.NoError(t, err) |
| 150 | |
| 151 | downloadsDir := filepath.Join(tmpDir, "Downloads") |
| 152 | err = fs.MkdirAll(downloadsDir, 0o755) |
| 153 | require.NoError(t, err) |
| 154 | |
| 155 | textFile := filepath.Join(tmpDir, "file.txt") |
| 156 | err = afero.WriteFile(fs, textFile, []byte("content"), 0o600) |
| 157 | require.NoError(t, err) |
| 158 | |
| 159 | var queryComponents []string |
| 160 | // We can't get an absolute path relative to empty string on Windows. |
| 161 | if runtime.GOOS == "windows" && base == "" { |
| 162 | queryComponents = pathToArray(tmpDir) |
| 163 | } else { |
| 164 | rel, err := filepath.Rel(base, tmpDir) |
| 165 | require.NoError(t, err) |
| 166 | queryComponents = pathToArray(rel) |