*/
package org.sonar.plugins.jacoco;
+import org.sonar.api.resources.ResourceUtils;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import org.apache.commons.lang.StringUtils;
int analyzedResources = 0;
for (ISourceFileCoverage coverage : coverageBuilder.getSourceFiles()) {
- JavaFile resource = getResource(coverage);
- // Do not save measures on resource which doesn't exist in the context
- if (context.getResource(resource) != null) {
+ JavaFile resource = getResource(coverage, context);
+ if (resource != null) {
if (!isExcluded(coverage, excludes)) {
analyzeFile(resource, coverage, context);
}
}
@VisibleForTesting
- static JavaFile getResource(ISourceFileCoverage coverage) {
+ static JavaFile getResource(ISourceFileCoverage coverage, SensorContext context) {
String packageName = StringUtils.replaceChars(coverage.getPackageName(), '/', '.');
String fileName = StringUtils.substringBeforeLast(coverage.getName(), ".");
- return new JavaFile(packageName, fileName);
+
+ JavaFile resource = new JavaFile(packageName, fileName);
+
+ JavaFile resourceInContext = context.getResource(resource);
+ if (null == resourceInContext) {
+ return null; // Do not save measures on resource which doesn't exist in the context
+ }
+ if (ResourceUtils.isUnitTestClass(resourceInContext)) {
+ return null; // Ignore unit tests
+ }
+
+ return resourceInContext;
}
/**
*/
package org.sonar.plugins.jacoco;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
import org.jacoco.core.analysis.ISourceFileCoverage;
import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.sonar.api.batch.SensorContext;
import org.sonar.api.resources.JavaFile;
+import org.sonar.api.resources.Resource;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class AbstractAnalyzerTest {
+ ISourceFileCoverage coverage = mock(ISourceFileCoverage.class);
+ SensorContext context = mock(SensorContext.class);
+
@Test
- public void defaultPackage() {
- ISourceFileCoverage coverage = mock(ISourceFileCoverage.class);
- when(coverage.getPackageName()).thenReturn("").thenReturn("org/example");
+ public void should_recognize_default_package() {
+ when(coverage.getPackageName()).thenReturn("");
when(coverage.getName()).thenReturn("Hello.java");
- assertThat(AbstractAnalyzer.getResource(coverage), is(new JavaFile("[default].Hello")));
- assertThat(AbstractAnalyzer.getResource(coverage), is(new JavaFile("org.example.Hello")));
+ when(context.getResource(any(Resource.class))).thenAnswer(sameResource());
+
+ JavaFile resource = AbstractAnalyzer.getResource(coverage, context);
+
+ assertThat(resource).isEqualTo(new JavaFile("[default].Hello"));
+ }
+
+ @Test
+ public void should_recognize_non_default_package() {
+ when(coverage.getPackageName()).thenReturn("org/example");
+ when(coverage.getName()).thenReturn("Hello.java");
+ when(context.getResource(any(Resource.class))).thenAnswer(sameResource());
+
+ JavaFile resource = AbstractAnalyzer.getResource(coverage, context);
+
+ assertThat(resource).isEqualTo(new JavaFile("org.example.Hello"));
+ }
+
+ @Test
+ public void should_ignore_resource_not_found_in_context() {
+ when(coverage.getPackageName()).thenReturn("org/example");
+ when(coverage.getName()).thenReturn("HelloTest.java");
+ when(context.getResource(any(Resource.class))).thenReturn(null);
+
+ JavaFile resource = AbstractAnalyzer.getResource(coverage, context);
+
+ assertThat(resource).isNull();
+ }
+
+ @Test
+ public void should_ignore_unit_tests() {
+ when(coverage.getPackageName()).thenReturn("org/example");
+ when(coverage.getName()).thenReturn("HelloTest.java");
+ when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("HelloTest.java", true));
+
+ JavaFile resource = AbstractAnalyzer.getResource(coverage, context);
+
+ assertThat(resource).isNull();
+ }
+
+ static Answer<Resource> sameResource() {
+ return new Answer<Resource>() {
+ public Resource answer(InvocationOnMock invocation) {
+ return (Resource) invocation.getArguments()[0];
+ }
+ };
}
}