import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.sonar.api.CoreProperties;
import org.sonar.api.batch.AbstractCoverageExtension;
import org.sonar.api.batch.DependsUpon;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
-import org.sonar.api.batch.maven.MavenPlugin;
-import org.sonar.api.batch.maven.MavenSurefireUtils;
import org.sonar.api.resources.Java;
import org.sonar.api.resources.JavaFile;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
import org.sonar.plugins.surefire.api.AbstractSurefireParser;
+import org.sonar.plugins.surefire.api.SurefireUtils;
import java.io.File;
}
public void analyse(Project project, SensorContext context) {
- File dir = getReportsDirectory(project);
+ File dir = SurefireUtils.getReportsDirectory(project);
collect(project, context, dir);
}
- protected File getReportsDirectory(Project project) {
- File dir = getReportsDirectoryFromProperty(project);
- if (dir == null) {
- dir = getReportsDirectoryFromPluginConfiguration(project);
- }
- if (dir == null) {
- dir = getReportsDirectoryFromDefaultConfiguration(project);
- }
- return dir;
- }
-
- private File getReportsDirectoryFromProperty(Project project) {
- String path = (String) project.getProperty(CoreProperties.SUREFIRE_REPORTS_PATH_PROPERTY);
- if (path != null) {
- return project.getFileSystem().resolvePath(path);
- }
- return null;
- }
-
- private File getReportsDirectoryFromPluginConfiguration(Project project) {
- MavenPlugin plugin = MavenPlugin.getPlugin(project.getPom(), MavenSurefireUtils.GROUP_ID, MavenSurefireUtils.ARTIFACT_ID);
- if (plugin != null) {
- String path = plugin.getParameter("reportsDirectory");
- if (path != null) {
- return project.getFileSystem().resolvePath(path);
- }
- }
- return null;
- }
-
- private File getReportsDirectoryFromDefaultConfiguration(Project project) {
- return new File(project.getFileSystem().getBuildDir(), "surefire-reports");
- }
-
protected void collect(Project project, SensorContext context, File reportsDir) {
logger.info("parsing {}", reportsDir);
new AbstractSurefireParser() {
@Override
- protected Resource<?> getUnitTestResource(TestSuiteReport fileReport) {
- return new JavaFile(fileReport.getClassKey(), true);
+ protected Resource<?> getUnitTestResource(String classKey) {
+ return new JavaFile(classKey, true);
}
}.collect(project, context, reportsDir);
}
}
}
testCaseDetails.append("</tests-details>");
- context.saveMeasure(getUnitTestResource(fileReport), new Measure(CoreMetrics.TEST_DATA, testCaseDetails.toString()));
+ context.saveMeasure(getUnitTestResource(fileReport.getClassKey()), new Measure(CoreMetrics.TEST_DATA, testCaseDetails.toString()));
}
private void saveClassMeasure(SensorContext context, TestSuiteReport fileReport, Metric metric, double value) {
if ( !Double.isNaN(value)) {
- context.saveMeasure(getUnitTestResource(fileReport), metric, value);
+ context.saveMeasure(getUnitTestResource(fileReport.getClassKey()), metric, value);
}
}
- protected abstract Resource<?> getUnitTestResource(TestSuiteReport fileReport);
+ protected abstract Resource<?> getUnitTestResource(String classKey);
}
--- /dev/null
+package org.sonar.plugins.surefire.api;
+
+import org.sonar.api.CoreProperties;
+import org.sonar.api.batch.maven.MavenPlugin;
+import org.sonar.api.batch.maven.MavenSurefireUtils;
+import org.sonar.api.resources.Project;
+
+import java.io.File;
+
+/**
+ * @since 2.4
+ */
+public final class SurefireUtils {
+
+ public static File getReportsDirectory(Project project) {
+ File dir = getReportsDirectoryFromProperty(project);
+ if (dir == null) {
+ dir = getReportsDirectoryFromPluginConfiguration(project);
+ }
+ if (dir == null) {
+ dir = getReportsDirectoryFromDefaultConfiguration(project);
+ }
+ return dir;
+ }
+
+ private static File getReportsDirectoryFromProperty(Project project) {
+ String path = (String) project.getProperty(CoreProperties.SUREFIRE_REPORTS_PATH_PROPERTY);
+ if (path != null) {
+ return project.getFileSystem().resolvePath(path);
+ }
+ return null;
+ }
+
+ private static File getReportsDirectoryFromPluginConfiguration(Project project) {
+ MavenPlugin plugin = MavenPlugin.getPlugin(project.getPom(), MavenSurefireUtils.GROUP_ID, MavenSurefireUtils.ARTIFACT_ID);
+ if (plugin != null) {
+ String path = plugin.getParameter("reportsDirectory");
+ if (path != null) {
+ return project.getFileSystem().resolvePath(path);
+ }
+ }
+ return null;
+ }
+
+ private static File getReportsDirectoryFromDefaultConfiguration(Project project) {
+ return new File(project.getFileSystem().getBuildDir(), "surefire-reports");
+ }
+
+ private SurefireUtils() {
+ }
+
+}
*/
package org.sonar.plugins.surefire;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.anyDouble;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import org.apache.commons.lang.ObjectUtils;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import java.io.StringReader;
import java.net.URISyntaxException;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.anyDouble;
-import static org.mockito.Matchers.anyObject;
-import static org.mockito.Matchers.argThat;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.*;
-
public class SurefireSensorTest {
@Test
assertThat(new SurefireSensor().shouldExecuteOnProject(project), is(true));
}
- @Test
- public void shouldGetReportsFromProperty() {
- Project project = MavenTestUtils.loadProjectFromPom(getClass(), "shouldGetReportsFromProperty/pom.xml");
- assertThat(new SurefireSensor().getReportsDirectory(project).exists(), is(true));
- assertThat(new SurefireSensor().getReportsDirectory(project).isDirectory(), is(true));
- }
-
- @Test
- public void shouldGetReportsFromPluginConfiguration() {
- Project project = MavenTestUtils.loadProjectFromPom(getClass(), "shouldGetReportsFromPluginConfiguration/pom.xml");
- assertThat(new SurefireSensor().getReportsDirectory(project).exists(), is(true));
- assertThat(new SurefireSensor().getReportsDirectory(project).isDirectory(), is(true));
- }
-
@Test
public void shouldNotFailIfReportsNotFound() {
Project project = MavenTestUtils.loadProjectFromPom(getClass(), "shouldNotFailIfReportsNotFound/pom.xml");
--- /dev/null
+package org.sonar.plugins.surefire.api;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+import org.sonar.api.resources.Project;
+import org.sonar.api.test.MavenTestUtils;
+
+public class SurefireUtilsTest {
+
+ @Test
+ public void shouldGetReportsFromProperty() {
+ Project project = MavenTestUtils.loadProjectFromPom(getClass(), "shouldGetReportsFromProperty/pom.xml");
+ assertThat(SurefireUtils.getReportsDirectory(project).exists(), is(true));
+ assertThat(SurefireUtils.getReportsDirectory(project).isDirectory(), is(true));
+ }
+
+ @Test
+ public void shouldGetReportsFromPluginConfiguration() {
+ Project project = MavenTestUtils.loadProjectFromPom(getClass(), "shouldGetReportsFromPluginConfiguration/pom.xml");
+ assertThat(SurefireUtils.getReportsDirectory(project).exists(), is(true));
+ assertThat(SurefireUtils.getReportsDirectory(project).isDirectory(), is(true));
+ }
+
+}
+++ /dev/null
-hack for maven in order the directory target/surefire to be included in unit tests classpath
\ No newline at end of file
+++ /dev/null
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>fake.group</groupId>
- <artifactId>fake.artifactId</artifactId>
- <packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <reportsDirectory>build/junit</reportsDirectory>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
\ No newline at end of file
+++ /dev/null
-hack for maven in order the directory target/surefire to be included in unit tests classpath
\ No newline at end of file
+++ /dev/null
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>fake.group</groupId>
- <artifactId>fake.artifactId</artifactId>
- <packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <reportsDirectory>build/junit</reportsDirectory>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
\ No newline at end of file
+++ /dev/null
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>fake.group</groupId>
- <artifactId>fake.artifactId</artifactId>
- <packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
-
- <properties>
- <sonar.surefire.reportsPath>target/surefire</sonar.surefire.reportsPath>
- </properties>
-</project>
\ No newline at end of file
+++ /dev/null
-hack for maven in order the directory target/surefire to be included in unit tests classpath
\ No newline at end of file
--- /dev/null
+hack for maven in order the directory target/surefire to be included in unit tests classpath
\ No newline at end of file
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>fake.group</groupId>
+ <artifactId>fake.artifactId</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4</version>
+ <configuration>
+ <reportsDirectory>build/junit</reportsDirectory>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>fake.group</groupId>
+ <artifactId>fake.artifactId</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+
+ <properties>
+ <sonar.surefire.reportsPath>target/surefire</sonar.surefire.reportsPath>
+ </properties>
+</project>
\ No newline at end of file
--- /dev/null
+hack for maven in order the directory target/surefire to be included in unit tests classpath
\ No newline at end of file