diff --git a/plugin/src/main/resources/coverage/configuration.jelly b/plugin/src/main/resources/coverage/configuration.jelly
index 94448befa..5c655c327 100644
--- a/plugin/src/main/resources/coverage/configuration.jelly
+++ b/plugin/src/main/resources/coverage/configuration.jelly
@@ -39,6 +39,9 @@
+
+
+
diff --git a/plugin/src/main/resources/coverage/configuration.properties b/plugin/src/main/resources/coverage/configuration.properties
index 102bdf86f..6f0c7c57d 100644
--- a/plugin/src/main/resources/coverage/configuration.properties
+++ b/plugin/src/main/resources/coverage/configuration.properties
@@ -13,6 +13,7 @@ checksName.title=Checks name
checksAnnotationScope.title=Select the scope of source code annotations
failOnError.title=Fail the step if errors have been reported during the execution
title.enabledForFailure=Enable recording for failed builds
+title.ignoreParsingErrors=Ignore parsing errors during processing of the coverage reports
title.skipSymbolicLinks=Skip symbolic links when searching for files
sourceCodeRetention.title=Source Code Retention Strategy
diff --git a/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/CoverageRecorder/help-ignoreParsingErrors.html b/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/CoverageRecorder/help-ignoreParsingErrors.html
index f3dc7d47e..f18e1fe68 100644
--- a/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/CoverageRecorder/help-ignoreParsingErrors.html
+++ b/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/CoverageRecorder/help-ignoreParsingErrors.html
@@ -1,7 +1,7 @@
This toggle determines if the coverage plugin should ignore parsing errors during processing of the coverage
- reports or if it should fail fast with an exception. By default this toggle is disabled and the
+ reports or if it should fail fast with an exception. By default, this toggle is disabled and the
parsers will fail fast. This helps to identify bugs in the parser or in the coverage tool execution.
- If you would rather like to ignore parsing errors, please tick this checkbox. Please note, that in this
+ If you would rather like to ignore parsing errors, please tick this checkbox. Please note that in this
case the parser results might be incomplete or even wrong.
This toggle determines if the coverage plugin should ignore parsing errors during processing of the coverage
- reports or if it should fail fast with an exception. By default this toggle is disabled and the
+ reports or if it should fail fast with an exception. By default, this toggle is disabled and the
parsers will fail fast. This helps to identify bugs in the parser or in the coverage tool execution.
- If you would rather like to ignore parsing errors, please tick this checkbox. Please note, that in this
+ If you would rather like to ignore parsing errors, please tick this checkbox. Please note that in this
case the parser results might be incomplete or even wrong.
diff --git a/ui-tests/pom.xml b/ui-tests/pom.xml
index 9b0a71e8e..f1d969320 100644
--- a/ui-tests/pom.xml
+++ b/ui-tests/pom.xml
@@ -155,7 +155,6 @@
org.apache.maven.pluginsmaven-surefire-plugin
- truefalsefalse
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/AbstractThreshold.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/AbstractThreshold.java
similarity index 96%
rename from ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/AbstractThreshold.java
rename to ui-tests/src/main/java/io/jenkins/plugins/coverage/AbstractThreshold.java
index 399092ddc..02a5af531 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/AbstractThreshold.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/AbstractThreshold.java
@@ -1,4 +1,4 @@
-package io.jenkins.plugins.coverage.CoveragePublisher.Threshold;
+package io.jenkins.plugins.coverage;
import org.jenkinsci.test.acceptance.po.Control;
import org.jenkinsci.test.acceptance.po.PageArea;
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Adapter.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/Adapter.java
similarity index 93%
rename from ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Adapter.java
rename to ui-tests/src/main/java/io/jenkins/plugins/coverage/Adapter.java
index c93d502d4..783ad80d8 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Adapter.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/Adapter.java
@@ -1,11 +1,10 @@
-package io.jenkins.plugins.coverage.CoveragePublisher;
+package io.jenkins.plugins.coverage;
import org.jenkinsci.test.acceptance.po.Control;
import org.jenkinsci.test.acceptance.po.PageArea;
import org.jenkinsci.test.acceptance.po.PageAreaImpl;
-import io.jenkins.plugins.coverage.CoveragePublisher.Threshold.AdapterThreshold;
-import io.jenkins.plugins.coverage.CoveragePublisher.Threshold.AdapterThreshold.AdapterThresholdTarget;
+import io.jenkins.plugins.coverage.AdapterThreshold.AdapterThresholdTarget;
/**
* Adapter which can be added in the configuration of the {@link CoveragePublisher} of a FreeStyle Project.
@@ -96,4 +95,4 @@ public void ensureAdvancedOptionsIsActivated() {
public void deleteAdapter() {
this.delete.click();
}
-}
\ No newline at end of file
+}
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/AdapterThreshold.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/AdapterThreshold.java
similarity index 90%
rename from ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/AdapterThreshold.java
rename to ui-tests/src/main/java/io/jenkins/plugins/coverage/AdapterThreshold.java
index a6c5a286b..1d0015239 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/AdapterThreshold.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/AdapterThreshold.java
@@ -1,7 +1,4 @@
-package io.jenkins.plugins.coverage.CoveragePublisher.Threshold;
-
-import io.jenkins.plugins.coverage.CoveragePublisher.Adapter;
-import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher;
+package io.jenkins.plugins.coverage;
/**
* Threshold used in {@link Adapter} in {@link CoveragePublisher}.
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/util/ChartUtil.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/ChartUtil.java
similarity index 98%
rename from ui-tests/src/main/java/io/jenkins/plugins/coverage/util/ChartUtil.java
rename to ui-tests/src/main/java/io/jenkins/plugins/coverage/ChartUtil.java
index f4d7e797e..7c52c5a26 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/util/ChartUtil.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/ChartUtil.java
@@ -1,4 +1,4 @@
-package io.jenkins.plugins.coverage.util;
+package io.jenkins.plugins.coverage;
import java.util.Objects;
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/CoveragePublisher.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher.java
similarity index 76%
rename from ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/CoveragePublisher.java
rename to ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher.java
index c87446769..da544b9bf 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/CoveragePublisher.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher.java
@@ -1,4 +1,4 @@
-package io.jenkins.plugins.coverage.CoveragePublisher;
+package io.jenkins.plugins.coverage;
import org.jenkinsci.test.acceptance.po.AbstractStep;
import org.jenkinsci.test.acceptance.po.Control;
@@ -8,13 +8,13 @@
import org.jenkinsci.test.acceptance.po.PageAreaImpl;
import org.jenkinsci.test.acceptance.po.PostBuildStep;
-import io.jenkins.plugins.coverage.CoveragePublisher.Threshold.GlobalThreshold;
-import io.jenkins.plugins.coverage.CoveragePublisher.Threshold.GlobalThreshold.GlobalThresholdTarget;
+import io.jenkins.plugins.coverage.GlobalThreshold.GlobalThresholdTarget;
/**
* Coverage Publisher which can be added in the configuration of a FreeStyle Project.
*/
-@Describable("Publish Coverage Report")
+@Describable("Record code coverage results")
+@SuppressWarnings("PMD.TooManyFields")
public class CoveragePublisher extends AbstractStep implements PostBuildStep {
private final Control adapter = control("hetero-list-add[adapters]");
@@ -25,29 +25,60 @@ public class CoveragePublisher extends AbstractStep implements PostBuildStep {
private final Control failNoReports = control("failNoReports");
private final Control failBuildIfCoverageDecreasedInChangeRequest = control(
"failBuildIfCoverageDecreasedInChangeRequest");
- private final Control skipPublishingChecks = control("skipPublishingChecks");
private final Control sourceFileResolver = control("sourceFileResolver/level");
private final Control globalThreshold = control("repeatable-add");
- private final Control sourceCodeEncoding = control("sourceCodeEncoding");
private final Control sourceDirectories = findRepeatableAddButtonFor("sourceDirectories");
+
+ private final Control id = control("id");
+ private final Control name = control("name");
+ private final Control skipPublishingChecks = control("skipPublishingChecks");
private final Control checksName = control("checksName");
+ private final Control checksAnnotationScope = control("checksAnnotationScope");
+ private final Control ignoreParsingErrors = control("ignoreParsingErrors");
+ private final Control failOnError = control("failOnError");
+ private final Control enabledForFailure = control("enabledForFailure");
+ private final Control skipSymbolicLinks = control("skipSymbolicLinks");
+ private final Control scm = control("scm");
+ private final Control sourceCodeEncoding = control("sourceCodeEncoding");
+ private final Control sourceCodeRetention = control("sourceCodeRetention");
/**
- * Constructor for CoveragePublisher.
+ * Creates a new page object for the {@link CoveragePublisher}.
*
* @param parent
- * is the job which uses the CoveragePublisher
+ * the parent job
* @param path
- * on the parent page
+ * the path on the configuration page
*/
public CoveragePublisher(final Job parent, final String path) {
super(parent, path);
}
+ CoveragePublisher setIgnoreParsingErrors(final boolean ignoreParsingErrors) {
+ ensureAdvancedOptionsIsActivated();
+ this.ignoreParsingErrors.check(ignoreParsingErrors);
+
+ return this;
+ }
+
+ CoveragePublisher setFailOnError(final boolean failOnError) {
+ ensureAdvancedOptionsIsActivated();
+ this.failOnError.check(failOnError);
+
+ return this;
+ }
+
private Control findRepeatableAddButtonFor(final String propertyName) {
return control(by.xpath("//div[@id='" + propertyName + "']//button[contains(@path,'-add')]"));
}
+ CoveragePublisher setTool(final String tool, final String pattern) {
+ var tools = new CoverageTool(this, "tools");
+ tools.setTool("COBERTURA").setPattern(pattern);
+
+ return this;
+ }
+
/**
* Sets the encoding when reading source code files.
*
@@ -161,9 +192,9 @@ public void setChecksName(final String checksName) {
}
/**
- * Ensures advanced options of CoveragePublisher is activated, so that values like {@link
- * CoveragePublisher#setFailUnhealthy(boolean)} or {@link CoveragePublisher#setFailNoReports(boolean)} are visible
- * and can be set.
+ * Ensures advanced options of CoveragePublisher is activated, so that values like
+ * {@link CoveragePublisher#setFailUnhealthy(boolean)} or {@link CoveragePublisher#setFailNoReports(boolean)} are
+ * visible and can be set.
*/
public void ensureAdvancedOptionsIsActivated() {
if (advancedOptions.exists()) {
@@ -278,6 +309,45 @@ public void setPath(final String path) {
this.path.set(path);
}
}
+
+ /**
+ * Page area of a coverage tool configuration.
+ */
+ public static class CoverageTool extends PageAreaImpl {
+ private final Control tool = control("");
+ private final Control pattern = control("pattern");
+
+ CoverageTool(final PageArea coverageRecorder, final String path) {
+ super(coverageRecorder, path);
+ }
+
+ /**
+ * Sets the name of the tool.
+ *
+ * @param toolName
+ * the name of the tool, e.g., PIT, JACOCO, COBERTURA
+ *
+ * @return this
+ */
+ public CoverageTool setTool(final String toolName) {
+ tool.select(toolName);
+ return this;
+ }
+
+ /**
+ * Sets the pattern of the files to parse.
+ *
+ * @param pattern
+ * the pattern
+ *
+ * @return this
+ */
+ public CoverageTool setPattern(final String pattern) {
+ this.pattern.set(pattern);
+
+ return this;
+ }
+ }
}
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoverageReport.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoverageReport.java
index 471c0f554..6f63f2698 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoverageReport.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoverageReport.java
@@ -11,7 +11,7 @@
import org.jenkinsci.test.acceptance.po.Build;
import org.jenkinsci.test.acceptance.po.PageObject;
-import static io.jenkins.plugins.coverage.util.ChartUtil.*;
+import static io.jenkins.plugins.coverage.ChartUtil.*;
/**
* {@link PageObject} representing the Coverage Report.
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/GlobalThreshold.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/GlobalThreshold.java
similarity index 93%
rename from ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/GlobalThreshold.java
rename to ui-tests/src/main/java/io/jenkins/plugins/coverage/GlobalThreshold.java
index b6cd0b65d..02cefd4d0 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/CoveragePublisher/Threshold/GlobalThreshold.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/GlobalThreshold.java
@@ -1,6 +1,4 @@
-package io.jenkins.plugins.coverage.CoveragePublisher.Threshold;
-
-import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher;
+package io.jenkins.plugins.coverage;
/**
* Global Threshold used in {@link CoveragePublisher}.
diff --git a/ui-tests/src/main/java/io/jenkins/plugins/coverage/MainPanel.java b/ui-tests/src/main/java/io/jenkins/plugins/coverage/MainPanel.java
index 6d2a04641..046ad1a3a 100644
--- a/ui-tests/src/main/java/io/jenkins/plugins/coverage/MainPanel.java
+++ b/ui-tests/src/main/java/io/jenkins/plugins/coverage/MainPanel.java
@@ -6,8 +6,6 @@
import org.jenkinsci.test.acceptance.po.Job;
import org.jenkinsci.test.acceptance.po.PageObject;
-import io.jenkins.plugins.coverage.util.ChartUtil;
-
/**
* {@link PageObject} representing the Job status on the build page of a job.
*/
@@ -20,7 +18,7 @@ public class MainPanel extends PageObject {
* @param parent
* job of wanted MainPanel.
*/
- public MainPanel(Job parent) {
+ public MainPanel(final Job parent) {
super(parent, parent.url);
}
diff --git a/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoveragePublisherTest.java b/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoveragePublisherTest.java
index a83463c66..dd0568999 100644
--- a/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoveragePublisherTest.java
+++ b/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoveragePublisherTest.java
@@ -1,5 +1,9 @@
package io.jenkins.plugins.coverage;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
import org.junit.Ignore;
import org.junit.Test;
@@ -7,7 +11,7 @@
import org.jenkinsci.test.acceptance.po.Build;
import org.jenkinsci.test.acceptance.po.FreeStyleJob;
-import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher.SourceFileResolver;
+import io.jenkins.plugins.coverage.CoveragePublisher.SourceFileResolver;
import static org.assertj.core.api.AssertionsForClassTypes.*;
@@ -16,6 +20,45 @@
* results.
*/
public class CoveragePublisherTest extends UiTest {
+ /**
+ * Creates two successful builds. Tests the reference values in summary, coverage report and main panel.
+ */
+ @Test
+ public void testCodeCoveragePlugin() {
+ FreeStyleJob job = getJobWithFirstBuildAndDifferentReports(InCaseCoverageDecreasedConfiguration.DONT_FAIL);
+ Build secondBuild = buildSuccessfully(job);
+
+ HashMap expectedCoverageFifthBuild = new HashMap<>();
+ expectedCoverageFifthBuild.put("Line", 91.02);
+ expectedCoverageFifthBuild.put("Branch", 93.97);
+ List expectedReferenceCoverageFifthBuild = new ArrayList<>();
+ expectedReferenceCoverageFifthBuild.add(-4.5);
+ expectedReferenceCoverageFifthBuild.add(5.38);
+
+ CoverageSummaryTest.verifySummaryWithReferenceBuild(secondBuild, expectedCoverageFifthBuild,
+ expectedReferenceCoverageFifthBuild);
+
+ CoverageReport report = new CoverageReport(secondBuild);
+ report.open();
+
+ FileCoverageTable fileCoverageTable = report.openFileCoverageTable();
+ CoverageReportTest.verifyFileCoverageTableContent(fileCoverageTable,
+ new String[] {"edu.hm.hafner.util", "edu.hm.hafner.util", "edu.hm.hafner.util"},
+ new String[] {"Ensure.java", "FilteredLog.java", "Generated.java"},
+ new String[] {"80.00%", "100.00%", "n/a"},
+ new String[] {"86.96%", "100.00%", "n/a"});
+ CoverageReportTest.verifyFileCoverageTableNumberOfMaxEntries(fileCoverageTable, 10);
+
+ String coverageTree = report.getCoverageTree();
+ CoverageReportTest.verifyCoverageTreeAfterSomeBuildsWithReports(coverageTree);
+
+ String coverageOverview = report.getCoverageOverview();
+ CoverageReportTest.verifyCoverageOverviewAfterSomeBuildsWithReports(coverageOverview);
+
+ MainPanel mainPanel = new MainPanel(job);
+ MainPanelTest.verifyTrendChartWithTwoReports(mainPanel, 1, 2);
+ }
+
/**
* Verifies that job with no report fails when setFailNoReports(true).
*/
diff --git a/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageReportTest.java b/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageReportTest.java
index d93e59df5..e58c6e5fa 100644
--- a/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageReportTest.java
+++ b/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageReportTest.java
@@ -7,8 +7,6 @@
import org.jenkinsci.test.acceptance.po.Build;
import org.jenkinsci.test.acceptance.po.FreeStyleJob;
-import io.jenkins.plugins.coverage.CoveragePublisher.Adapter;
-import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher;
import io.jenkins.plugins.coverage.FileCoverageTable.Header;
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.*;
diff --git a/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageSummaryTest.java b/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageSummaryTest.java
index d5ce945e2..78b584c62 100644
--- a/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageSummaryTest.java
+++ b/ui-tests/src/test/java/io/jenkins/plugins/coverage/CoverageSummaryTest.java
@@ -10,9 +10,6 @@
import org.jenkinsci.test.acceptance.po.Build;
import org.jenkinsci.test.acceptance.po.FreeStyleJob;
-import io.jenkins.plugins.coverage.CoveragePublisher.Adapter;
-import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher;
-
import static org.assertj.core.api.Assertions.*;
/**
diff --git a/ui-tests/src/test/java/io/jenkins/plugins/coverage/SmokeTests.java b/ui-tests/src/test/java/io/jenkins/plugins/coverage/SmokeTests.java
index 1721be68d..2c70ae832 100644
--- a/ui-tests/src/test/java/io/jenkins/plugins/coverage/SmokeTests.java
+++ b/ui-tests/src/test/java/io/jenkins/plugins/coverage/SmokeTests.java
@@ -1,56 +1,43 @@
package io.jenkins.plugins.coverage;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
import org.junit.Test;
-import org.jenkinsci.test.acceptance.po.Build;
import org.jenkinsci.test.acceptance.po.FreeStyleJob;
/**
- * Smoke Test to test the most used features of coverage plugin.
+ * Smoke Test for the most used features of the coverage plugin.
*/
public class SmokeTests extends UiTest {
+ /** Verifies that the toggle for failing builds is working when there are no reports. */
+ @Test
+ public void shouldToggleFailingIfThereAreNoReportsFound() {
+ FreeStyleJob job = jenkins.getJobs().create(FreeStyleJob.class);
+ var publisher = job.addPublisher(CoveragePublisher.class);
+ job.save();
+
+ buildSuccessfully(job);
+
+ job.configure(() -> publisher.setFailOnError(true));
+
+ buildWithErrors(job);
+ }
- /**
- * Creates two successful builds. Tests the reference values in summary, coverage report and main panel.
- */
+ /** Verifies that the toggle for ignoring parsing errors is working when a report with errors is read. */
@Test
- public void testCodeCoveragePlugin() {
- FreeStyleJob job = getJobWithFirstBuildAndDifferentReports(InCaseCoverageDecreasedConfiguration.DONT_FAIL);
- Build secondBuild = buildSuccessfully(job);
-
- HashMap expectedCoverageFifthBuild = new HashMap<>();
- expectedCoverageFifthBuild.put("Line", 91.02);
- expectedCoverageFifthBuild.put("Branch", 93.97);
- List expectedReferenceCoverageFifthBuild = new ArrayList<>();
- expectedReferenceCoverageFifthBuild.add(-4.5);
- expectedReferenceCoverageFifthBuild.add(5.38);
-
- CoverageSummaryTest.verifySummaryWithReferenceBuild(secondBuild, expectedCoverageFifthBuild,
- expectedReferenceCoverageFifthBuild);
-
- CoverageReport report = new CoverageReport(secondBuild);
- report.open();
-
- FileCoverageTable fileCoverageTable = report.openFileCoverageTable();
- CoverageReportTest.verifyFileCoverageTableContent(fileCoverageTable,
- new String[] {"edu.hm.hafner.util", "edu.hm.hafner.util", "edu.hm.hafner.util"},
- new String[] {"Ensure.java", "FilteredLog.java", "Generated.java"},
- new String[] {"80.00%", "100.00%", "n/a"},
- new String[] {"86.96%", "100.00%", "n/a"});
- CoverageReportTest.verifyFileCoverageTableNumberOfMaxEntries(fileCoverageTable, 10);
-
- String coverageTree = report.getCoverageTree();
- CoverageReportTest.verifyCoverageTreeAfterSomeBuildsWithReports(coverageTree);
-
- String coverageOverview = report.getCoverageOverview();
- CoverageReportTest.verifyCoverageOverviewAfterSomeBuildsWithReports(coverageOverview);
-
- MainPanel mainPanel = new MainPanel(job);
- MainPanelTest.verifyTrendChartWithTwoReports(mainPanel, 1, 2);
+ public void shouldToggleFailingIfTheCoverageFileIsInvalid() {
+ FreeStyleJob job = jenkins.getJobs().create(FreeStyleJob.class);
+
+ job.copyResource("/cobertura-duplicate-methods.xml");
+
+ var publisher = job.addPublisher(CoveragePublisher.class);
+ publisher.setTool("Cobertura", "cobertura-*.xml");
+ job.save();
+
+ buildWithErrors(job);
+
+ job.configure(() -> publisher.setIgnoreParsingErrors(true));
+
+ buildSuccessfully(job);
}
}
diff --git a/ui-tests/src/test/java/io/jenkins/plugins/coverage/UiTest.java b/ui-tests/src/test/java/io/jenkins/plugins/coverage/UiTest.java
index 3cb64d9ec..455ce067e 100644
--- a/ui-tests/src/test/java/io/jenkins/plugins/coverage/UiTest.java
+++ b/ui-tests/src/test/java/io/jenkins/plugins/coverage/UiTest.java
@@ -6,11 +6,9 @@
import org.jenkinsci.test.acceptance.po.FreeStyleJob;
import org.jenkinsci.test.acceptance.po.Job;
-import io.jenkins.plugins.coverage.CoveragePublisher.Adapter;
-import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher;
-import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher.SourceFileResolver;
-import io.jenkins.plugins.coverage.CoveragePublisher.Threshold.AdapterThreshold.AdapterThresholdTarget;
-import io.jenkins.plugins.coverage.CoveragePublisher.Threshold.GlobalThreshold.GlobalThresholdTarget;
+import io.jenkins.plugins.coverage.AdapterThreshold.AdapterThresholdTarget;
+import io.jenkins.plugins.coverage.CoveragePublisher.SourceFileResolver;
+import io.jenkins.plugins.coverage.GlobalThreshold.GlobalThresholdTarget;
/**
* Base class for all UI tests. Provides several helper methods that can be used by all tests.
@@ -31,7 +29,7 @@ class UiTest extends AbstractJUnitTest {
*
* @return a job without any reports
*/
- FreeStyleJob getJobWithoutAnyReports(InCaseNoReportsConfiguration configuration) {
+ FreeStyleJob getJobWithoutAnyReports(final InCaseNoReportsConfiguration configuration) {
if (configuration == InCaseNoReportsConfiguration.FAIL) {
return createJobWithConfiguration(JobConfiguration.NO_REPORTS_SHOULD_FAIL);
}
@@ -92,8 +90,8 @@ FreeStyleJob getJobWithReportAndSourceCode(final SourceFileResolver sourceFileRe
*
* @return Job with threshold and jacoco adapter.
*/
- FreeStyleJob getJobWithAdapterThresholdAndFailOnUnhealthySetter(int unhealthyThreshold, int unstableThreshold,
- boolean failUnhealthy, ThresholdLevel thresholdLevel) {
+ FreeStyleJob getJobWithAdapterThresholdAndFailOnUnhealthySetter(final int unhealthyThreshold, final int unstableThreshold,
+ final boolean failUnhealthy, final ThresholdLevel thresholdLevel) {
FreeStyleJob job = jenkins.getJobs().create(FreeStyleJob.class);
CoveragePublisher coveragePublisher = job.addPublisher(CoveragePublisher.class);
Adapter jacocoAdapter = coveragePublisher.createAdapterPageArea("Jacoco");
diff --git a/ui-tests/src/test/resources/cobertura-duplicate-methods.xml b/ui-tests/src/test/resources/cobertura-duplicate-methods.xml
new file mode 100644
index 000000000..0bb1324db
--- /dev/null
+++ b/ui-tests/src/test/resources/cobertura-duplicate-methods.xml
@@ -0,0 +1,75 @@
+
+
+
+ /CoverageTest.Service/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+