diff options
author | Fabrice Bellingard <bellingard@gmail.com> | 2012-04-02 09:36:50 +0200 |
---|---|---|
committer | Fabrice Bellingard <bellingard@gmail.com> | 2012-04-02 09:36:50 +0200 |
commit | 71675b44d74ffb48a5049deae72ab90e4b3e7914 (patch) | |
tree | 889b0e5572a3c075fc10a1736cbab28824a4b338 | |
parent | 4b1920d286c4efbf8e912e9310ba070624264fd9 (diff) | |
download | sonarqube-71675b44d74ffb48a5049deae72ab90e4b3e7914.tar.gz sonarqube-71675b44d74ffb48a5049deae72ab90e4b3e7914.zip |
SONAR-3315 Improve error message when importing duplicate files
3 files changed, 62 insertions, 18 deletions
diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/JavaSourceImporter.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/JavaSourceImporter.java index 47a9e644a3b..3adb55000fd 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/JavaSourceImporter.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/JavaSourceImporter.java @@ -19,6 +19,9 @@ */ package org.sonar.plugins.squid; +import java.nio.charset.Charset; +import java.util.List; + import org.apache.commons.configuration.Configuration; import org.apache.commons.io.FileUtils; import org.sonar.api.CoreProperties; @@ -26,13 +29,14 @@ import org.sonar.api.batch.DependedUpon; import org.sonar.api.batch.Phase; import org.sonar.api.batch.Sensor; import org.sonar.api.batch.SensorContext; -import org.sonar.api.resources.*; +import org.sonar.api.resources.InputFile; +import org.sonar.api.resources.Java; +import org.sonar.api.resources.JavaFile; +import org.sonar.api.resources.Project; +import org.sonar.api.resources.ProjectFileSystem; import org.sonar.api.utils.SonarException; import org.sonar.java.api.JavaUtils; -import java.nio.charset.Charset; -import java.util.List; - @Phase(name = Phase.Name.PRE) @DependedUpon(JavaUtils.BARRIER_BEFORE_SQUID) public final class JavaSourceImporter implements Sensor { @@ -82,10 +86,11 @@ public final class JavaSourceImporter implements Sensor { String source = FileUtils.readFileToString(inputFile.getFile(), sourcesEncoding.name()); context.saveSource(javaFile, source); } - + } catch (SonarException e) { + throw e; } catch (Exception e) { throw new SonarException("Unable to read and import the source file : '" + inputFile.getFile().getAbsolutePath() + "' with the charset : '" - + sourcesEncoding.name() + "'.", e); + + sourcesEncoding.name() + "'.", e); } } diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/JavaSourceImporterTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/JavaSourceImporterTest.java index 987757ff6f4..9727e5e525e 100644 --- a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/JavaSourceImporterTest.java +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/JavaSourceImporterTest.java @@ -19,24 +19,32 @@ */ package org.sonar.plugins.squid; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; + import org.junit.Before; -import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mockito; import org.sonar.api.batch.SensorContext; import org.sonar.api.resources.InputFile; import org.sonar.api.resources.JavaFile; import org.sonar.api.utils.SonarException; -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; - -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.*; - public class JavaSourceImporterTest { + @Rule + public ExpectedException thrown = ExpectedException.none(); + private JavaSourceImporter importer; private SensorContext context; private InputFile inputFile; @@ -61,4 +69,35 @@ public class JavaSourceImporterTest { verify(context).saveSource(eq(javaFile), anyString()); } -}
\ No newline at end of file + @Test + public void testImportUnexistingFile() { + File fileToImport = new File("unexisting-file.java"); + inputFile = mock(InputFile.class); + when(inputFile.getRelativePath()).thenReturn("UndocumentedApi.java"); + when(inputFile.getFile()).thenReturn(fileToImport); + when(inputFile.getFileBaseDir()).thenReturn(fileToImport.getParentFile()); + + JavaFile javaFile = JavaFile.fromRelativePath("UndocumentedApi.java", true); + when(context.isIndexed(javaFile, true)).thenReturn(true); + + thrown.expect(SonarException.class); + thrown.expectMessage("Unable to read and import the source file"); + thrown.expectMessage("unexisting-file.java"); + importer.importSource(context, javaFile, inputFile, Charset.defaultCharset()); + } + + /** + * SONAR-3315 + */ + @Test + public void testDuplicateSource() { + JavaFile javaFile = JavaFile.fromRelativePath("UndocumentedApi.java", true); + when(context.isIndexed(javaFile, true)).thenReturn(true); + Mockito.doThrow(new SonarException("Duplicate source for resource")).when(context).saveSource(any(JavaFile.class), anyString()); + + thrown.expect(SonarException.class); + thrown.expectMessage("Duplicate source for resource"); + importer.importSource(context, javaFile, inputFile, Charset.defaultCharset()); + } + +} diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/DuplicatedSourceException.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/DuplicatedSourceException.java index 8b10eba7d12..0ff8fc72751 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/DuplicatedSourceException.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/DuplicatedSourceException.java @@ -27,7 +27,7 @@ import org.sonar.api.utils.SonarException; */ public final class DuplicatedSourceException extends SonarException { - public DuplicatedSourceException(Resource resource) { - super(ObjectUtils.toString(resource)); + public DuplicatedSourceException(Resource<?> resource) { + super("Duplicate source for resource: " + ObjectUtils.toString(resource)); } } |