Przeglądaj źródła

SONAR-926 store measures PROFILE and PROFILE_VERSION on single-lang modules

tags/4.2
Simon Brandhof 10 lat temu
rodzic
commit
63a869aacf

+ 12
- 5
sonar-batch/src/main/java/org/sonar/batch/rule/QProfileSensor.java Wyświetl plik

@@ -22,6 +22,8 @@ package org.sonar.batch.rule;
import org.sonar.api.batch.ModuleLanguages;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Measure;
import org.sonar.api.resources.Project;
import org.sonar.core.qualityprofile.db.QualityProfileDao;

@@ -47,15 +49,20 @@ public class QProfileSensor implements Sensor {
public void analyse(Project project, SensorContext context) {
for (String language : moduleLanguages.keys()) {
ModuleQProfiles.QProfile qProfile = moduleQProfiles.findByLanguage(language);
// TODO does not support multi-language modules
// Measure measure = new Measure(CoreMetrics.PROFILE, qProfile.name());
// Measure measureVersion = new Measure(CoreMetrics.PROFILE_VERSION, qProfile.version().doubleValue());
// context.saveMeasure(measure);
// context.saveMeasure(measureVersion);
if (qProfile != null) {
dao.updateUsedColumn(qProfile.id(), true);
}
}
if (moduleLanguages.keys().size() == 1) {
String language = moduleLanguages.keys().iterator().next();
ModuleQProfiles.QProfile qProfile = moduleQProfiles.findByLanguage(language);
if (qProfile != null) {
Measure measure = new Measure(CoreMetrics.PROFILE, qProfile.name());
Measure measureVersion = new Measure(CoreMetrics.PROFILE_VERSION, qProfile.version().doubleValue());
context.saveMeasure(measure);
context.saveMeasure(measureVersion);
}
}
}

@Override

+ 30
- 0
sonar-batch/src/test/java/org/sonar/batch/rule/QProfileSensorTest.java Wyświetl plik

@@ -23,7 +23,9 @@ import edu.emory.mathcs.backport.java.util.Collections;
import org.junit.Test;
import org.sonar.api.batch.ModuleLanguages;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.resources.Project;
import org.sonar.api.test.IsMeasure;
import org.sonar.core.persistence.AbstractDaoTestCase;
import org.sonar.core.qualityprofile.db.QualityProfileDao;

@@ -39,6 +41,13 @@ public class QProfileSensorTest extends AbstractDaoTestCase {
Project project = mock(Project.class);
SensorContext sensorContext = mock(SensorContext.class);

@Test
public void to_string() throws Exception {
QualityProfileDao dao = mock(QualityProfileDao.class);
QProfileSensor sensor = new QProfileSensor(moduleQProfiles, moduleLanguages, dao);
assertThat(sensor.toString()).isEqualTo("QProfileSensor");
}

@Test
public void no_qprofiles() throws Exception {
setupData("shared");
@@ -68,5 +77,26 @@ public class QProfileSensorTest extends AbstractDaoTestCase {
sensor.analyse(project, sensorContext);

checkTable("mark_profiles_as_used", "rules_profiles");

// no measures on multi-language modules
verifyZeroInteractions(sensorContext);
}

@Test
public void store_measures_on_single_lang_module() throws Exception {
setupData("shared");

QualityProfileDao dao = new QualityProfileDao(getMyBatis());
when(moduleQProfiles.findByLanguage("java")).thenReturn(new ModuleQProfiles.QProfile(dao.selectById(2)));
when(moduleQProfiles.findByLanguage("php")).thenReturn(new ModuleQProfiles.QProfile(dao.selectById(3)));
when(moduleQProfiles.findByLanguage("abap")).thenReturn(null);
when(moduleLanguages.keys()).thenReturn(Arrays.asList("java"));

QProfileSensor sensor = new QProfileSensor(moduleQProfiles, moduleLanguages, dao);
assertThat(sensor.shouldExecuteOnProject(project)).isTrue();
sensor.analyse(project, sensorContext);

verify(sensorContext).saveMeasure(argThat(new IsMeasure(CoreMetrics.PROFILE, "Java Two")));
verify(sensorContext).saveMeasure(argThat(new IsMeasure(CoreMetrics.PROFILE_VERSION, 20.0)));
}
}

+ 4
- 4
sonar-batch/src/test/resources/org/sonar/batch/rule/QProfileSensorTest/mark_profiles_as_used-result.xml Wyświetl plik

@@ -1,15 +1,15 @@
<dataset>

<rules_profiles id="1" name="Java One" language="java" parent_name="[null]" version="1"
<rules_profiles id="1" name="Java One" language="java" parent_name="[null]" version="10"
used_profile="[false]"/>

<rules_profiles id="2" name="Java Two" language="java" parent_name="[null]" version="1"
<rules_profiles id="2" name="Java Two" language="java" parent_name="[null]" version="20"
used_profile="[true]"/>

<rules_profiles id="3" name="Php One" language="php" parent_name="[null]" version="1"
<rules_profiles id="3" name="Php One" language="php" parent_name="[null]" version="30"
used_profile="[true]"/>

<rules_profiles id="4" name="Cobol One" language="cbl" parent_name="[null]" version="1"
<rules_profiles id="4" name="Cobol One" language="cbl" parent_name="[null]" version="40"
used_profile="[false]"/>

</dataset>

+ 4
- 4
sonar-batch/src/test/resources/org/sonar/batch/rule/QProfileSensorTest/shared.xml Wyświetl plik

@@ -1,15 +1,15 @@
<dataset>

<rules_profiles id="1" name="Java One" language="java" parent_name="[null]" version="1"
<rules_profiles id="1" name="Java One" language="java" parent_name="[null]" version="10"
used_profile="[false]"/>

<rules_profiles id="2" name="Java Two" language="java" parent_name="[null]" version="1"
<rules_profiles id="2" name="Java Two" language="java" parent_name="[null]" version="20"
used_profile="[false]"/>

<rules_profiles id="3" name="Php One" language="php" parent_name="[null]" version="1"
<rules_profiles id="3" name="Php One" language="php" parent_name="[null]" version="30"
used_profile="[false]"/>

<rules_profiles id="4" name="Cobol One" language="cbl" parent_name="[null]" version="1"
<rules_profiles id="4" name="Cobol One" language="cbl" parent_name="[null]" version="40"
used_profile="[false]"/>

</dataset>

Ładowanie…
Anuluj
Zapisz