|
27 | 27 | import java.io.FileNotFoundException;
|
28 | 28 | import java.io.IOException;
|
29 | 29 | import java.nio.file.Files;
|
| 30 | +import java.nio.file.Path; |
| 31 | +import java.nio.file.Paths; |
30 | 32 | import java.util.ArrayList;
|
31 | 33 | import java.util.Arrays;
|
32 | 34 | import java.util.List;
|
33 | 35 | import java.util.Map;
|
| 36 | +import java.util.stream.Collectors; |
34 | 37 |
|
35 | 38 | import jakarta.servlet.http.HttpServletRequest;
|
36 | 39 | import org.junit.jupiter.api.AfterAll;
|
@@ -219,6 +222,50 @@ public boolean isAllowed(HttpServletRequest request, Project project) {
|
219 | 222 | env.setProjects(oldProjects);
|
220 | 223 | }
|
221 | 224 |
|
| 225 | + @SuppressWarnings("ResultOfMethodCallIgnored") |
| 226 | + @EnabledOnOs({OS.LINUX, OS.MAC, OS.SOLARIS, OS.AIX, OS.OTHER}) |
| 227 | + @Test |
| 228 | + void testGetSortedFilesDirsFirst() throws IOException { |
| 229 | + RuntimeEnvironment env = RuntimeEnvironment.getInstance(); |
| 230 | + env.setListDirsFirst(true); |
| 231 | + // Cannot spy/mock final class. |
| 232 | + HttpServletRequest req = createRequest("/source", "/xref", ""); |
| 233 | + PageConfig pageConfig = PageConfig.get(req); |
| 234 | + |
| 235 | + // Make sure the source root has just directories. |
| 236 | + File sourceRootFile = new File(repository.getSourceRoot()); |
| 237 | + assertTrue(Arrays.stream(sourceRootFile.listFiles()).filter(File::isFile). |
| 238 | + collect(Collectors.toSet()).isEmpty()); |
| 239 | + |
| 240 | + // Create regular file under source root. |
| 241 | + File file = new File(sourceRootFile, "foo.txt"); |
| 242 | + assertTrue(file.createNewFile()); |
| 243 | + assertTrue(file.isFile()); |
| 244 | + |
| 245 | + // Make sure the regular file is last. |
| 246 | + List<String> entries = pageConfig.getSortedFiles(sourceRootFile.listFiles()); |
| 247 | + assertNotNull(entries); |
| 248 | + assertFalse(entries.isEmpty()); |
| 249 | + int numEntries = entries.size(); |
| 250 | + assertEquals("foo.txt", entries.get(entries.size() - 1)); |
| 251 | + |
| 252 | + // Create symbolic link to non-existent target. |
| 253 | + Path link = Path.of(sourceRootFile.getCanonicalPath(), "link"); |
| 254 | + Path target = Paths.get("/nonexistent"); |
| 255 | + Files.createSymbolicLink(link, target); |
| 256 | + |
| 257 | + // Check the symlink was sorted as file. |
| 258 | + entries = pageConfig.getSortedFiles(sourceRootFile.listFiles()); |
| 259 | + assertNotNull(entries); |
| 260 | + assertFalse(entries.isEmpty()); |
| 261 | + assertEquals(numEntries + 1, entries.size()); |
| 262 | + assertEquals("link", entries.get(entries.size() - 1)); |
| 263 | + |
| 264 | + // Cleanup. |
| 265 | + file.delete(); |
| 266 | + link.toFile().delete(); |
| 267 | + } |
| 268 | + |
222 | 269 | @Test
|
223 | 270 | public void testGetIntParam() {
|
224 | 271 | String[] attrs = {"a", "b", "c", "d", "e", "f", "g", "h"};
|
|
0 commit comments