aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch/src/test/java
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2015-07-29 01:45:49 +0200
committerJulien HENRY <julien.henry@sonarsource.com>2015-07-31 11:00:25 +0200
commit5b93180b18e756c6a246b8d22307785d333d0002 (patch)
treef80ee109a5307bd3f9f221228f6ae25e5d3b161b /sonar-batch/src/test/java
parent1c2ee1119325e56aff63571094c3ad897d408c8c (diff)
downloadsonarqube-5b93180b18e756c6a246b8d22307785d333d0002.tar.gz
sonarqube-5b93180b18e756c6a246b8d22307785d333d0002.zip
Write raw issues directly in protobuf report
Avoid intermediate storage in persistit
Diffstat (limited to 'sonar-batch/src/test/java')
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/issue/DefaultIssuableTest.java64
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/issue/IssuableFactoryTest.java6
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/issue/ModuleIssuesTest.java123
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java20
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java40
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/RandomFsAccessMediumTest.java18
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java27
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java75
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java12
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java10
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/EmptyFileTest.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/IncrementalModeMediumTest.java38
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/PreviewAndReportsMediumTest.java62
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/report/IssuesPublisherTest.java106
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java71
15 files changed, 215 insertions, 459 deletions
diff --git a/sonar-batch/src/test/java/org/sonar/batch/issue/DefaultIssuableTest.java b/sonar-batch/src/test/java/org/sonar/batch/issue/DefaultIssuableTest.java
deleted file mode 100644
index 5df84297370..00000000000
--- a/sonar-batch/src/test/java/org/sonar/batch/issue/DefaultIssuableTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.batch.issue;
-
-import java.util.Arrays;
-import java.util.List;
-import org.junit.Test;
-import org.sonar.api.batch.sensor.SensorContext;
-import org.sonar.api.issue.Issue;
-import org.sonar.batch.index.BatchComponent;
-import org.sonar.core.issue.DefaultIssue;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class DefaultIssuableTest {
-
- IssueCache cache = mock(IssueCache.class);
- BatchComponent component = mock(BatchComponent.class);
-
- @Test
- public void test_unresolved_issues() throws Exception {
- when(component.key()).thenReturn("struts:org.apache.Action");
- DefaultIssue resolved = new DefaultIssue().setResolution(Issue.RESOLUTION_FALSE_POSITIVE);
- DefaultIssue unresolved = new DefaultIssue();
- when(cache.byComponent("struts:org.apache.Action")).thenReturn(Arrays.asList(resolved, unresolved));
-
- DefaultIssuable perspective = new DefaultIssuable(component, cache, mock(SensorContext.class));
-
- List<Issue> issues = perspective.issues();
- assertThat(issues).containsOnly(unresolved);
- }
-
- @Test
- public void test_resolved_issues() throws Exception {
- when(component.key()).thenReturn("struts:org.apache.Action");
- DefaultIssue resolved = new DefaultIssue().setResolution(Issue.RESOLUTION_FALSE_POSITIVE);
- DefaultIssue unresolved = new DefaultIssue();
- when(cache.byComponent("struts:org.apache.Action")).thenReturn(Arrays.asList(resolved, unresolved));
-
- DefaultIssuable perspective = new DefaultIssuable(component, cache, mock(SensorContext.class));
-
- List<Issue> issues = perspective.resolvedIssues();
- assertThat(issues).containsOnly(resolved);
- }
-}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/issue/IssuableFactoryTest.java b/sonar-batch/src/test/java/org/sonar/batch/issue/IssuableFactoryTest.java
index ddabedba240..5525d4ea049 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/issue/IssuableFactoryTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/issue/IssuableFactoryTest.java
@@ -20,7 +20,6 @@
package org.sonar.batch.issue;
import org.junit.Test;
-import org.mockito.Mockito;
import org.sonar.api.issue.Issuable;
import org.sonar.api.resources.File;
import org.sonar.api.resources.Project;
@@ -34,12 +33,11 @@ import static org.mockito.Mockito.mock;
public class IssuableFactoryTest {
ModuleIssues moduleIssues = mock(ModuleIssues.class);
- IssueCache cache = mock(IssueCache.class, Mockito.RETURNS_MOCKS);
DefaultProjectTree projectTree = mock(DefaultProjectTree.class);
@Test
public void file_should_be_issuable() {
- IssuableFactory factory = new IssuableFactory(cache, mock(DefaultSensorContext.class));
+ IssuableFactory factory = new IssuableFactory(mock(DefaultSensorContext.class));
BatchComponent component = new BatchComponent(1, File.create("foo/bar.c").setEffectiveKey("foo/bar.c"), null);
Issuable issuable = factory.loadPerspective(Issuable.class, component);
@@ -49,7 +47,7 @@ public class IssuableFactoryTest {
@Test
public void project_should_be_issuable() {
- IssuableFactory factory = new IssuableFactory(cache, mock(DefaultSensorContext.class));
+ IssuableFactory factory = new IssuableFactory(mock(DefaultSensorContext.class));
BatchComponent component = new BatchComponent(1, new Project("Foo").setEffectiveKey("foo"), null);
Issuable issuable = factory.loadPerspective(Issuable.class, component);
diff --git a/sonar-batch/src/test/java/org/sonar/batch/issue/ModuleIssuesTest.java b/sonar-batch/src/test/java/org/sonar/batch/issue/ModuleIssuesTest.java
index a602f1f6549..fb9cf921e2f 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/issue/ModuleIssuesTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/issue/ModuleIssuesTest.java
@@ -19,25 +19,36 @@
*/
package org.sonar.batch.issue;
-import java.util.Calendar;
+import java.io.StringReader;
import java.util.Date;
-import org.apache.commons.lang.time.DateUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
+import org.sonar.api.batch.fs.InputFile;
+import org.sonar.api.batch.fs.internal.DefaultInputFile;
+import org.sonar.api.batch.fs.internal.FileMetadata;
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
import org.sonar.api.batch.rule.internal.RulesBuilder;
+import org.sonar.api.batch.sensor.issue.internal.DefaultIssue;
+import org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation;
+import org.sonar.api.resources.File;
import org.sonar.api.resources.Project;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
import org.sonar.api.utils.MessageException;
-import org.sonar.core.issue.DefaultIssue;
+import org.sonar.batch.index.BatchComponentCache;
+import org.sonar.batch.protocol.output.BatchReport;
+import org.sonar.batch.report.ReportPublisher;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
@@ -48,11 +59,7 @@ public class ModuleIssuesTest {
static final RuleKey SQUID_RULE_KEY = RuleKey.of("squid", "AvoidCycle");
static final String SQUID_RULE_NAME = "Avoid Cycle";
- @Mock
- IssueCache cache;
-
- @Mock
- Project project;
+ Project project = new Project("foo").setAnalysisDate(new Date());
@Mock
IssueFilters filters;
@@ -62,18 +69,21 @@ public class ModuleIssuesTest {
ModuleIssues moduleIssues;
+ BatchComponentCache componentCache = new BatchComponentCache();
+ InputFile file = new DefaultInputFile("foo", "src/Foo.php").initMetadata(new FileMetadata().readMetadata(new StringReader("Foo\nBar\nBiz\n")));
+ ReportPublisher reportPublisher = mock(ReportPublisher.class, RETURNS_DEEP_STUBS);
+
@Before
- public void setUp() {
- when(project.getAnalysisDate()).thenReturn(new Date());
- when(project.getEffectiveKey()).thenReturn("org.apache:struts-core");
- when(project.getRoot()).thenReturn(project);
+ public void prepare() {
+ componentCache.add(File.create("src/Foo.php").setEffectiveKey("foo:src/Foo.php"), null).setInputPath(file);
}
@Test
public void fail_on_unknown_rule() {
initModuleIssues();
- DefaultIssue issue = new DefaultIssue().setRuleKey(SQUID_RULE_KEY);
-
+ DefaultIssue issue = new DefaultIssue()
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message("Foo"))
+ .forRule(SQUID_RULE_KEY);
try {
moduleIssues.initAndAddIssue(issue);
fail();
@@ -81,15 +91,16 @@ public class ModuleIssuesTest {
assertThat(e).isInstanceOf(MessageException.class);
}
- verifyZeroInteractions(cache);
+ verifyZeroInteractions(reportPublisher);
}
@Test
public void fail_if_rule_has_no_name_and_issue_has_no_message() {
ruleBuilder.add(SQUID_RULE_KEY).setInternalKey(SQUID_RULE_KEY.rule());
initModuleIssues();
- DefaultIssue issue = new DefaultIssue().setRuleKey(SQUID_RULE_KEY).setMessage("");
-
+ DefaultIssue issue = new DefaultIssue()
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message(""))
+ .forRule(SQUID_RULE_KEY);
try {
moduleIssues.initAndAddIssue(issue);
fail();
@@ -97,19 +108,20 @@ public class ModuleIssuesTest {
assertThat(e).isInstanceOf(MessageException.class);
}
- verifyZeroInteractions(cache);
+ verifyZeroInteractions(reportPublisher);
}
@Test
public void ignore_null_active_rule() {
ruleBuilder.add(SQUID_RULE_KEY).setName(SQUID_RULE_NAME);
initModuleIssues();
-
- DefaultIssue issue = new DefaultIssue().setRuleKey(SQUID_RULE_KEY);
+ DefaultIssue issue = new DefaultIssue()
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message("Foo"))
+ .forRule(SQUID_RULE_KEY);
boolean added = moduleIssues.initAndAddIssue(issue);
assertThat(added).isFalse();
- verifyZeroInteractions(cache);
+ verifyZeroInteractions(reportPublisher);
}
@Test
@@ -118,11 +130,13 @@ public class ModuleIssuesTest {
activeRulesBuilder.create(SQUID_RULE_KEY).activate();
initModuleIssues();
- DefaultIssue issue = new DefaultIssue().setRuleKey(SQUID_RULE_KEY);
+ DefaultIssue issue = new DefaultIssue()
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message("Foo"))
+ .forRule(SQUID_RULE_KEY);
boolean added = moduleIssues.initAndAddIssue(issue);
assertThat(added).isFalse();
- verifyZeroInteractions(cache);
+ verifyZeroInteractions(reportPublisher);
}
@Test
@@ -131,22 +145,19 @@ public class ModuleIssuesTest {
activeRulesBuilder.create(SQUID_RULE_KEY).setSeverity(Severity.INFO).activate();
initModuleIssues();
- Date analysisDate = new Date();
- when(project.getAnalysisDate()).thenReturn(analysisDate);
-
DefaultIssue issue = new DefaultIssue()
- .setKey("ABCDE")
- .setRuleKey(SQUID_RULE_KEY)
- .setSeverity(Severity.CRITICAL);
- when(filters.accept(issue)).thenReturn(true);
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message("Foo"))
+ .forRule(SQUID_RULE_KEY)
+ .overrideSeverity(org.sonar.api.batch.rule.Severity.CRITICAL);
+
+ when(filters.accept(any(org.sonar.core.issue.DefaultIssue.class))).thenReturn(true);
boolean added = moduleIssues.initAndAddIssue(issue);
assertThat(added).isTrue();
- ArgumentCaptor<DefaultIssue> argument = ArgumentCaptor.forClass(DefaultIssue.class);
- verify(cache).put(argument.capture());
- assertThat(argument.getValue().severity()).isEqualTo(Severity.CRITICAL);
- assertThat(argument.getValue().creationDate()).isEqualTo(DateUtils.truncate(analysisDate, Calendar.SECOND));
+ ArgumentCaptor<BatchReport.Issue> argument = ArgumentCaptor.forClass(BatchReport.Issue.class);
+ verify(reportPublisher.getWriter()).appendComponentIssue(eq(1), argument.capture());
+ assertThat(argument.getValue().getSeverity()).isEqualTo(org.sonar.batch.protocol.Constants.Severity.CRITICAL);
}
@Test
@@ -155,17 +166,15 @@ public class ModuleIssuesTest {
activeRulesBuilder.create(SQUID_RULE_KEY).setSeverity(Severity.INFO).activate();
initModuleIssues();
- Date analysisDate = new Date();
- when(project.getAnalysisDate()).thenReturn(analysisDate);
-
- DefaultIssue issue = new DefaultIssue().setRuleKey(SQUID_RULE_KEY).setSeverity(null);
- when(filters.accept(issue)).thenReturn(true);
+ DefaultIssue issue = new DefaultIssue()
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message("Foo"))
+ .forRule(SQUID_RULE_KEY);
+ when(filters.accept(any(org.sonar.core.issue.DefaultIssue.class))).thenReturn(true);
moduleIssues.initAndAddIssue(issue);
- ArgumentCaptor<DefaultIssue> argument = ArgumentCaptor.forClass(DefaultIssue.class);
- verify(cache).put(argument.capture());
- assertThat(argument.getValue().severity()).isEqualTo(Severity.INFO);
- assertThat(argument.getValue().creationDate()).isEqualTo(DateUtils.truncate(analysisDate, Calendar.SECOND));
+ ArgumentCaptor<BatchReport.Issue> argument = ArgumentCaptor.forClass(BatchReport.Issue.class);
+ verify(reportPublisher.getWriter()).appendComponentIssue(eq(1), argument.capture());
+ assertThat(argument.getValue().getSeverity()).isEqualTo(org.sonar.batch.protocol.Constants.Severity.INFO);
}
@Test
@@ -174,22 +183,17 @@ public class ModuleIssuesTest {
activeRulesBuilder.create(SQUID_RULE_KEY).setSeverity(Severity.INFO).setName(SQUID_RULE_NAME).activate();
initModuleIssues();
- Date analysisDate = new Date();
- when(project.getAnalysisDate()).thenReturn(analysisDate);
-
DefaultIssue issue = new DefaultIssue()
- .setKey("ABCDE")
- .setRuleKey(SQUID_RULE_KEY)
- .setSeverity(Severity.CRITICAL)
- .setMessage("");
- when(filters.accept(issue)).thenReturn(true);
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message(""))
+ .forRule(SQUID_RULE_KEY);
+ when(filters.accept(any(org.sonar.core.issue.DefaultIssue.class))).thenReturn(true);
boolean added = moduleIssues.initAndAddIssue(issue);
assertThat(added).isTrue();
- ArgumentCaptor<DefaultIssue> argument = ArgumentCaptor.forClass(DefaultIssue.class);
- verify(cache).put(argument.capture());
- assertThat(argument.getValue().message()).isEqualTo("Avoid Cycle");
+ ArgumentCaptor<BatchReport.Issue> argument = ArgumentCaptor.forClass(BatchReport.Issue.class);
+ verify(reportPublisher.getWriter()).appendComponentIssue(eq(1), argument.capture());
+ assertThat(argument.getValue().getMsg()).isEqualTo("Avoid Cycle");
}
@Test
@@ -199,23 +203,22 @@ public class ModuleIssuesTest {
initModuleIssues();
DefaultIssue issue = new DefaultIssue()
- .setKey("ABCDE")
- .setRuleKey(SQUID_RULE_KEY)
- .setSeverity(Severity.CRITICAL);
+ .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message(""))
+ .forRule(SQUID_RULE_KEY);
- when(filters.accept(issue)).thenReturn(false);
+ when(filters.accept(any(org.sonar.core.issue.DefaultIssue.class))).thenReturn(false);
boolean added = moduleIssues.initAndAddIssue(issue);
assertThat(added).isFalse();
- verifyZeroInteractions(cache);
+ verifyZeroInteractions(reportPublisher);
}
/**
* Every rules and active rules has to be added in builders before creating ModuleIssues
*/
private void initModuleIssues() {
- moduleIssues = new ModuleIssues(activeRulesBuilder.build(), ruleBuilder.build(), cache, project, filters);
+ moduleIssues = new ModuleIssues(activeRulesBuilder.build(), ruleBuilder.build(), project, filters, reportPublisher, componentCache);
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java
index f73d1c60f46..660b861bece 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java
@@ -19,8 +19,6 @@
*/
package org.sonar.batch.mediumtest.deprecated;
-import org.sonar.xoo.rule.XooRulesDefinition;
-
import com.google.common.collect.ImmutableMap;
import java.io.File;
import java.io.IOException;
@@ -33,6 +31,7 @@ import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.input.ActiveRule;
import org.sonar.xoo.XooPlugin;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.groups.Tuple.tuple;
@@ -84,13 +83,16 @@ public class DeprecatedApiMediumTest {
.build())
.start();
- assertThat(result.issues()).extracting("componentKey", "message", "line").containsOnly(
- tuple("com.foo.project:src/sample.xoo", "Issue created using deprecated API", null),
- tuple("com.foo.project:src/sample.xoo", "Issue created using deprecated API", 1),
- tuple("com.foo.project:src/package/sample.xoo", "Issue created using deprecated API", null),
- tuple("com.foo.project:src/package/sample.xoo", "Issue created using deprecated API", 1),
- tuple("com.foo.project:src", "Issue created using deprecated API", null),
- tuple("com.foo.project:src/package", "Issue created using deprecated API", null));
+ assertThat(result.issuesFor(result.inputFile("src/sample.xoo"))).extracting("msg", "line").containsOnly(
+ tuple("Issue created using deprecated API", 0),
+ tuple("Issue created using deprecated API", 1));
+ assertThat(result.issuesFor(result.inputFile("src/package/sample.xoo"))).extracting("msg", "line").containsOnly(
+ tuple("Issue created using deprecated API", 0),
+ tuple("Issue created using deprecated API", 1));
+ assertThat(result.issuesFor(result.inputDir("src"))).extracting("msg", "line").containsOnly(
+ tuple("Issue created using deprecated API", 0));
+ assertThat(result.issuesFor(result.inputDir("src/package"))).extracting("msg", "line").containsOnly(
+ tuple("Issue created using deprecated API", 0));
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java
index 2beb8f133b5..42ef0b87433 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java
@@ -19,23 +19,22 @@
*/
package org.sonar.batch.mediumtest.fs;
-import org.sonar.xoo.rule.XooRulesDefinition;
-
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.CoreProperties;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.input.ActiveRule;
+import org.sonar.batch.protocol.output.BatchReport.Issue;
import org.sonar.xoo.XooPlugin;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Date;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
@@ -48,7 +47,6 @@ public class ProjectBuilderMediumTest {
.registerPlugin("xoo", new XooPlugin())
.addRules(new XooRulesDefinition())
.addDefaultQProfile("xoo", "Sonar Way")
- .bootstrapProperties(ImmutableMap.of(CoreProperties.ANALYSIS_MODE, CoreProperties.ANALYSIS_MODE_PREVIEW))
.setPreviousAnalysisDate(new Date())
.activateRule(new ActiveRule("xoo", "OneIssuePerLine", null, "One issue per line", "MAJOR", "OneIssuePerLine.internal", "xoo"))
.build();
@@ -88,19 +86,19 @@ public class ProjectBuilderMediumTest {
.put("sonar.xoo.enableProjectBuilder", "true")
.build())
.start();
-
- assertThat(result.issues()).hasSize(10);
+ List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
+ assertThat(issues).hasSize(10);
boolean foundIssueAtLine1 = false;
- for (org.sonar.api.issue.Issue issue : result.issues()) {
- if (issue.line() == 1) {
+ for (Issue issue : issues) {
+ if (issue.getLine() == 1) {
foundIssueAtLine1 = true;
- assertThat(issue.componentKey()).isEqualTo("com.foo.project:module1:src/sample.xoo");
- assertThat(issue.message()).isEqualTo("This issue is generated on each line");
- assertThat(issue.effortToFix()).isNull();
+ assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
+ assertThat(issue.hasEffortToFix()).isFalse();
}
}
assertThat(foundIssueAtLine1).isTrue();
+
}
@Test
@@ -130,15 +128,15 @@ public class ProjectBuilderMediumTest {
.build())
.start();
- assertThat(result.issues()).hasSize(10);
+ List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
+ assertThat(issues).hasSize(10);
boolean foundIssueAtLine1 = false;
- for (org.sonar.api.issue.Issue issue : result.issues()) {
- if (issue.line() == 1) {
+ for (Issue issue : issues) {
+ if (issue.getLine() == 1) {
foundIssueAtLine1 = true;
- assertThat(issue.componentKey()).isEqualTo("com.foo.project:module1:my-branch:src/sample.xoo");
- assertThat(issue.message()).isEqualTo("This issue is generated on each line");
- assertThat(issue.effortToFix()).isNull();
+ assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
+ assertThat(issue.hasEffortToFix()).isFalse();
}
}
assertThat(foundIssueAtLine1).isTrue();
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/RandomFsAccessMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/RandomFsAccessMediumTest.java
index f27f72c5769..cfbd881e224 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/RandomFsAccessMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/RandomFsAccessMediumTest.java
@@ -19,9 +19,11 @@
*/
package org.sonar.batch.mediumtest.fs;
-import org.sonar.xoo.rule.XooRulesDefinition;
-
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
@@ -32,11 +34,9 @@ import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.Benchmark;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.input.ActiveRule;
+import org.sonar.batch.protocol.output.BatchReport.Issue;
import org.sonar.xoo.XooPlugin;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
@@ -92,7 +92,8 @@ public class RandomFsAccessMediumTest {
.build())
.start();
- assertThat(result.issues()).hasSize(ISSUE_COUNT);
+ List<Issue> issues = result.issuesFor(result.inputFile("src/sample1.xoo"));
+ assertThat(issues).hasSize(10);
bench.expectLessThanOrEqualTo("Time to create " + ISSUE_COUNT + " issues on random files using FileSystem query", System.currentTimeMillis() - start, 2000);
}
@@ -121,7 +122,8 @@ public class RandomFsAccessMediumTest {
.build())
.start();
- assertThat(result.issues()).hasSize(ISSUE_COUNT);
+ List<Issue> issues = result.issuesFor(result.inputFile("src/sample1.xoo"));
+ assertThat(issues).hasSize(10);
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java
index d5bd3b44c9a..fe31dbe7d25 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java
@@ -19,10 +19,10 @@
*/
package org.sonar.batch.mediumtest.issues;
-import org.sonar.batch.protocol.input.Rule;
-
-import org.sonar.xoo.rule.XooRulesDefinition;
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
@@ -31,10 +31,10 @@ import org.junit.rules.TemporaryFolder;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.input.ActiveRule;
+import org.sonar.batch.protocol.input.Rule;
+import org.sonar.batch.protocol.output.BatchReport.Issue;
import org.sonar.xoo.XooPlugin;
-
-import java.io.File;
-import java.io.IOException;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
@@ -85,20 +85,19 @@ public class ChecksMediumTest {
.build())
.start();
- assertThat(result.issues()).hasSize(2);
+ List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
+ assertThat(issues).hasSize(2);
boolean foundIssueAtLine1 = false;
boolean foundIssueAtLine2 = false;
- for (org.sonar.api.issue.Issue issue : result.issues()) {
- if (issue.line() == 1) {
+ for (Issue issue : issues) {
+ if (issue.getLine() == 1) {
foundIssueAtLine1 = true;
- assertThat(issue.componentKey()).isEqualTo("com.foo.project:src/sample.xoo");
- assertThat(issue.message()).isEqualTo("A template rule");
+ assertThat(issue.getMsg()).isEqualTo("A template rule");
}
- if (issue.line() == 2) {
+ if (issue.getLine() == 2) {
foundIssueAtLine2 = true;
- assertThat(issue.componentKey()).isEqualTo("com.foo.project:src/sample.xoo");
- assertThat(issue.message()).isEqualTo("Another template rule");
+ assertThat(issue.getMsg()).isEqualTo("Another template rule");
}
}
assertThat(foundIssueAtLine1).isTrue();
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
index 1399a135f72..6979b4e6e2c 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
@@ -19,25 +19,23 @@
*/
package org.sonar.batch.mediumtest.issues;
-import org.sonar.api.issue.Issue;
-import org.sonar.batch.bootstrapper.IssueListener;
-import org.sonar.xoo.rule.XooRulesDefinition;
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.rule.Severity;
+import org.sonar.batch.bootstrapper.IssueListener;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.input.ActiveRule;
+import org.sonar.batch.protocol.output.BatchReport.Issue;
import org.sonar.xoo.XooPlugin;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
@@ -52,44 +50,15 @@ public class IssuesMediumTest {
.addRules(new XooRulesDefinition())
.activateRule(new ActiveRule("xoo", "OneIssuePerLine", null, "One issue per line", "MAJOR", "OneIssuePerLine.internal", "xoo"))
.build();
-
- public BatchMediumTester testerPreview = BatchMediumTester.builder()
- .registerPlugin("xoo", new XooPlugin())
- .addDefaultQProfile("xoo", "Sonar Way")
- .bootstrapProperties(ImmutableMap.of("sonar.analysis.mode", "preview"))
- .addRules(new XooRulesDefinition())
- .activateRule(new ActiveRule("xoo", "OneIssuePerLine", null, "One issue per line", "MAJOR", "OneIssuePerLine.internal", "xoo"))
- .build();
@Before
public void prepare() {
tester.start();
- testerPreview.start();
}
@After
public void stop() {
tester.stop();
- testerPreview.stop();
- }
-
- @Test
- public void testIssueCallback() throws Exception {
- File projectDir = new File(IssuesMediumTest.class.getResource("/mediumtest/xoo/sample").toURI());
- File tmpDir = temp.newFolder();
- FileUtils.copyDirectory(projectDir, tmpDir);
- IssueRecorder issueListener = new IssueRecorder();
-
- TaskResult result = testerPreview
- .newScanTask(new File(tmpDir, "sonar-project.properties"))
- .setIssueListener(issueListener)
- .property("sonar.analysis.mode", "preview")
- .start();
-
- assertThat(result.issues()).hasSize(14);
- assertThat(issueListener.issueList).hasSize(14);
-
- assertThat(result.issues()).containsExactlyElementsOf(issueListener.issueList);
}
@Test
@@ -104,7 +73,7 @@ public class IssuesMediumTest {
.setIssueListener(issueListener)
.start();
- assertThat(result.issues()).hasSize(14);
+ assertThat(result.issuesFor(result.inputFile("xources/hello/HelloJava.xoo"))).hasSize(8);
assertThat(issueListener.issueList).hasSize(0);
}
@@ -118,7 +87,8 @@ public class IssuesMediumTest {
.newScanTask(new File(tmpDir, "sonar-project.properties"))
.start();
- assertThat(result.issues()).hasSize(14);
+ List<Issue> issues = result.issuesFor(result.inputFile("xources/hello/HelloJava.xoo"));
+ assertThat(issues).hasSize(8 /* lines */);
}
@Test
@@ -132,7 +102,8 @@ public class IssuesMediumTest {
.property("sonar.xoo.internalKey", "OneIssuePerLine.internal")
.start();
- assertThat(result.issues()).hasSize(14 /* 8 + 6 lines */+ 2 /* 2 files */);
+ List<Issue> issues = result.issuesFor(result.inputFile("xources/hello/HelloJava.xoo"));
+ assertThat(issues).hasSize(8 /* lines */ + 1 /* file */);
}
@Test
@@ -146,7 +117,8 @@ public class IssuesMediumTest {
.property("sonar.oneIssuePerLine.forceSeverity", "CRITICAL")
.start();
- assertThat(result.issues().iterator().next().severity()).isEqualTo(Severity.CRITICAL.name());
+ List<Issue> issues = result.issuesFor(result.inputFile("xources/hello/HelloJava.xoo"));
+ assertThat(issues.get(0).getSeverity()).isEqualTo(org.sonar.batch.protocol.Constants.Severity.CRITICAL);
}
@Test
@@ -161,7 +133,8 @@ public class IssuesMediumTest {
.property("sonar.issue.ignore.allfile.1.fileRegexp", "object")
.start();
- assertThat(result.issues()).hasSize(8);
+ assertThat(result.issuesFor(result.inputFile("xources/hello/HelloJava.xoo"))).hasSize(8 /* lines */);
+ assertThat(result.issuesFor(result.inputFile("xources/hello/helloscala.xoo"))).isEmpty();
}
@Test
@@ -186,25 +159,25 @@ public class IssuesMediumTest {
.build())
.start();
- assertThat(result.issues()).hasSize(10);
+ List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
+ assertThat(issues).hasSize(10);
boolean foundIssueAtLine1 = false;
- for (org.sonar.api.issue.Issue issue : result.issues()) {
- if (issue.line() == 1) {
+ for (Issue issue : issues) {
+ if (issue.getLine() == 1) {
foundIssueAtLine1 = true;
- assertThat(issue.componentKey()).isEqualTo("com.foo.project:src/sample.xoo");
- assertThat(issue.message()).isEqualTo("This issue is generated on each line");
- assertThat(issue.effortToFix()).isNull();
+ assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
+ assertThat(issue.hasEffortToFix()).isFalse();
}
}
assertThat(foundIssueAtLine1).isTrue();
}
private class IssueRecorder implements IssueListener {
- List<Issue> issueList = new LinkedList<>();
+ List<org.sonar.api.issue.Issue> issueList = new LinkedList<>();
@Override
- public void handle(Issue issue) {
+ public void handle(org.sonar.api.issue.Issue issue) {
issueList.add(issue);
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java
index 2d389a5d8cf..d181918a16b 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java
@@ -19,9 +19,9 @@
*/
package org.sonar.batch.mediumtest.issues;
-import org.sonar.xoo.rule.XooRulesDefinition;
-
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
@@ -31,9 +31,7 @@ import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.input.ActiveRule;
import org.sonar.xoo.XooPlugin;
-
-import java.io.File;
-import java.io.IOException;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
@@ -84,9 +82,7 @@ public class IssuesOnDirMediumTest {
.build())
.start();
- assertThat(result.issues()).hasSize(2);
- assertThat(result.issues().iterator().next().componentKey()).isEqualTo("com.foo.project:src");
-
+ assertThat(result.issuesFor(result.inputDir("src"))).hasSize(2);
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java
index 02b61ca0cdb..a9c1317b014 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java
@@ -19,12 +19,7 @@
*/
package org.sonar.batch.mediumtest.issues;
-import org.sonar.xoo.rule.XooRulesDefinition;
-
-import org.sonar.batch.protocol.input.Rule;
-
import java.io.File;
-
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
@@ -33,7 +28,10 @@ import org.junit.rules.TemporaryFolder;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.input.ActiveRule;
+import org.sonar.batch.protocol.input.Rule;
import org.sonar.xoo.XooPlugin;
+import org.sonar.xoo.rule.XooRulesDefinition;
+
import static org.assertj.core.api.Assertions.assertThat;
public class MultilineIssuesMediumTest {
@@ -69,7 +67,7 @@ public class MultilineIssuesMediumTest {
.newScanTask(new File(tmpDir, "sonar-project.properties"))
.start();
- assertThat(result.issues()).hasSize(1);
+ assertThat(result.issuesFor(result.inputFile("xources/hello/HelloJava.xoo"))).hasSize(1);
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/EmptyFileTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/EmptyFileTest.java
index 3f7be697caf..37cb1fd994d 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/EmptyFileTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/EmptyFileTest.java
@@ -75,7 +75,7 @@ public class EmptyFileTest {
.property("sonar.xoo.internalKey", "my/internal/key")
.start();
- assertThat(result.issues()).hasSize(11);
+ assertThat(result.trackedIssues()).hasSize(11);
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/IncrementalModeMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/IncrementalModeMediumTest.java
index 86697dcea42..6d1685a3d1f 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/IncrementalModeMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/IncrementalModeMediumTest.java
@@ -19,9 +19,11 @@
*/
package org.sonar.batch.mediumtest.preview;
-import org.sonar.xoo.rule.XooRulesDefinition;
-
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
import org.junit.After;
@@ -29,20 +31,17 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.CoreProperties;
-import org.sonar.api.issue.Issue;
+import org.sonar.api.rule.RuleKey;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.Constants.Severity;
import org.sonar.batch.protocol.input.ActiveRule;
import org.sonar.batch.protocol.input.FileData;
import org.sonar.xoo.XooPlugin;
-
-import java.io.File;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.groups.Tuple.tuple;
public class IncrementalModeMediumTest {
@@ -143,21 +142,14 @@ public class IncrementalModeMediumTest {
.build())
.start();
- int newIssues = 0;
- int openIssues = 0;
- int resolvedIssue = 0;
- for (Issue issue : result.issues()) {
- if (issue.isNew()) {
- newIssues++;
- } else if (issue.resolution() != null) {
- resolvedIssue++;
- } else {
- openIssues++;
- }
- }
- assertThat(newIssues).isEqualTo(4);
- assertThat(openIssues).isEqualTo(2);
- assertThat(resolvedIssue).isEqualTo(1);
+ assertThat(result.trackedIssues()).extracting("ruleKey", "line", "message", "status", "resolution", "new").containsOnly(
+ tuple(RuleKey.of("xoo", "OneIssuePerLine"), 1, "This issue is generated on each line", "OPEN", null, false),
+ tuple(RuleKey.of("xoo", "OneIssuePerLine"), 2, "This issue is generated on each line", "OPEN", null, true),
+ tuple(RuleKey.of("xoo", "OneIssuePerLine"), 3, "This issue is generated on each line", "OPEN", null, true),
+ tuple(RuleKey.of("xoo", "OneIssuePerLine"), 4, "This issue is generated on each line", "OPEN", null, true),
+ tuple(RuleKey.of("xoo", "OneIssuePerLine"), 5, "This issue is generated on each line", "OPEN", null, true),
+ tuple(RuleKey.of("manual", "MyManualIssue"), 4, null, "OPEN", null, false),
+ tuple(RuleKey.of("xoo", "OneIssuePerFile"), null, "An issue that is no more detected", "CLOSED", "REMOVED", false));
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/PreviewAndReportsMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/PreviewAndReportsMediumTest.java
index e09631ac9fd..3ba49c04107 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/PreviewAndReportsMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/preview/PreviewAndReportsMediumTest.java
@@ -19,12 +19,16 @@
*/
package org.sonar.batch.mediumtest.preview;
-import org.sonar.batch.protocol.input.Rule;
-
-import org.sonar.xoo.rule.XooRulesDefinition;
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.FileFilterUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -32,17 +36,16 @@ import org.junit.rules.TemporaryFolder;
import org.sonar.api.CoreProperties;
import org.sonar.api.issue.Issue;
import org.sonar.api.utils.log.LogTester;
+import org.sonar.batch.bootstrapper.IssueListener;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
+import org.sonar.batch.mediumtest.issues.IssuesMediumTest;
import org.sonar.batch.protocol.Constants.Severity;
import org.sonar.batch.protocol.input.ActiveRule;
+import org.sonar.batch.protocol.input.Rule;
import org.sonar.batch.scan.report.ConsoleReport;
import org.sonar.xoo.XooPlugin;
-
-import java.io.File;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
@@ -131,9 +134,16 @@ public class PreviewAndReportsMediumTest {
tester.stop();
}
+ private File copyProject(String path) throws Exception {
+ File projectDir = temp.newFolder();
+ File originalProjectDir = new File(PreviewAndReportsMediumTest.class.getResource(path).toURI());
+ FileUtils.copyDirectory(originalProjectDir, projectDir, FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter(".sonar")));
+ return projectDir;
+ }
+
@Test
public void testIssueTracking() throws Exception {
- File projectDir = new File(PreviewAndReportsMediumTest.class.getResource("/mediumtest/xoo/sample").toURI());
+ File projectDir = copyProject("/mediumtest/xoo/sample");
TaskResult result = tester
.newScanTask(new File(projectDir, "sonar-project.properties"))
@@ -142,7 +152,7 @@ public class PreviewAndReportsMediumTest {
int newIssues = 0;
int openIssues = 0;
int resolvedIssue = 0;
- for (Issue issue : result.issues()) {
+ for (Issue issue : result.trackedIssues()) {
if (issue.isNew()) {
newIssues++;
} else if (issue.resolution() != null) {
@@ -158,7 +168,7 @@ public class PreviewAndReportsMediumTest {
@Test
public void testConsoleReport() throws Exception {
- File projectDir = new File(PreviewAndReportsMediumTest.class.getResource("/mediumtest/xoo/sample").toURI());
+ File projectDir = copyProject("/mediumtest/xoo/sample");
tester
.newScanTask(new File(projectDir, "sonar-project.properties"))
@@ -170,7 +180,7 @@ public class PreviewAndReportsMediumTest {
@Test
public void testPostJob() throws Exception {
- File projectDir = new File(PreviewAndReportsMediumTest.class.getResource("/mediumtest/xoo/sample").toURI());
+ File projectDir = copyProject("/mediumtest/xoo/sample");
tester
.newScanTask(new File(projectDir, "sonar-project.properties"))
@@ -191,7 +201,7 @@ public class PreviewAndReportsMediumTest {
@Test
public void testHtmlReport() throws Exception {
- File projectDir = new File(PreviewAndReportsMediumTest.class.getResource("/mediumtest/xoo/sample").toURI());
+ File projectDir = copyProject("/mediumtest/xoo/sample");
tester
.newScanTask(new File(projectDir, "sonar-project.properties"))
@@ -225,4 +235,30 @@ public class PreviewAndReportsMediumTest {
assertThat(FileUtils.readFileToString(new File(baseDir, ".sonar/issues-report/issues-report-light.html"))).contains("No file analyzed");
}
+ @Test
+ public void testIssueCallback() throws Exception {
+ File projectDir = new File(IssuesMediumTest.class.getResource("/mediumtest/xoo/sample").toURI());
+ File tmpDir = temp.newFolder();
+ FileUtils.copyDirectory(projectDir, tmpDir);
+ IssueRecorder issueListener = new IssueRecorder();
+
+ TaskResult result = tester
+ .newScanTask(new File(tmpDir, "sonar-project.properties"))
+ .setIssueListener(issueListener)
+ .start();
+
+ assertThat(result.trackedIssues()).hasSize(14);
+ assertThat(issueListener.issueList).hasSize(14);
+ assertThat(result.trackedIssues()).containsExactlyElementsOf(issueListener.issueList);
+ }
+
+ private class IssueRecorder implements IssueListener {
+ List<org.sonar.api.issue.Issue> issueList = new LinkedList<>();
+
+ @Override
+ public void handle(org.sonar.api.issue.Issue issue) {
+ issueList.add(issue);
+ }
+ }
+
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/report/IssuesPublisherTest.java b/sonar-batch/src/test/java/org/sonar/batch/report/IssuesPublisherTest.java
deleted file mode 100644
index 3e0f79030bf..00000000000
--- a/sonar-batch/src/test/java/org/sonar/batch/report/IssuesPublisherTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.batch.report;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.resources.Project;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.batch.index.BatchComponentCache;
-import org.sonar.batch.issue.IssueCache;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
-import org.sonar.core.issue.DefaultIssue;
-import org.sonar.core.issue.FieldDiffs;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class IssuesPublisherTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- IssueCache issueCache;
- ProjectDefinition projectDef;
- Project project;
-
- IssuesPublisher underTest;
-
- @Before
- public void prepare() {
- projectDef = ProjectDefinition.create().setKey("foo");
- project = new Project("foo").setAnalysisDate(new Date(1234567L));
- BatchComponentCache componentCache = new BatchComponentCache();
- org.sonar.api.resources.Resource sampleFile = org.sonar.api.resources.File.create("src/Foo.php").setEffectiveKey("foo:src/Foo.php");
- componentCache.add(project, null);
- componentCache.add(sampleFile, project);
- issueCache = mock(IssueCache.class);
- when(issueCache.byComponent(anyString())).thenReturn(Collections.<DefaultIssue>emptyList());
- underTest = new IssuesPublisher(componentCache, issueCache);
- }
-
- @Test
- public void write_issues() throws Exception {
- DefaultIssue issue1 = new DefaultIssue();
- issue1.setKey("uuid");
- issue1.setSeverity("MAJOR");
- issue1.setRuleKey(RuleKey.of("repo", "rule"));
- DefaultIssue issue2 = new DefaultIssue();
- issue2.setKey("uuid2");
- issue2.setSeverity("MAJOR");
- issue2.setRuleKey(RuleKey.of("repo", "rule"));
- issue2.setLine(2);
- issue2.setMessage("msg");
- issue2.setEffortToFix(2d);
- issue2.setResolution("FIXED");
- issue2.setStatus("RESOLVED");
- issue2.setChecksum("checksum");
- issue2.setReporter("reporter");
- issue2.setAssignee("assignee");
- issue2.setActionPlanKey("action");
- issue2.setAuthorLogin("author");
- issue2.setCurrentChange(new FieldDiffs().setUserLogin("foo"));
- issue2.setCreationDate(new Date());
- issue2.setUpdateDate(new Date());
- issue2.setCloseDate(new Date());
- issue2.setSelectedAt(1234L);
- when(issueCache.byComponent("foo:src/Foo.php")).thenReturn(Arrays.asList(issue1, issue2));
-
- File outputDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(outputDir);
-
- underTest.publish(writer);
-
- BatchReportReader reader = new BatchReportReader(outputDir);
- assertThat(reader.readComponentIssues(1)).hasSize(0);
- assertThat(reader.readComponentIssues(2)).hasSize(2);
- }
-
-}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
index aa2e32f96e6..5d8a9a5cdf3 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
@@ -19,25 +19,18 @@
*/
package org.sonar.batch.sensor;
-import java.io.StringReader;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.mockito.ArgumentCaptor;
-import org.sonar.api.batch.fs.InputDir;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
-import org.sonar.api.batch.fs.internal.DefaultInputDir;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
-import org.sonar.api.batch.fs.internal.FileMetadata;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.batch.rule.Severity;
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
-import org.sonar.api.batch.sensor.issue.internal.DefaultIssue;
-import org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasure;
import org.sonar.api.config.Settings;
import org.sonar.api.measures.CoreMetrics;
@@ -45,7 +38,6 @@ import org.sonar.api.measures.Measure;
import org.sonar.api.resources.File;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
-import org.sonar.api.rule.RuleKey;
import org.sonar.batch.duplication.DuplicationCache;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.issue.ModuleIssues;
@@ -57,7 +49,6 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class DefaultSensorStorageTest {
@@ -143,66 +134,4 @@ public class DefaultSensorStorageTest {
assertThat(m.getMetric()).isEqualTo(CoreMetrics.NCLOC);
}
- @Test
- public void shouldAddIssueOnFile() {
- InputFile file = new DefaultInputFile("foo", "src/Foo.php").initMetadata(new FileMetadata().readMetadata(new StringReader("Foo\nBar\nBiz\n")));
-
- ArgumentCaptor<org.sonar.core.issue.DefaultIssue> argumentCaptor = ArgumentCaptor.forClass(org.sonar.core.issue.DefaultIssue.class);
-
- sensorStorage.store(new DefaultIssue()
- .addLocation(new DefaultIssueLocation().onFile(file).at(file.selectLine(3)).message("Foo"))
- .forRule(RuleKey.of("foo", "bar"))
- .effortToFix(10.0));
-
- verify(moduleIssues).initAndAddIssue(argumentCaptor.capture());
-
- org.sonar.core.issue.DefaultIssue issue = argumentCaptor.getValue();
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("foo", "bar"));
- assertThat(issue.message()).isEqualTo("Foo");
- assertThat(issue.line()).isEqualTo(3);
- assertThat(issue.severity()).isNull();
- assertThat(issue.effortToFix()).isEqualTo(10.0);
- }
-
- @Test
- public void shouldAddIssueOnDirectory() {
- InputDir dir = new DefaultInputDir("foo", "src");
-
- ArgumentCaptor<org.sonar.core.issue.DefaultIssue> argumentCaptor = ArgumentCaptor.forClass(org.sonar.core.issue.DefaultIssue.class);
-
- sensorStorage.store(new DefaultIssue()
- .addLocation(new DefaultIssueLocation().onDir(dir).message("Foo"))
- .forRule(RuleKey.of("foo", "bar"))
- .effortToFix(10.0));
-
- verify(moduleIssues).initAndAddIssue(argumentCaptor.capture());
-
- org.sonar.core.issue.DefaultIssue issue = argumentCaptor.getValue();
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("foo", "bar"));
- assertThat(issue.message()).isEqualTo("Foo");
- assertThat(issue.line()).isNull();
- assertThat(issue.severity()).isNull();
- assertThat(issue.effortToFix()).isEqualTo(10.0);
- }
-
- @Test
- public void shouldAddIssueOnProject() {
- ArgumentCaptor<org.sonar.core.issue.DefaultIssue> argumentCaptor = ArgumentCaptor.forClass(org.sonar.core.issue.DefaultIssue.class);
-
- sensorStorage.store(new DefaultIssue()
- .addLocation(new DefaultIssueLocation().onProject().message("Foo"))
- .forRule(RuleKey.of("foo", "bar"))
- .overrideSeverity(Severity.BLOCKER)
- .effortToFix(10.0));
-
- verify(moduleIssues).initAndAddIssue(argumentCaptor.capture());
-
- org.sonar.core.issue.DefaultIssue issue = argumentCaptor.getValue();
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("foo", "bar"));
- assertThat(issue.message()).isEqualTo("Foo");
- assertThat(issue.line()).isNull();
- assertThat(issue.severity()).isEqualTo("BLOCKER");
- assertThat(issue.effortToFix()).isEqualTo(10.0);
- }
-
}