*/
String getVersion();
+ /**
+ * Is this component a unit test or test ?
+ */
+ boolean isUnitTest();
+
List<Component> getChildren();
}
private final Type type;
private final int ref;
private final String name, version;
+ private final boolean isUnitTest;
private final List<Component> children;
// Mutable values
this.type = convertType(component.getType());
this.name = component.getName();
this.version = component.hasVersion() ? component.getVersion() : null;
+ this.isUnitTest = component.hasIsTest() && component.getIsTest();
this.children = children == null ? Collections.<Component>emptyList() : copyOf(filter(children, notNull()));
}
return this;
}
+ @Override
+ public boolean isUnitTest() {
+ return isUnitTest;
+ }
+
@Override
public List<Component> getChildren() {
return children;
ComponentDto componentDto = createComponentDto(reportComponent, file);
componentDto.setScope(Scopes.FILE);
- componentDto.setQualifier(getFileQualifier(reportComponent));
+ componentDto.setQualifier(getFileQualifier(file));
componentDto.setName(FilenameUtils.getName(reportComponent.getPath()));
componentDto.setLongName(reportComponent.getPath());
if (reportComponent.hasPath()) {
return isUpdated;
}
- private static String getFileQualifier(BatchReport.Component reportComponent) {
- return reportComponent.getIsTest() ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE;
+ private static String getFileQualifier(Component component) {
+ return component.isUnitTest() ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE;
}
private static Map<String, ComponentDto> componentDtosByKey(List<ComponentDto> components) {
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.Scopes;
import org.sonar.api.utils.System2;
-import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.core.component.SnapshotDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.computation.batch.BatchReportReader;
processChildren(component, directorySnapshot);
break;
case FILE:
- BatchReport.Component reportComponent = reportReader.readComponent(component.getRef());
- SnapshotDto fileSnapshot = persistSnapshot(componentId, getFileQualifier(reportComponent), Scopes.FILE, null, parentSnapshot, false);
+ SnapshotDto fileSnapshot = persistSnapshot(componentId, getFileQualifier(component), Scopes.FILE, null, parentSnapshot, false);
addToCache(component, fileSnapshot);
break;
default:
}
}
- private static String getFileQualifier(BatchReport.Component reportComponent) {
- return reportComponent.getIsTest() ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE;
+ private static String getFileQualifier(Component component) {
+ return component.isUnitTest() ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE;
}
@Override
@Override
public void visitFile(Component file) {
- BatchReport.Component batchComponent = reportReader.readComponent(file.getRef());
- if (batchComponent.getIsTest()) {
- persistTestResults(batchComponent);
+ if (file.isUnitTest()) {
+ persistTestResults(file);
}
}
- private void persistTestResults(BatchReport.Component component) {
- Multimap<String, FileSourceDb.Test.Builder> testsByName = buildDbTests(component);
+ private void persistTestResults(Component component) {
+ Multimap<String, FileSourceDb.Test.Builder> testsByName = buildDbTests(component.getRef());
Table<String, String, FileSourceDb.Test.CoveredFile.Builder> coveredFilesByName = loadCoverageDetails(component.getRef());
List<FileSourceDb.Test> tests = addCoveredFilesToTests(testsByName, coveredFilesByName);
- if (checkIfThereAreUnprocessedCoverageDetails(testsByName, coveredFilesByName, component)) {
+ if (checkIfThereAreUnprocessedCoverageDetails(testsByName, coveredFilesByName, component.getKey())) {
hasUnprocessedCoverageDetails = true;
}
}
private boolean checkIfThereAreUnprocessedCoverageDetails(Multimap<String, FileSourceDb.Test.Builder> testsByName,
- Table<String, String, FileSourceDb.Test.CoveredFile.Builder> coveredFilesByName,
- BatchReport.Component component) {
+ Table<String, String, FileSourceDb.Test.CoveredFile.Builder> coveredFilesByName, String componentKey) {
Set<String> unprocessedCoverageDetailNames = new HashSet<>(coveredFilesByName.rowKeySet());
unprocessedCoverageDetailNames.removeAll(testsByName.keySet());
boolean hasUnprocessedCoverage = !unprocessedCoverageDetailNames.isEmpty();
if (hasUnprocessedCoverage) {
- LOG.trace("The following test coverages for file '{}' have not been taken into account: {}", component.getPath(), Joiner.on(", ").join(unprocessedCoverageDetailNames));
+ LOG.trace("The following test coverages for file '{}' have not been taken into account: {}", componentKey, Joiner.on(", ").join(unprocessedCoverageDetailNames));
}
return hasUnprocessedCoverage;
}
return tests;
}
- private Multimap<String, FileSourceDb.Test.Builder> buildDbTests(BatchReport.Component component) {
+ private Multimap<String, FileSourceDb.Test.Builder> buildDbTests(int componentRed) {
Multimap<String, FileSourceDb.Test.Builder> tests = ArrayListMultimap.create();
- try (CloseableIterator<BatchReport.Test> testIterator = reportReader.readTests(component.getRef())) {
+ try (CloseableIterator<BatchReport.Test> testIterator = reportReader.readTests(componentRed)) {
while (testIterator.hasNext()) {
BatchReport.Test batchTest = testIterator.next();
FileSourceDb.Test.Builder dbTest = FileSourceDb.Test.newBuilder();
private final Type type;
private final int ref;
private final String uuid, key, name, version;
+ private final boolean isUnitTest;
private final List<Component> children;
private DumbComponent(Builder builder) {
this.key = builder.key;
this.name = builder.name;
this.version = builder.version;
+ this.isUnitTest = builder.isUnitTest;
this.children = ImmutableList.copyOf(builder.children);
}
return version;
}
+ @Override
+ public boolean isUnitTest() {
+ return isUnitTest;
+ }
+
@Override
public int getRef() {
return ref;
private final Type type;
private final int ref;
private String uuid, key, name, version;
+ private boolean isUnitTest;
private final List<Component> children = new ArrayList<>();
private Builder(Type type, int ref) {
return this;
}
+ public Builder setUnitTest(boolean b){
+ this.isUnitTest = b;
+ return this;
+ }
+
public Builder addChildren(Component... c) {
this.children.addAll(asList(c));
return this;
treeRootHolder.setRoot(DumbComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").setKey(PROJECT_KEY).addChildren(
DumbComponent.builder(Component.Type.DIRECTORY, 2).setUuid("CDEF").setKey(PROJECT_KEY + ":src/test/java/dir").addChildren(
- DumbComponent.builder(Component.Type.FILE, 3).setUuid("DEFG").setKey(PROJECT_KEY + ":src/test/java/dir/FooTest.java").build())
+ DumbComponent.builder(Component.Type.FILE, 3).setUuid("DEFG").setKey(PROJECT_KEY + ":src/test/java/dir/FooTest.java").setUnitTest(true).build())
.build())
.build());
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.sonar.api.CoreProperties;
-import org.sonar.api.config.Settings;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
-import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.SnapshotDto;
DbIdsRepository dbIdsRepository;
- Settings settings = new Settings();
-
DbSession session;
DbClient dbClient;
dbClient.componentDao().insert(session, fileDto);
session.commit();
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.FILE)
- .build());
-
Component file = DumbComponent.builder(Component.Type.FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java").build();
Component directory = DumbComponent.builder(Component.Type.DIRECTORY, 3).setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir").addChildren(file).build();
Component module = DumbComponent.builder(Component.Type.MODULE, 2).setUuid("BCDE").setKey("MODULE_KEY").setVersion("1.1").addChildren(directory).build();
dbClient.componentDao().insert(session, fileDto);
session.commit();
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.FILE)
- .setIsTest(true)
- .build());
-
- Component file = DumbComponent.builder(Component.Type.FILE, 3).setUuid("DEFG").setKey(PROJECT_KEY + ":src/main/java/dir/Foo.java").build();
+ Component file = DumbComponent.builder(Component.Type.FILE, 3).setUuid("DEFG").setKey(PROJECT_KEY + ":src/main/java/dir/Foo.java").setUnitTest(true).build();
Component directory = DumbComponent.builder(Component.Type.DIRECTORY, 2).setUuid("CDEF").setKey(PROJECT_KEY + ":src/main/java/dir").addChildren(file).build();
Component project = DumbComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").setKey(PROJECT_KEY).addChildren(directory).build();
treeRootHolder.setRoot(project);
session.commit();
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.FILE)
- .setPath("src/main/java/dir/Foo.java")
- .setLanguage("java")
- .build());
-
Component file = DumbComponent.builder(Component.Type.FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java").build();
Component directory = DumbComponent.builder(Component.Type.DIRECTORY, 3).setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir").addChildren(file).build();
Component module = DumbComponent.builder(Component.Type.MODULE, 2).setUuid("BCDE").setKey("MODULE_KEY").addChildren(directory).build();
sut = new PersistTestsStep(dbClient, system2, reportReader, treeRootHolder);
- initBasicReport();
-
root = DumbComponent.builder(Component.Type.PROJECT, 1).setUuid(PROJECT_UUID).setKey(PROJECT_KEY).addChildren(
DumbComponent.builder(Component.Type.MODULE, 2).setUuid("MODULE_UUID").setKey("MODULE_KEY").addChildren(
- DumbComponent.builder(Component.Type.FILE, 3).setUuid(TEST_FILE_UUID_1).setKey("TEST_FILE1_KEY").build(),
- DumbComponent.builder(Component.Type.FILE, 4).setUuid(TEST_FILE_UUID_2).setKey("TEST_FILE2_KEY").build(),
+ DumbComponent.builder(Component.Type.FILE, 3).setUuid(TEST_FILE_UUID_1).setKey("TEST_FILE1_KEY").setUnitTest(true).build(),
+ DumbComponent.builder(Component.Type.FILE, 4).setUuid(TEST_FILE_UUID_2).setKey("TEST_FILE2_KEY").setUnitTest(true).build(),
DumbComponent.builder(Component.Type.FILE, 5).setUuid(MAIN_FILE_UUID_1).setKey("MAIN_FILE1_KEY").build(),
DumbComponent.builder(Component.Type.FILE, 6).setUuid(MAIN_FILE_UUID_2).setKey("MAIN_FILE2_KEY").build()
).build()
assertThat(log.logs(LoggerLevel.WARN)).hasSize(1);
assertThat(log.logs(LoggerLevel.WARN).get(0)).isEqualTo("Some coverage tests are not taken into account during analysis of project 'PROJECT_KEY'");
assertThat(log.logs(LoggerLevel.TRACE)).hasSize(2);
- assertThat(log.logs(LoggerLevel.TRACE).get(0)).isEqualTo("The following test coverages for file 'TEST-PATH-1' have not been taken into account: name#2");
- assertThat(log.logs(LoggerLevel.TRACE).get(1)).startsWith("The following test coverages for file 'TEST-PATH-2' have not been taken into account: ");
+ assertThat(log.logs(LoggerLevel.TRACE).get(0)).isEqualTo("The following test coverages for file 'TEST_FILE1_KEY' have not been taken into account: name#2");
+ assertThat(log.logs(LoggerLevel.TRACE).get(1)).startsWith("The following test coverages for file 'TEST_FILE2_KEY' have not been taken into account: ");
assertThat(log.logs(LoggerLevel.TRACE).get(1)).contains("name#1", "name#2");
}
)
.build();
}
-
- private void initBasicReport() {
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .setProjectKey(PROJECT_KEY)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .addAllChildRef(Arrays.asList(TEST_FILE_REF_1, TEST_FILE_REF_2, MAIN_FILE_REF_1, MAIN_FILE_REF_2))
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(TEST_FILE_REF_1)
- .setIsTest(true)
- .setType(Constants.ComponentType.FILE)
- .setPath(TEST_FILE_PATH_1)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(TEST_FILE_REF_2)
- .setIsTest(true)
- .setType(Constants.ComponentType.FILE)
- .setPath(TEST_FILE_PATH_2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(MAIN_FILE_REF_1)
- .setType(Constants.ComponentType.FILE)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(MAIN_FILE_REF_2)
- .setType(Constants.ComponentType.FILE)
- .build());
- }
}