aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabrice Bellingard <bellingard@gmail.com>2012-04-02 09:36:50 +0200
committerFabrice Bellingard <bellingard@gmail.com>2012-04-02 09:36:50 +0200
commit71675b44d74ffb48a5049deae72ab90e4b3e7914 (patch)
tree889b0e5572a3c075fc10a1736cbab28824a4b338
parent4b1920d286c4efbf8e912e9310ba070624264fd9 (diff)
downloadsonarqube-71675b44d74ffb48a5049deae72ab90e4b3e7914.tar.gz
sonarqube-71675b44d74ffb48a5049deae72ab90e4b3e7914.zip
SONAR-3315 Improve error message when importing duplicate files
-rw-r--r--plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/JavaSourceImporter.java17
-rw-r--r--plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/JavaSourceImporterTest.java59
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/resources/DuplicatedSourceException.java4
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));
}
}