]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-926 main files should exclude "test inclusions"
authorSimon Brandhof <simon.brandhof@gmail.com>
Wed, 12 Mar 2014 15:35:23 +0000 (16:35 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Thu, 13 Mar 2014 08:56:56 +0000 (09:56 +0100)
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFiltersTest.java

index 6824bf6c9b7cef32a05f305f28e81f2068c5a7a6..2bc3c709985e58bcf74b3c9aa7b3dfb81e5c057d 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.batch.scan.filesystem;
 
+import org.apache.commons.lang.ArrayUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.BatchComponent;
@@ -35,8 +36,8 @@ import java.util.List;
 public class ExclusionFilters implements BatchComponent {
   private final FileExclusions exclusionSettings;
 
-  private PathPattern[] sourceInclusions;
-  private PathPattern[] sourceExclusions;
+  private PathPattern[] mainInclusions;
+  private PathPattern[] mainExclusions;
   private PathPattern[] testInclusions;
   private PathPattern[] testExclusions;
 
@@ -45,12 +46,12 @@ public class ExclusionFilters implements BatchComponent {
   }
 
   public void prepare(ModuleFileSystem fs) {
-    sourceInclusions = computeSourceInclusions(fs);
-    sourceExclusions = computeSourceExclusions();
-    testInclusions = computeTestInclusions(fs);
-    testExclusions = computeTestExclusions();
-    log("Included sources: ", sourceInclusions);
-    log("Excluded sources: ", sourceExclusions);
+    mainInclusions = prepareMainInclusions(fs);
+    mainExclusions = prepareMainExclusions(fs);
+    testInclusions = prepareTestInclusions(fs);
+    testExclusions = prepareTestExclusions();
+    log("Included sources: ", mainInclusions);
+    log("Excluded sources: ", mainExclusions);
     log("Included tests: ", testInclusions);
     log("Excluded tests: ", testExclusions);
   }
@@ -68,10 +69,10 @@ public class ExclusionFilters implements BatchComponent {
   public boolean accept(InputFile inputFile, InputFile.Type type) {
     PathPattern[] inclusionPatterns = null;
     PathPattern[] exclusionPatterns = null;
-    if (InputFile.Type.MAIN==type) {
-      inclusionPatterns = sourceInclusions;
-      exclusionPatterns = sourceExclusions;
-    } else if (InputFile.Type.TEST==type) {
+    if (InputFile.Type.MAIN == type) {
+      inclusionPatterns = mainInclusions;
+      exclusionPatterns = mainExclusions;
+    } else if (InputFile.Type.TEST == type) {
       inclusionPatterns = testInclusions;
       exclusionPatterns = testExclusions;
     }
@@ -94,7 +95,7 @@ public class ExclusionFilters implements BatchComponent {
     return matchInclusion;
   }
 
-  PathPattern[] computeSourceInclusions(ModuleFileSystem fs) {
+  PathPattern[] prepareMainInclusions(ModuleFileSystem fs) {
     if (exclusionSettings.sourceInclusions().length > 0) {
       // User defined params
       return PathPattern.create(exclusionSettings.sourceInclusions());
@@ -108,10 +109,14 @@ public class ExclusionFilters implements BatchComponent {
     return PathPattern.create(sourcePattern.toArray(new String[sourcePattern.size()]));
   }
 
-  PathPattern[] computeTestInclusions(ModuleFileSystem fs) {
+  PathPattern[] prepareTestInclusions(ModuleFileSystem fs) {
+    return PathPattern.create(computeTestInclusions(fs));
+  }
+
+  private String[] computeTestInclusions(ModuleFileSystem fs) {
     if (exclusionSettings.testInclusions().length > 0) {
       // User defined params
-      return PathPattern.create(exclusionSettings.testInclusions());
+      return exclusionSettings.testInclusions();
     }
     // Convert source directories to inclusions
     List<String> testPatterns = new ArrayList<String>();
@@ -119,14 +124,16 @@ public class ExclusionFilters implements BatchComponent {
       String path = new PathResolver().relativePath(fs.baseDir(), test);
       testPatterns.add(path + "/**");
     }
-    return PathPattern.create(testPatterns.toArray(new String[testPatterns.size()]));
+    return testPatterns.toArray(new String[testPatterns.size()]);
   }
 
-  PathPattern[] computeSourceExclusions() {
-    return PathPattern.create(exclusionSettings.sourceExclusions());
+  PathPattern[] prepareMainExclusions(ModuleFileSystem fs) {
+    String[] patterns = (String[]) ArrayUtils.addAll(
+        exclusionSettings.sourceExclusions(), computeTestInclusions(fs));
+    return PathPattern.create(patterns);
   }
 
-  PathPattern[] computeTestExclusions() {
+  PathPattern[] prepareTestExclusions() {
     return PathPattern.create(exclusionSettings.testExclusions());
   }
 }
index d7e4ba4079a04cfd97763377c9108d1286c97218..e23359c53696df0c6d6b2c3557df6d8efdde0689 100644 (file)
@@ -53,7 +53,7 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_match_source_inclusion() throws IOException {
+  public void match_main_inclusion() throws IOException {
     Settings settings = new Settings();
     settings.setProperty(CoreProperties.PROJECT_INCLUSIONS_PROPERTY, "**/*Dao.java");
     ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
@@ -74,7 +74,7 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_include_source_folders_by_default() throws IOException {
+  public void include_main_folders_by_default() throws IOException {
     Settings settings = new Settings();
     ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
     when(fs.sourceDirs()).thenReturn(Arrays.asList(new File(basedir, "src/main/java")));
@@ -95,7 +95,7 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_include_source_and_test_folders_by_default() throws IOException {
+  public void include_main_and_test_folders_by_default() throws IOException {
     Settings settings = new Settings();
     ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
     when(fs.sourceDirs()).thenReturn(Arrays.asList(new File(basedir, "src/main/java")));
@@ -114,7 +114,27 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_ignore_source_folders_if_inclusion_defined() throws IOException {
+  public void exclude_test_inclusions_from_main_sources() throws IOException {
+    Settings settings = new Settings();
+    settings.setProperty(CoreProperties.PROJECT_INCLUSIONS_PROPERTY, "**/*.java");
+    settings.setProperty(CoreProperties.PROJECT_TEST_INCLUSIONS_PROPERTY, "src/test/java/**/*.java");
+    ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
+
+    filter.prepare(fs);
+
+    java.io.File file = temp.newFile();
+
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isFalse();
+
+    inputFile = new DefaultInputFile("src/test/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isTrue();
+  }
+
+  @Test
+  public void ignore_main_folders_if_inclusion_defined() throws IOException {
     Settings settings = new Settings();
     settings.setProperty(CoreProperties.PROJECT_INCLUSIONS_PROPERTY, "src/main/java2/**/*");
     ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
@@ -136,7 +156,7 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_include_test_folders_by_default() throws IOException {
+  public void include_test_folders_by_default() throws IOException {
     Settings settings = new Settings();
     ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
     when(fs.testDirs()).thenReturn(Arrays.asList(new File(basedir, "src/test/java")));
@@ -157,7 +177,7 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_match_at_least_one_source_inclusion() throws IOException {
+  public void match_at_least_one_source_inclusion() throws IOException {
     Settings settings = new Settings();
     settings.setProperty(CoreProperties.PROJECT_INCLUSIONS_PROPERTY, "**/*Dao.java,**/*Dto.java");
     ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
@@ -174,7 +194,7 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_match_source_exclusions() throws IOException {
+  public void match_source_exclusions() throws IOException {
     Settings settings = new Settings();
     settings.setProperty(CoreProperties.PROJECT_INCLUSIONS_PROPERTY, "src/main/java/**/*");
     settings.setProperty(CoreProperties.PROJECT_TEST_INCLUSIONS_PROPERTY, "src/test/java/**/*");
@@ -196,7 +216,7 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_match_source_exclusion_by_absolute_path() throws IOException {
+  public void match_source_exclusion_by_absolute_path() throws IOException {
     java.io.File includedFile = temp.newFile("Foo.java");
     java.io.File excludedFile = temp.newFile("Bar.java");
 
@@ -215,12 +235,12 @@ public class ExclusionFiltersTest {
   }
 
   @Test
-  public void should_trim_pattern() throws IOException {
+  public void trim_pattern() throws IOException {
     Settings settings = new Settings();
     settings.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, "   **/*Dao.java   ");
     ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
 
-    assertThat(filter.computeSourceExclusions()[0].toString()).isEqualTo("**/*Dao.java");
+    assertThat(filter.prepareMainExclusions(fs)[0].toString()).isEqualTo("**/*Dao.java");
   }
 
 }