Skip to content

Commit dd9dac2

Browse files
pynicolasalban-auzeill
authored andcommitted
SONARPY-235 PylintImportSensor: move logic to describe() method
1 parent 52f3148 commit dd9dac2

2 files changed

Lines changed: 35 additions & 73 deletions

File tree

sonar-python-plugin/src/main/java/org/sonar/plugins/python/pylint/PylintImportSensor.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.sonar.api.batch.fs.InputFile;
3232
import org.sonar.api.batch.rule.ActiveRule;
3333
import org.sonar.api.batch.sensor.SensorContext;
34+
import org.sonar.api.batch.sensor.SensorDescriptor;
3435
import org.sonar.api.batch.sensor.issue.NewIssue;
3536
import org.sonar.api.config.Settings;
3637
import org.sonar.api.rule.RuleKey;
@@ -47,15 +48,11 @@ public PylintImportSensor(Settings conf) {
4748
}
4849

4950
@Override
50-
public void execute(SensorContext context) {
51-
if (shouldExecute(context)) {
52-
super.execute(context);
53-
}
54-
}
55-
56-
private boolean shouldExecute(SensorContext context) {
57-
boolean hasRules = !context.activeRules().findByRepository(PylintRuleRepository.REPOSITORY_KEY).isEmpty();
58-
return hasRules && conf.getString(REPORT_PATH_KEY) != null;
51+
public void describe(SensorDescriptor descriptor) {
52+
super.describe(descriptor);
53+
descriptor
54+
.createIssuesForRuleRepository(PylintRuleRepository.REPOSITORY_KEY)
55+
.requireProperty(REPORT_PATH_KEY);
5956
}
6057

6158
@Override

sonar-python-plugin/src/test/java/org/sonar/plugins/python/pylint/PylintImportSensorTest.java

Lines changed: 29 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -21,94 +21,59 @@
2121

2222
import java.io.File;
2323
import java.nio.charset.StandardCharsets;
24-
import java.util.List;
25-
import java.util.concurrent.atomic.AtomicBoolean;
26-
import org.junit.Before;
2724
import org.junit.Test;
28-
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
25+
import org.sonar.api.batch.fs.InputFile;
2926
import org.sonar.api.batch.fs.internal.DefaultInputFile;
3027
import org.sonar.api.batch.fs.internal.FileMetadata;
31-
import org.sonar.api.batch.rule.ActiveRules;
3228
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
29+
import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;
3330
import org.sonar.api.batch.sensor.internal.SensorContextTester;
3431
import org.sonar.api.config.MapSettings;
35-
import org.sonar.api.config.Settings;
3632
import org.sonar.api.rule.RuleKey;
3733
import org.sonar.plugins.python.Python;
3834

3935
import static org.assertj.core.api.Assertions.assertThat;
40-
import static org.mockito.Mockito.mock;
4136

4237
public class PylintImportSensorTest {
4338

44-
private File baseDir = new File("src/test/resources/org/sonar/plugins/python/pylint");
45-
private Settings settings;
46-
private DefaultFileSystem fileSystem;
47-
private ActiveRules activeRules;
48-
private DefaultInputFile inputFile;
49-
50-
@Before
51-
public void init() {
52-
settings = new MapSettings();
53-
settings.setProperty(PylintImportSensor.REPORT_PATH_KEY, "pylint-report.txt");
39+
@Test
40+
public void parse_report() {
41+
File baseDir = new File("src/test/resources/org/sonar/plugins/python/pylint");
42+
SensorContextTester context = SensorContextTester.create(baseDir);
5443

55-
fileSystem = new DefaultFileSystem(baseDir);
44+
context.settings().setProperty(PylintImportSensor.REPORT_PATH_KEY, "pylint-report.txt");
5645

5746
File file = new File(baseDir, "src/file1.py");
58-
inputFile = new DefaultInputFile("", "src/file1.py")
47+
DefaultInputFile inputFile = new DefaultInputFile("", "src/file1.py")
5948
.setLanguage(Python.KEY)
6049
.initMetadata(new FileMetadata().readMetadata(file, StandardCharsets.UTF_8));
61-
fileSystem.add(inputFile);
62-
activeRules = (new ActiveRulesBuilder())
63-
.create(RuleKey.of(PylintRuleRepository.REPOSITORY_KEY, "C0103"))
64-
.setName("Invalid name")
65-
.activate()
66-
.create(RuleKey.of(PylintRuleRepository.REPOSITORY_KEY, "C0111"))
67-
.setName("Missing docstring")
68-
.activate()
69-
.build();
70-
}
71-
72-
@Test
73-
public void shouldExecuteOnlyWhenNecessary() {
74-
ActiveRules emptyProfile = mock(ActiveRules.class);
75-
Settings settingsWithoutProperty = new MapSettings();
76-
77-
assertThat(shouldExecute(activeRules, settings)).isTrue();
78-
assertThat(shouldExecute(emptyProfile, settings)).isFalse();
79-
80-
assertThat(shouldExecute(activeRules, settingsWithoutProperty)).isFalse();
81-
assertThat(shouldExecute(emptyProfile, settingsWithoutProperty)).isFalse();
82-
}
50+
context.fileSystem().add(inputFile);
8351

84-
private boolean shouldExecute(ActiveRules activeRules, Settings settings) {
85-
SensorContextTester ctx = SensorContextTester.create(baseDir);
86-
ctx.setActiveRules(activeRules);
87-
ctx.setSettings(settings);
88-
ctx.setFileSystem(fileSystem);
89-
AtomicBoolean executed = new AtomicBoolean(false);
90-
PylintImportSensor sensor = new PylintImportSensor(settings) {
91-
@Override
92-
protected void processReports(org.sonar.api.batch.sensor.SensorContext context, List<File> reports) {
93-
super.processReports(context, reports);
94-
executed.set(true);
95-
}
96-
};
97-
sensor.execute(ctx);
98-
return executed.get();
99-
}
52+
context.setActiveRules((new ActiveRulesBuilder())
53+
.create(RuleKey.of(PylintRuleRepository.REPOSITORY_KEY, "C0103"))
54+
.setName("Invalid name")
55+
.activate()
56+
.create(RuleKey.of(PylintRuleRepository.REPOSITORY_KEY, "C0111"))
57+
.setName("Missing docstring")
58+
.activate()
59+
.build());
10060

101-
@Test
102-
public void parse_report() {
103-
SensorContextTester context = SensorContextTester.create(baseDir);
104-
context.setActiveRules(activeRules);
105-
context.setFileSystem(fileSystem);
106-
107-
PylintImportSensor sensor = new PylintImportSensor(settings);
61+
PylintImportSensor sensor = new PylintImportSensor(context.settings());
10862
sensor.execute(context);
10963
assertThat(context.allIssues()).hasSize(3);
11064
assertThat(context.allIssues()).extracting(issue -> issue.primaryLocation().inputComponent().key())
11165
.containsOnly(inputFile.key());
11266
}
11367

68+
@Test
69+
public void sensor_descriptor() {
70+
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
71+
new PylintImportSensor(new MapSettings()).describe(descriptor);
72+
assertThat(descriptor.name()).isEqualTo("PylintImportSensor");
73+
assertThat(descriptor.languages()).containsOnly("py");
74+
assertThat(descriptor.type()).isEqualTo(InputFile.Type.MAIN);
75+
assertThat(descriptor.ruleRepositories()).containsExactly(PylintRuleRepository.REPOSITORY_KEY);
76+
assertThat(descriptor.properties()).containsOnly(PylintImportSensor.REPORT_PATH_KEY);
77+
}
78+
11479
}

0 commit comments

Comments
 (0)