1 package org.codehaus.mojo.jaxb2.shared.filters;
2
3 import org.codehaus.mojo.jaxb2.BufferingLog;
4 import org.codehaus.mojo.jaxb2.shared.FileSystemUtilities;
5 import org.codehaus.mojo.jaxb2.shared.filters.pattern.FileFilterAdapter;
6 import org.codehaus.mojo.jaxb2.shared.filters.pattern.PatternFileFilter;
7 import org.junit.Assert;
8 import org.junit.Before;
9 import org.junit.Test;
10
11 import java.io.File;
12 import java.io.FileFilter;
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
16 import java.util.SortedMap;
17 import java.util.TreeMap;
18
19 import static java.io.File.separator;
20
21
22
23
24 public class PackageFilterInclusionTest {
25
26
27 private File baseDirectory;
28 private File srcMainJavaDir;
29 private BufferingLog log;
30 private String contextRoot;
31
32 @Before
33 public void setupSharedState() {
34
35 log = new BufferingLog(BufferingLog.LogLevel.DEBUG);
36
37 String basedir = System.getProperty("basedir");
38 if (basedir == null) {
39 baseDirectory = new File(getClass().getClassLoader().getResource("logback-test.xml").getPath())
40 .getParentFile()
41 .getParentFile()
42 .getParentFile();
43 } else {
44 baseDirectory = new File(basedir);
45 }
46 Assert.assertTrue(baseDirectory.exists() && baseDirectory.isDirectory());
47
48
49 srcMainJavaDir = new File(basedir, "src/main/java");
50 Assert.assertTrue(srcMainJavaDir.exists() && srcMainJavaDir.isDirectory());
51
52 contextRoot = FileSystemUtilities.relativize(srcMainJavaDir.getPath(), baseDirectory, true);
53 }
54
55 @Test
56 public void validateExcludingPackageInfoFiles() {
57
58
59 final String rootPackagePath = contextRoot + separator + "org" + separator + "codehaus" + separator + "mojo"
60 + separator + "jaxb2";
61 final String excludeFilenamePattern = "package-info\\.java";
62 final List<Filter<File>> excludedFilesIdentifierFilter = PatternFileFilter
63 .createIncludeFilterList(log, excludeFilenamePattern);
64
65
66 final List<File> sourceFiles = FileSystemUtilities.resolveRecursively(Collections.singletonList(srcMainJavaDir),
67 excludedFilesIdentifierFilter,
68 log);
69 final SortedMap<String, File> path2FileMap = mapFiles(sourceFiles);
70
71
72 for (String current : path2FileMap.keySet()) {
73
74 final String relativePath = current.startsWith(baseDirectory.getPath())
75 ? current.substring(baseDirectory.getPath().length() + 1)
76 : current;
77
78 Assert.assertTrue("Path " + relativePath + " did not start with the root package path " + rootPackagePath,
79 relativePath.startsWith(rootPackagePath));
80 Assert.assertTrue("Path " + current + " was a package-info.java file.",
81 !current.contains("package-info"));
82 }
83 }
84
85 @Test
86 public void validateIncludingSubTrees() {
87
88
89 final String locationPackageDirName = separator + "location" + separator;
90 final FileFilterAdapter includeFilter = new FileFilterAdapter(new FileFilter() {
91 @Override
92 public boolean accept(final File pathname) {
93 return pathname.getPath().contains(locationPackageDirName);
94 }
95 });
96 includeFilter.initialize(log);
97
98 final List<File> allSourceFiles = FileSystemUtilities.resolveRecursively(
99 Collections.singletonList(srcMainJavaDir),
100 new ArrayList<Filter<File>>(),
101 log);
102
103
104 final List<File> result = FileSystemUtilities.filterFiles(allSourceFiles, includeFilter, log);
105 final SortedMap<String, File> path2FileMap = mapFiles(result);
106
107
108 Assert.assertTrue(result.size() > 1);
109 for (String current : path2FileMap.keySet()) {
110 Assert.assertTrue("Path " + current + " contained disallowed pattern " + locationPackageDirName,
111 current.contains(locationPackageDirName));
112 }
113 }
114
115
116
117
118
119 private SortedMap<String, File> mapFiles(final List<File> files) {
120
121 final SortedMap<String, File> toReturn = new TreeMap<String, File>();
122 for (File current : files) {
123 toReturn.put(current.getPath(), current);
124 }
125
126 return toReturn;
127 }
128 }