package org.netbeans.gradle.project.util; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.junit.Assert; import org.junit.Test; public class ExcludeIncludeTest { private static Path getAbsPath(String firstPart, String... lastParts) { return Paths.get(firstPart, lastParts).toAbsolutePath(); } private static Path subPath(Path rootDir, String... subPaths) { Path result = rootDir; for (String subPath: subPaths) { result = result.resolve(subPath); } return result; } private static void assertInclude( Set<String> excludes, Set<String> includes, String... subPaths) { Path rootDir = getAbsPath("root", "subDir"); Assert.assertTrue(ExcludeInclude.includeFile( subPath(rootDir, subPaths), rootDir, excludes, includes)); } private static void assertExclude( Set<String> excludes, Set<String> includes, String... subPaths) { Path baseDir = getAbsPath("root"); Path rootDir = subPath(baseDir, "include"); Assert.assertFalse(ExcludeInclude.includeFile( subPath(baseDir, subPaths), rootDir, excludes, includes)); } @Test public void testNoRules() { Set<String> excludes = Collections.emptySet(); Set<String> includes = Collections.emptySet(); assertInclude(excludes, includes, "path1", "path2"); assertInclude(excludes, includes); assertExclude(excludes, includes, "others"); assertExclude(excludes, includes, "others", "subDir"); } private static Set<String> asSet(String... values) { return new HashSet<>(Arrays.asList(values)); } @Test public void testFilesWithExcludedParent() { Set<String> excludes = asSet("**/test/*"); Set<String> includes = Collections.emptySet(); assertInclude(excludes, includes, "test", "subdir", "file1"); assertInclude(excludes, includes, "root1", "test", "subdir", "file1"); assertExclude(excludes, includes, "include", "test", "file1"); assertExclude(excludes, includes, "include", "root1", "test", "file1"); assertExclude(excludes, includes, "include", "root1", "root2", "test", "file1"); } @Test public void testFilesWithSpecificParent() { Set<String> excludes = Collections.emptySet(); Set<String> includes = asSet("**/test/*"); assertInclude(excludes, includes, "test", "file1"); assertInclude(excludes, includes, "root1", "test", "file1"); assertInclude(excludes, includes, "root1", "root2", "test", "file1"); assertExclude(excludes, includes, "include", "test", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "test", "subdir", "file1"); assertExclude(excludes, includes, "include"); assertExclude(excludes, includes, "include", "root1", "subDir"); } @Test public void testFilesWithExcludedParentInPath() { Set<String> excludes = asSet("**/test/**"); Set<String> includes = Collections.emptySet(); assertInclude(excludes, includes); assertInclude(excludes, includes, "root1"); assertInclude(excludes, includes, "root1", "root2"); assertExclude(excludes, includes, "include", "test", "file1"); assertExclude(excludes, includes, "include", "test", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "test", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "test", "file1"); assertExclude(excludes, includes, "include", "root1", "root2", "test", "file1"); } @Test public void testFilesWithSpecificParentInPath() { Set<String> excludes = Collections.emptySet(); Set<String> includes = asSet("**/test/**"); assertInclude(excludes, includes, "test", "file1"); assertInclude(excludes, includes, "root1", "test", "file1"); assertInclude(excludes, includes, "root1", "root2", "test", "file1"); assertInclude(excludes, includes, "test", "subdir", "file1"); assertInclude(excludes, includes, "root1", "test", "subdir", "file1"); assertExclude(excludes, includes, "include"); assertExclude(excludes, includes, "include", "root1", "subDir"); } @Test public void testExcludeFromRoot() { Set<String> excludes = asSet("root1/*"); Set<String> includes = Collections.emptySet(); assertInclude(excludes, includes, "root2"); assertInclude(excludes, includes, "root2", "file1"); assertInclude(excludes, includes, "root2", "subdir", "file1"); assertInclude(excludes, includes, "root1", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "file1"); } @Test public void testIncludeFromRoot() { Set<String> excludes = Collections.emptySet(); Set<String> includes = asSet("root1/*"); assertInclude(excludes, includes, "root1", "file1"); assertExclude(excludes, includes, "include", "root2"); assertExclude(excludes, includes, "include", "root2", "file1"); assertExclude(excludes, includes, "include", "root2", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "subdir", "file1"); } @Test public void testIncludeFromMultipleRoot() { Set<String> excludes = Collections.emptySet(); Set<String> includes = asSet("root1/*", "root2/*"); assertInclude(excludes, includes, "root1", "file1"); assertInclude(excludes, includes, "root2", "file1"); assertExclude(excludes, includes, "include", "root3"); assertExclude(excludes, includes, "include", "root3", "file1"); assertExclude(excludes, includes, "include", "root3", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "subdir", "file1"); } @Test public void testExcludeFromMultipleRoot() { Set<String> excludes = asSet("root1/*", "root2/*"); Set<String> includes = Collections.emptySet(); assertInclude(excludes, includes, "root3"); assertInclude(excludes, includes, "root3", "file1"); assertInclude(excludes, includes, "root3", "subdir", "file1"); assertInclude(excludes, includes, "root1", "subdir", "file1"); assertInclude(excludes, includes, "root2", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "file1"); assertExclude(excludes, includes, "include", "root2", "file1"); } @Test public void testIncludeExclude1() { Set<String> excludes = asSet("**/test/*"); Set<String> includes = asSet("root1/**"); assertInclude(excludes, includes, "root1", "file1"); assertInclude(excludes, includes, "root1", "subdir", "file1"); assertInclude(excludes, includes, "root1", "test", "subdir", "file1"); assertExclude(excludes, includes, "include", "root2"); assertExclude(excludes, includes, "include", "root2", "file1"); assertExclude(excludes, includes, "include", "root2", "subdir", "file1"); assertExclude(excludes, includes, "include", "root1", "test", "file1"); } }