Skip to content

Commit cfbfca8

Browse files
committed
Add test case for PythonSquidSensor
1 parent 6a6d644 commit cfbfca8

2 files changed

Lines changed: 26 additions & 9 deletions

File tree

sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonSquidSensor.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -142,19 +142,17 @@ private void saveFilesComplexityDistribution(InputFile sonarFile, SourceFile squ
142142

143143
private void saveIssues(InputFile sonarFile, SourceFile squidFile) {
144144
Collection<CheckMessage> messages = squidFile.getCheckMessages();
145-
if (messages != null) {
146-
for (CheckMessage message : messages) {
147-
RuleKey ruleKey = checks.ruleKey((SquidAstVisitor<Grammar>) message.getCheck());
148-
Issuable issuable = resourcePerspectives.as(Issuable.class, sonarFile);
145+
for (CheckMessage message : messages) {
146+
RuleKey ruleKey = checks.ruleKey((SquidAstVisitor<Grammar>) message.getCheck());
147+
Issuable issuable = resourcePerspectives.as(Issuable.class, sonarFile);
149148

150-
if (issuable != null) {
151-
Issue issue = issuable.newIssueBuilder()
149+
if (issuable != null) {
150+
Issue issue = issuable.newIssueBuilder()
152151
.ruleKey(ruleKey)
153152
.line(message.getLine())
154153
.message(message.getText(Locale.ENGLISH))
155154
.build();
156-
issuable.addIssue(issue);
157-
}
155+
issuable.addIssue(issue);
158156
}
159157
}
160158
}

sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonSquidSensorTest.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@
3030
import org.sonar.api.batch.rule.CheckFactory;
3131
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
3232
import org.sonar.api.component.ResourcePerspectives;
33+
import org.sonar.api.issue.Issuable;
34+
import org.sonar.api.issue.Issue;
3335
import org.sonar.api.measures.CoreMetrics;
3436
import org.sonar.api.measures.FileLinesContext;
3537
import org.sonar.api.measures.FileLinesContextFactory;
3638
import org.sonar.api.resources.Project;
39+
import org.sonar.api.rule.RuleKey;
40+
import org.sonar.python.checks.CheckList;
3741

3842
import java.io.File;
3943

@@ -47,16 +51,21 @@ public class PythonSquidSensorTest {
4751

4852
private PythonSquidSensor sensor;
4953
private DefaultFileSystem fs = new DefaultFileSystem();
54+
ResourcePerspectives perspectives;
5055

5156
@Before
5257
public void setUp() {
5358
FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class);
5459
FileLinesContext fileLinesContext = mock(FileLinesContext.class);
5560
when(fileLinesContextFactory.createFor(Mockito.any(InputFile.class))).thenReturn(fileLinesContext);
5661
ActiveRules activeRules = (new ActiveRulesBuilder())
62+
.create(RuleKey.of(CheckList.REPOSITORY_KEY, "PrintStatementUsage"))
63+
.setName("Print Statement Usage")
64+
.activate()
5765
.build();
5866
CheckFactory checkFactory = new CheckFactory(activeRules);
59-
sensor = new PythonSquidSensor(fileLinesContextFactory, fs, mock(ResourcePerspectives.class), checkFactory);
67+
perspectives = mock(ResourcePerspectives.class);
68+
sensor = new PythonSquidSensor(fileLinesContextFactory, fs, perspectives, checkFactory);
6069
}
6170

6271
@Test
@@ -75,6 +84,14 @@ public void should_analyse() {
7584
inputFile.setAbsolutePath((new File(relativePath)).getAbsolutePath());
7685
fs.add(inputFile);
7786

87+
Issuable issuable = mock(Issuable.class);
88+
Issuable.IssueBuilder issueBuilder = mock(Issuable.IssueBuilder.class);
89+
when(perspectives.as(Mockito.eq(Issuable.class), Mockito.any(InputFile.class))).thenReturn(issuable);
90+
when(issuable.newIssueBuilder()).thenReturn(issueBuilder);
91+
when(issueBuilder.ruleKey(Mockito.any(RuleKey.class))).thenReturn(issueBuilder);
92+
when(issueBuilder.line(Mockito.any(Integer.class))).thenReturn(issueBuilder);
93+
when(issueBuilder.message(Mockito.any(String.class))).thenReturn(issueBuilder);
94+
7895
Project project = new Project("key");
7996
SensorContext context = mock(SensorContext.class);
8097
sensor.analyse(project, context);
@@ -87,6 +104,8 @@ public void should_analyse() {
87104
verify(context).saveMeasure(Mockito.any(InputFile.class), Mockito.eq(CoreMetrics.CLASSES), Mockito.eq(1.0));
88105
verify(context).saveMeasure(Mockito.any(InputFile.class), Mockito.eq(CoreMetrics.COMPLEXITY), Mockito.eq(4.0));
89106
verify(context).saveMeasure(Mockito.any(InputFile.class), Mockito.eq(CoreMetrics.COMMENT_LINES), Mockito.eq(9.0));
107+
verify(issuable).addIssue(Mockito.any(Issue.class));
108+
90109
}
91110

92111
}

0 commit comments

Comments
 (0)