@@ -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 |
@@ -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))); | |||
} | |||
} |
@@ -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> |
@@ -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> |