package org.geotoolkit.nio; import org.junit.Test; import java.io.IOException; import java.nio.file.*; import java.util.ArrayList; import java.util.List; import org.apache.sis.internal.system.OS; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @author Quentin Boileau (Geomatys) */ public class PosixDirectoryFilterTest { private final boolean isCaseSensitive; public PosixDirectoryFilterTest() { isCaseSensitive = OS.current() == OS.LINUX; } @Test public void testFilter() throws IOException { Path rootDir = Files.createTempDirectory("root"); try { fillDirectory(rootDir); try (DirectoryStream<Path> stream = Files.newDirectoryStream(rootDir, new PosixDirectoryFilter("*.png"))) { for (Path path : stream) { assertEquals("image.png", path.getFileName().toString()); } } List<String> foundFileName = new ArrayList<>(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(rootDir, new PosixDirectoryFilter("image.*"))) { for (Path path : stream) { foundFileName.add(path.getFileName().toString()); } } assertEquals(isCaseSensitive ? 3 : 2, foundFileName.size()); assertEquals(isCaseSensitive, foundFileName.contains("image.PNG")); assertTrue(foundFileName.contains("image.jpg")); assertTrue(foundFileName.contains("image.png")); } finally { IOUtilities.deleteRecursively(rootDir); } } @Test public void testFilterCaseUnsensitive() throws IOException { Path rootDir = Files.createTempDirectory("root"); try { fillDirectory(rootDir); List<String> foundFileName = new ArrayList<>(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(rootDir, new PosixDirectoryFilter("*.png", true))) { for (Path path : stream) { foundFileName.add(path.getFileName().toString()); } } assertEquals(isCaseSensitive ? 2 : 1, foundFileName.size()); assertEquals(isCaseSensitive, foundFileName.contains("image.PNG")); assertTrue(foundFileName.contains("image.png")); foundFileName.clear(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(rootDir, new PosixDirectoryFilter("md.*", true))) { for (Path path : stream) { foundFileName.add(path.getFileName().toString()); } } assertEquals(2, foundFileName.size()); assertTrue(foundFileName.contains("md.txt")); assertTrue(foundFileName.contains("MD.xml")); } finally { IOUtilities.deleteRecursively(rootDir); } } private void fillDirectory(Path rootDir) throws IOException { Files.createFile(rootDir.resolve("image.png")); if (isCaseSensitive) { Files.createFile(rootDir.resolve("image.PNG")); } Files.createFile(rootDir.resolve("image.jpg")); Files.createFile(rootDir.resolve("md.txt")); Files.createFile(rootDir.resolve("MD.xml")); } }