summaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-10-10 01:19:57 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2013-10-10 01:19:57 +0200
commit7cdb8cbfb54bcb028300674f18ce08ea3ee35858 (patch)
treef3bffef9fac71d13c4e48553e7b4bc2c49625efc /sonar-batch
parentc2a0f4f06564c1d62f08d4e20489f70f0f4ad223 (diff)
downloadsonarqube-7cdb8cbfb54bcb028300674f18ce08ea3ee35858.tar.gz
sonarqube-7cdb8cbfb54bcb028300674f18ce08ea3ee35858.zip
SONAR-3677 refactor API
Diffstat (limited to 'sonar-batch')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java11
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndexer.java7
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java30
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AttributeFilterTest.java10
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java5
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DeprecatedFileFiltersTest.java9
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java11
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFiltersTest.java27
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java101
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java11
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java6
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java97
16 files changed, 288 insertions, 53 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java
index f2565480997..8036e81ca90 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java
@@ -19,6 +19,7 @@
*/
package org.sonar.batch.scan.filesystem;
+import com.google.common.annotations.VisibleForTesting;
import org.sonar.api.scan.filesystem.InputFile;
import org.sonar.api.scan.filesystem.InputFileFilter;
@@ -38,4 +39,14 @@ class AttributeFilter implements InputFileFilter {
String value = inputFile.attribute(key);
return values.contains(value);
}
+
+ @VisibleForTesting
+ String key() {
+ return key;
+ }
+
+ @VisibleForTesting
+ Collection<String> values() {
+ return values;
+ }
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
index c8dd1b3f1ec..c4d13692c3e 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
@@ -27,8 +27,8 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.scan.filesystem.FileQuery;
import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.InputFiles;
import org.sonar.api.scan.filesystem.ModuleFileSystem;
-import org.sonar.api.utils.SonarException;
import javax.annotation.CheckForNull;
import java.io.File;
@@ -155,8 +155,8 @@ public class DefaultModuleFileSystem implements ModuleFileSystem {
/**
* @since 4.0
- * TODO move into API
*/
+ @Override
public Iterable<InputFile> inputFiles(FileQuery query) {
List<InputFile> result = Lists.newArrayList();
@@ -172,7 +172,7 @@ public class DefaultModuleFileSystem implements ModuleFileSystem {
@Override
// TODO deprecate
public List<File> files(FileQuery query) {
- return InputFile.toFiles(inputFiles(query));
+ return InputFiles.toFiles(inputFiles(query));
}
public void resetDirs(File basedir, File buildDir, List<File> sourceDirs, List<File> testDirs, List<File> binaryDirs) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java
index b958c2e2045..c4bbcdd9804 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java
@@ -78,7 +78,7 @@ public class DeprecatedFileFilters implements InputFileFilter {
@Override
public String canonicalPath() {
- return inputFile.attribute(InputFile.ATTRIBUTE_CANONICAL_PATH);
+ return inputFile.path();
}
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndexer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndexer.java
index 5cd183cd57b..a2d6c383232 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndexer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndexer.java
@@ -33,6 +33,7 @@ import org.sonar.api.scan.filesystem.InputFile;
import org.sonar.api.scan.filesystem.InputFileFilter;
import org.sonar.api.scan.filesystem.ModuleFileSystem;
import org.sonar.api.scan.filesystem.PathResolver;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import javax.annotation.Nullable;
import java.io.File;
@@ -63,9 +64,10 @@ public class FileIndexer implements BatchComponent {
this.fileHashes = fileHashes;
}
- public void index(ModuleFileSystem fileSystem) {
+ public void index(DefaultModuleFileSystem fileSystem) {
Logger logger = LoggerFactory.getLogger(FileIndexer.class);
logger.info("Index files");
+ // TODO log configuration too (replace FileSystemLogger)
cache.removeModule(fileSystem.moduleKey());
int count = 0;
@@ -102,7 +104,6 @@ public class FileIndexer implements BatchComponent {
String baseRelativePath = pathResolver.relativePath(fileSystem.baseDir(), file);
set(attributes, InputFile.ATTRIBUTE_SOURCEDIR_PATH, FilenameUtils.normalize(sourceDir.getCanonicalPath(), true));
set(attributes, InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, pathResolver.relativePath(sourceDir, file));
- set(attributes, InputFile.ATTRIBUTE_CANONICAL_PATH, FilenameUtils.normalize(file.getCanonicalPath(), true));
// other metadata
set(attributes, InputFile.ATTRIBUTE_TYPE, type);
@@ -111,7 +112,7 @@ public class FileIndexer implements BatchComponent {
set(attributes, InputFile.ATTRIBUTE_LANGUAGE, languageRecognizer.ofExtension(extension));
initStatus(file, fileSystem.sourceCharset(), baseRelativePath, attributes);
- return InputFile.create(file, baseRelativePath, attributes);
+ return DefaultInputFile.create(file, baseRelativePath, attributes);
} catch (Exception e) {
throw new IllegalStateException("Fail to read file: " + file.getAbsolutePath(), e);
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java
index b62694c3b6c..a273903d3cb 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java
@@ -19,6 +19,7 @@
*/
package org.sonar.batch.scan.filesystem;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
@@ -56,6 +57,11 @@ class FileQueryFilter {
}
}
+ @VisibleForTesting
+ List<InputFileFilter> filters() {
+ return filters;
+ }
+
boolean accept(InputFile inputFile) {
for (InputFileFilter filter : filters) {
if (!filter.accept(inputFile)) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java
index 61396830599..98e30d690e5 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java
@@ -21,6 +21,7 @@ package org.sonar.batch.scan.filesystem;
import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils;
+import org.picocontainer.Startable;
import org.sonar.api.BatchComponent;
import org.sonar.api.resources.Language;
@@ -28,16 +29,26 @@ import javax.annotation.CheckForNull;
import java.util.Map;
/**
- * Based on file extensions.
+ * Detect language of source files. Simplistic, based on file extensions.
*/
-public class LanguageRecognizer implements BatchComponent {
+public class LanguageRecognizer implements BatchComponent, Startable {
- private final Map<String, String> byExtensions = Maps.newHashMap();
+ /**
+ * Lower-case extension -> language
+ */
+ private Map<String, String> byExtensions = Maps.newHashMap();
+
+ private final Language[] languages;
public LanguageRecognizer(Language[] languages) {
+ this.languages = languages;
+ }
+
+ @Override
+ public void start() {
for (Language language : languages) {
for (String suffix : language.getFileSuffixes()) {
- String extension = StringUtils.removeStart(suffix, ".");
+ String extension = sanitizeExtension(suffix);
String s = byExtensions.get(extension);
if (s != null) {
@@ -50,12 +61,21 @@ public class LanguageRecognizer implements BatchComponent {
}
}
+ @Override
+ public void stop() {
+ // do nothing
+ }
+
// TODO what about cobol files without extension ?
@CheckForNull
String ofExtension(String fileExtension) {
if (StringUtils.isNotBlank(fileExtension)) {
- return byExtensions.get(fileExtension);
+ return byExtensions.get(StringUtils.lowerCase(fileExtension));
}
return null;
}
+
+ static String sanitizeExtension(String suffix) {
+ return StringUtils.lowerCase(StringUtils.removeStart(suffix, "."));
+ }
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java
index 2df7c53e4d6..0f3240a1159 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java
@@ -61,7 +61,7 @@ abstract class PathPattern {
@Override
boolean match(InputFile inputFile) {
- return pattern.match(inputFile.attribute(InputFile.ATTRIBUTE_CANONICAL_PATH));
+ return pattern.match(inputFile.path());
}
@Override
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AttributeFilterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AttributeFilterTest.java
index 1ce0a8a4019..f168c1acd6d 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AttributeFilterTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AttributeFilterTest.java
@@ -24,7 +24,7 @@ import com.google.common.collect.Lists;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import static org.fest.assertions.Assertions.assertThat;
@@ -37,9 +37,11 @@ public class AttributeFilterTest {
public void should_check_attribute_value() throws Exception {
AttributeFilter filter = new AttributeFilter("foo", Lists.newArrayList("one", "two"));
- assertThat(filter.accept(InputFile.create(temp.newFile(), "Why.java", ImmutableMap.of("foo", "two")))).isTrue();
- assertThat(filter.accept(InputFile.create(temp.newFile(), "Where.java", ImmutableMap.of("foo", "three")))).isFalse();
- assertThat(filter.accept(InputFile.create(temp.newFile(), "What.java", ImmutableMap.of("bar", "one")))).isFalse();
+ assertThat(filter.key()).isEqualTo("foo");
+ assertThat(filter.values()).containsOnly("one", "two");
+ assertThat(filter.accept(DefaultInputFile.create(temp.newFile(), "Why.java", ImmutableMap.of("foo", "two")))).isTrue();
+ assertThat(filter.accept(DefaultInputFile.create(temp.newFile(), "Where.java", ImmutableMap.of("foo", "three")))).isFalse();
+ assertThat(filter.accept(DefaultInputFile.create(temp.newFile(), "What.java", ImmutableMap.of("bar", "one")))).isFalse();
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java
index c0dfddb5a7e..4536d0b64fa 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java
@@ -29,6 +29,7 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.scan.filesystem.FileQuery;
import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import java.io.File;
import java.io.IOException;
@@ -151,8 +152,8 @@ public class DefaultModuleFileSystemTest {
DefaultModuleFileSystem fs = new DefaultModuleFileSystem("foo", settings, fileCache, fileIndexer);
File mainFile = temp.newFile();
- InputFile mainInput = InputFile.create(mainFile, "Main.java", ImmutableMap.of(InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE));
- InputFile testInput = InputFile.create(temp.newFile(), "Test.java", ImmutableMap.of(InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_TEST));
+ InputFile mainInput = DefaultInputFile.create(mainFile, "Main.java", ImmutableMap.of(InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE));
+ InputFile testInput = DefaultInputFile.create(temp.newFile(), "Test.java", ImmutableMap.of(InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_TEST));
when(fileCache.byModule("foo")).thenReturn(Lists.newArrayList(mainInput, testInput));
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DeprecatedFileFiltersTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DeprecatedFileFiltersTest.java
index a973337cfb4..399e4fdfd5b 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DeprecatedFileFiltersTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DeprecatedFileFiltersTest.java
@@ -28,7 +28,7 @@ import org.mockito.ArgumentCaptor;
import org.sonar.api.scan.filesystem.FileSystemFilter;
import org.sonar.api.scan.filesystem.FileType;
import org.sonar.api.scan.filesystem.InputFile;
-import org.sonar.api.scan.filesystem.ModuleFileSystem;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import java.io.File;
@@ -48,7 +48,7 @@ public class DeprecatedFileFiltersTest {
public void no_filters() throws Exception {
DeprecatedFileFilters filters = new DeprecatedFileFilters();
- InputFile inputFile = InputFile.create(temp.newFile(), "src/main/java/Foo.java", Maps.<String, String>newHashMap());
+ InputFile inputFile = DefaultInputFile.create(temp.newFile(), "src/main/java/Foo.java", Maps.<String, String>newHashMap());
assertThat(filters.accept(inputFile)).isTrue();
}
@@ -58,8 +58,7 @@ public class DeprecatedFileFiltersTest {
File basedir = temp.newFolder();
File file = temp.newFile();
- InputFile inputFile = InputFile.create(file, "src/main/java/Foo.java", ImmutableMap.of(
- InputFile.ATTRIBUTE_CANONICAL_PATH, new File(basedir, "src/main/java/Foo.java").getAbsolutePath(),
+ InputFile inputFile = DefaultInputFile.create(file, "src/main/java/Foo.java", ImmutableMap.of(
InputFile.ATTRIBUTE_SOURCEDIR_PATH, new File(basedir, "src/main/java").getAbsolutePath(),
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "Foo.java",
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_TEST
@@ -73,7 +72,7 @@ public class DeprecatedFileFiltersTest {
verify(filter).accept(eq(file), argument.capture());
DeprecatedFileFilters.DeprecatedContext context = argument.getValue();
- assertThat(context.canonicalPath()).isEqualTo(new File(basedir, "src/main/java/Foo.java").getAbsolutePath());
+ assertThat(context.canonicalPath()).isEqualTo(file.getAbsolutePath());
assertThat(context.relativeDir()).isEqualTo(new File(basedir, "src/main/java"));
assertThat(context.relativePath()).isEqualTo("Foo.java");
assertThat(context.type()).isEqualTo(FileType.TEST);
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java
index 9272d2cf012..b28f1708f83 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java
@@ -24,9 +24,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import java.io.File;
-import java.io.IOException;
import static org.fest.assertions.Assertions.assertThat;
@@ -40,17 +40,16 @@ public class ExclusionFilterTest {
ExclusionFilter sourceRelativeFilter = new ExclusionFilter("**/*Foo.java");
ExclusionFilter absoluteFilter = new ExclusionFilter("file:**/src/main/**Foo.java");
- File file = temp.newFile();
- InputFile inputFile = InputFile.create(file, "src/main/java/org/MyFoo.java", ImmutableMap.of(
- InputFile.ATTRIBUTE_CANONICAL_PATH, "/absolute/path/to/src/main/java/org/MyFoo.java",
+ File file = new File(temp.newFolder(), "src/main/java/org/MyFoo.java");
+ InputFile inputFile = DefaultInputFile.create(file, "src/main/java/org/MyFoo.java", ImmutableMap.of(
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "org/MyFoo.java"
));
assertThat(sourceRelativeFilter.accept(inputFile)).isFalse();
assertThat(absoluteFilter.accept(inputFile)).isFalse();
- inputFile = InputFile.create(file, "src/main/java/org/Other.java", ImmutableMap.of(
- InputFile.ATTRIBUTE_CANONICAL_PATH, "/absolute/path/to/src/main/java/org/Other.java",
+ file = new File(temp.newFolder(), "src/main/java/org/Other.java");
+ inputFile = DefaultInputFile.create(file, "src/main/java/org/Other.java", ImmutableMap.of(
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "org/Other.java"
));
assertThat(sourceRelativeFilter.accept(inputFile)).isTrue();
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFiltersTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFiltersTest.java
index 05c3d065458..049c45e13e7 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFiltersTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFiltersTest.java
@@ -30,6 +30,7 @@ import org.sonar.api.resources.JavaFile;
import org.sonar.api.resources.Project;
import org.sonar.api.scan.filesystem.FileExclusions;
import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import java.io.IOException;
@@ -47,21 +48,21 @@ public class ExclusionFiltersTest {
ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
java.io.File file = temp.newFile();
- InputFile inputFile = InputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
+ InputFile inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/Foo.java"
));
assertThat(filter.accept(inputFile)).isFalse();
- inputFile = InputFile.create(file, "src/main/java/com/mycompany/FooDao.java", ImmutableMap.of(
+ inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/FooDao.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/FooDao.java"
));
assertThat(filter.accept(inputFile)).isTrue();
// source inclusions do not apply to tests
- inputFile = InputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
+ inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_TEST,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/Foo.java"
));
@@ -75,14 +76,14 @@ public class ExclusionFiltersTest {
ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
java.io.File file = temp.newFile();
- InputFile inputFile = InputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
+ InputFile inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/Foo.java"
));
assertThat(filter.accept(inputFile)).isFalse();
- inputFile = InputFile.create(file, "src/main/java/com/mycompany/FooDto.java", ImmutableMap.of(
+ inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/FooDto.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/FooDto.java"
));
@@ -96,20 +97,20 @@ public class ExclusionFiltersTest {
ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
java.io.File file = temp.newFile();
- InputFile inputFile = InputFile.create(file, "src/main/java/com/mycompany/FooDao.java", ImmutableMap.of(
+ InputFile inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/FooDao.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/FooDao.java"
));
assertThat(filter.accept(inputFile)).isFalse();
- inputFile = InputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
+ inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/Foo.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/Foo.java"
));
assertThat(filter.accept(inputFile)).isTrue();
// source exclusions do not apply to tests
- inputFile = InputFile.create(file, "src/main/java/com/mycompany/FooDao.java", ImmutableMap.of(
+ inputFile = DefaultInputFile.create(file, "src/main/java/com/mycompany/FooDao.java", ImmutableMap.of(
InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_TEST,
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "com/mycompany/FooDao.java"
));
@@ -125,15 +126,13 @@ public class ExclusionFiltersTest {
settings.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, "file:" + excludedFile.getCanonicalPath());
ExclusionFilters filter = new ExclusionFilters(new FileExclusions(settings));
- InputFile includedInput = InputFile.create(includedFile, "src/main/java/org/bar/Foo.java", ImmutableMap.of(
- InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
- InputFile.ATTRIBUTE_CANONICAL_PATH, includedFile.getCanonicalPath()
+ InputFile includedInput = DefaultInputFile.create(includedFile, "src/main/java/org/bar/Foo.java", ImmutableMap.of(
+ InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE
));
assertThat(filter.accept(includedInput)).isTrue();
- InputFile excludedInput = InputFile.create(excludedFile, "src/main/java/org/bar/Bar.java", ImmutableMap.of(
- InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE,
- InputFile.ATTRIBUTE_CANONICAL_PATH, excludedFile.getCanonicalPath()
+ InputFile excludedInput = DefaultInputFile.create(excludedFile, "src/main/java/org/bar/Bar.java", ImmutableMap.of(
+ InputFile.ATTRIBUTE_TYPE, InputFile.TYPE_SOURCE
));
assertThat(filter.accept(excludedInput)).isFalse();
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java
new file mode 100644
index 00000000000..b149bbf4576
--- /dev/null
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java
@@ -0,0 +1,101 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.scan.filesystem;
+
+import org.junit.Test;
+import org.sonar.api.CoreProperties;
+import org.sonar.api.config.Settings;
+import org.sonar.api.scan.filesystem.FileQuery;
+import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.InputFileFilter;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class FileQueryFilterTest {
+
+ Settings settings = new Settings();
+
+ @Test
+ public void wrap_query_on_attributes() throws Exception {
+ FileQuery query = FileQuery.onSource();
+ FileQueryFilter filter = new FileQueryFilter(settings, query);
+
+ assertThat(filter.filters()).hasSize(1);
+ InputFileFilter typeFilter = filter.filters().get(0);
+ assertThat(typeFilter).isInstanceOf(AttributeFilter.class);
+ assertThat(((AttributeFilter) typeFilter).key()).isEqualTo(InputFile.ATTRIBUTE_TYPE);
+ assertThat(((AttributeFilter) typeFilter).values()).containsOnly(InputFile.TYPE_SOURCE);
+ }
+
+ @Test
+ public void wrap_query_on_inclusions() throws Exception {
+ FileQuery query = FileQuery.on().withInclusions("Foo*.java");
+ FileQueryFilter filter = new FileQueryFilter(settings, query);
+
+ assertThat(filter.filters()).hasSize(1);
+ InputFileFilter inclusionFilter = filter.filters().get(0);
+ assertThat(inclusionFilter).isInstanceOf(InclusionFilter.class);
+ assertThat(inclusionFilter.toString()).isEqualTo("Includes: Foo*.java");
+ }
+
+ @Test
+ public void wrap_query_on_exclusions() throws Exception {
+ FileQuery query = FileQuery.on().withExclusions("Foo*.java");
+ FileQueryFilter filter = new FileQueryFilter(settings, query);
+
+ assertThat(filter.filters()).hasSize(1);
+ InputFileFilter exclusionFilter = filter.filters().get(0);
+ assertThat(exclusionFilter).isInstanceOf(ExclusionFilter.class);
+ assertThat(exclusionFilter.toString()).isEqualTo("Excludes: Foo*.java");
+ }
+
+ @Test
+ public void all_files_by_default() throws Exception {
+ FileQuery query = FileQuery.on();
+ FileQueryFilter filter = new FileQueryFilter(settings, query);
+ assertThat(filter.filters()).isEmpty();
+ }
+
+ @Test
+ public void only_changed_files_by_default_if_incremental_mode() throws Exception {
+ settings.setProperty(CoreProperties.INCREMENTAL_PREVIEW, true);
+
+ FileQuery query = FileQuery.on();
+ FileQueryFilter filter = new FileQueryFilter(settings, query);
+
+ assertThat(filter.filters()).hasSize(1);
+ AttributeFilter statusFilter = (AttributeFilter) filter.filters().get(0);
+ assertThat(statusFilter.key()).isEqualTo(InputFile.ATTRIBUTE_STATUS);
+ assertThat(statusFilter.values()).containsOnly(InputFile.STATUS_ADDED, InputFile.STATUS_CHANGED);
+ }
+
+ @Test
+ public void get_all_files_even_if_incremental_mode() throws Exception {
+ settings.setProperty(CoreProperties.INCREMENTAL_PREVIEW, true);
+
+ FileQuery query = FileQuery.on().on(InputFile.ATTRIBUTE_STATUS, InputFile.STATUS_SAME);
+ FileQueryFilter filter = new FileQueryFilter(settings, query);
+
+ assertThat(filter.filters()).hasSize(1);
+ AttributeFilter statusFilter = (AttributeFilter) filter.filters().get(0);
+ assertThat(statusFilter.key()).isEqualTo(InputFile.ATTRIBUTE_STATUS);
+ assertThat(statusFilter.values()).containsOnly(InputFile.STATUS_SAME);
+ }
+}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java
index 38f391fa8ce..caf1b5b606f 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java
@@ -24,6 +24,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import java.io.File;
@@ -38,18 +39,16 @@ public class InclusionFilterTest {
InclusionFilter sourceRelativeFilter = new InclusionFilter("**/*Foo.java");
InclusionFilter absoluteFilter = new InclusionFilter("file:**/src/main/**Foo.java");
-
- File file = temp.newFile();
- InputFile inputFile = InputFile.create(file, "src/main/java/org/MyFoo.java", ImmutableMap.of(
- InputFile.ATTRIBUTE_CANONICAL_PATH, "/absolute/path/to/src/main/java/org/MyFoo.java",
+ File file = new File(temp.newFolder(), "src/main/java/org/MyFoo.java");
+ InputFile inputFile = DefaultInputFile.create(file, "src/main/java/org/MyFoo.java", ImmutableMap.of(
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "org/MyFoo.java"
));
assertThat(sourceRelativeFilter.accept(inputFile)).isTrue();
assertThat(absoluteFilter.accept(inputFile)).isTrue();
- inputFile = InputFile.create(file, "src/main/java/org/Other.java", ImmutableMap.of(
- InputFile.ATTRIBUTE_CANONICAL_PATH, "/absolute/path/to/src/main/java/org/Other.java",
+ file = new File(temp.newFolder(), "src/main/java/org/Other.java");
+ inputFile = DefaultInputFile.create(file, "src/main/java/org/Other.java", ImmutableMap.of(
InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "org/Other.java"
));
assertThat(sourceRelativeFilter.accept(inputFile)).isFalse();
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java
index 25b82b83961..3aca556e9c1 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java
@@ -25,7 +25,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.scan.filesystem.InputFile;
+import org.sonar.api.scan.filesystem.internal.DefaultInputFile;
import org.sonar.batch.index.Caches;
import static org.fest.assertions.Assertions.assertThat;
@@ -50,8 +50,8 @@ public class InputFileCacheTest {
@Test
public void should_add_input_file() throws Exception {
InputFileCache cache = new InputFileCache(caches);
- cache.put("struts", InputFile.create(temp.newFile(), "src/main/java/Foo.java", Maps.<String, String>newHashMap()));
- cache.put("struts-core", InputFile.create(temp.newFile(), "src/main/java/Foo.java", Maps.<String, String>newHashMap()));
+ cache.put("struts", DefaultInputFile.create(temp.newFile(), "src/main/java/Foo.java", Maps.<String, String>newHashMap()));
+ cache.put("struts-core", DefaultInputFile.create(temp.newFile(), "src/main/java/Foo.java", Maps.<String, String>newHashMap()));
assertThat(cache.byModule("struts")).hasSize(1);
assertThat(cache.byModule("struts-core")).hasSize(1);
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java
new file mode 100644
index 00000000000..5a53538434e
--- /dev/null
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java
@@ -0,0 +1,97 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.scan.filesystem;
+
+import org.junit.Test;
+import org.sonar.api.resources.Java;
+import org.sonar.api.resources.Language;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.fest.assertions.Fail.fail;
+
+public class LanguageRecognizerTest {
+
+ @Test
+ public void test_sanitizeExtension() throws Exception {
+ assertThat(LanguageRecognizer.sanitizeExtension(".cbl")).isEqualTo("cbl");
+ assertThat(LanguageRecognizer.sanitizeExtension(".CBL")).isEqualTo("cbl");
+ assertThat(LanguageRecognizer.sanitizeExtension("CBL")).isEqualTo("cbl");
+ assertThat(LanguageRecognizer.sanitizeExtension("cbl")).isEqualTo("cbl");
+ }
+
+ @Test
+ public void search_by_file_extension() throws Exception {
+ Language[] languages = new Language[]{Java.INSTANCE, new Cobol()};
+ LanguageRecognizer recognizer = new LanguageRecognizer(languages);
+
+ recognizer.start();
+ assertThat(recognizer.ofExtension("java")).isEqualTo(Java.KEY);
+ assertThat(recognizer.ofExtension("cbl")).isEqualTo("cobol");
+ assertThat(recognizer.ofExtension("CBL")).isEqualTo("cobol");
+ assertThat(recognizer.ofExtension("php")).isNull();
+ assertThat(recognizer.ofExtension("")).isNull();
+ assertThat(recognizer.ofExtension(null)).isNull();
+ recognizer.stop();
+ }
+
+ @Test
+ public void fail_if_conflict_of_file_extensions() throws Exception {
+ Language[] languages = new Language[]{Java.INSTANCE, new Language() {
+ @Override
+ public String getKey() {
+ return "java2";
+ }
+
+ @Override
+ public String getName() {
+ return "Java2";
+ }
+
+ @Override
+ public String[] getFileSuffixes() {
+ return new String[]{"java2", "java"};
+ }
+ }};
+
+ try {
+ new LanguageRecognizer(languages).start();
+ fail();
+ } catch (IllegalStateException e) {
+ assertThat(e.getMessage()).isEqualTo("File extension 'java' is declared by two languages: java and java2");
+ }
+ }
+
+ static class Cobol implements Language {
+ @Override
+ public String getKey() {
+ return "cobol";
+ }
+
+ @Override
+ public String getName() {
+ return "Cobol";
+ }
+
+ @Override
+ public String[] getFileSuffixes() {
+ return new String[]{"cbl", "cob"};
+ }
+ }
+}