View Javadoc
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   * @author <a href="mailto:lj@jguru.se">Lennart J&ouml;relid</a>, jGuru Europe AB
23   */
24  public class PackageFilterInclusionTest {
25  
26      // Shared state
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          // Find all source files under the src/main/java directory.
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          // Assemble
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          // Act
66          final List<File> sourceFiles = FileSystemUtilities.resolveRecursively(Collections.singletonList(srcMainJavaDir),
67                  excludedFilesIdentifierFilter,
68                  log);
69          final SortedMap<String, File> path2FileMap = mapFiles(sourceFiles);
70  
71          // Assert
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          // Assemble
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         // Act
104         final List<File> result = FileSystemUtilities.filterFiles(allSourceFiles, includeFilter, log);
105         final SortedMap<String, File> path2FileMap = mapFiles(result);
106 
107         // Assert
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     // Private helpers
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 }