diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java index d952037b5..db50e1f85 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java @@ -226,6 +226,21 @@ public String formatValueWithMetric(final Value value) { + format(value, Functions.getCurrentLocale()); } + /** + * Returns a formatted and localized String representation of the specified value prefixed with the metric name. + * The value will be printed with all details (number of covered and missed items). + * + * @param value + * the value to format + * + * @return the value formatted as a string + */ + @SuppressWarnings("unused") // Called by jelly view + public String formatDetailedValueWithMetric(final Value value) { + return getDisplayName(value.getMetric()) + ": " + + formatDetails(value, Functions.getCurrentLocale()); + } + /** * Transforms percentages with a ',' decimal separator to a representation using a '.' in order to use the * percentage for styling HTML tags. diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageBuildAction.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageBuildAction.java index aface9cff..96585e9bb 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageBuildAction.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageBuildAction.java @@ -277,6 +277,23 @@ public Baseline getDeltaBaseline(final Baseline baseline) { throw new NoSuchElementException("No delta baseline for this baseline: " + baseline); } + /** + * Returns the title text for the specified baseline. + * + * @param baseline + * the baseline to get the title for + * + * @return the title + */ + public String getTitle(final Baseline baseline) { + if (hasDelta(baseline)) { + return getDeltaBaseline(baseline).getTitle(); + } + else { + return baseline.getTitle(); + } + } + /** * Returns all available values for the specified baseline. * diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisher.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisher.java index 3d43eead2..62ef594a6 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisher.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisher.java @@ -5,7 +5,10 @@ import java.util.Collections; import java.util.List; import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; import java.util.stream.Collectors; import org.apache.commons.lang3.math.Fraction; @@ -14,6 +17,7 @@ import edu.hm.hafner.coverage.FileNode; import edu.hm.hafner.coverage.Metric; import edu.hm.hafner.coverage.Node; +import edu.hm.hafner.coverage.Value; import edu.hm.hafner.util.VisibleForTesting; import hudson.Functions; @@ -87,20 +91,48 @@ ChecksDetails extractChecksDetails() { .withName(checksName) .withStatus(ChecksStatus.COMPLETED) .withConclusion(getCheckConclusion(action.getQualityGateResult().getOverallStatus())) - .withDetailsURL(getCoverageReportBaseUrl()) + .withDetailsURL(getBaseUrl()) .withOutput(output) .build(); } private String getChecksTitle() { - return String.format("%s: %s", - FORMATTER.getDisplayName(Baseline.MODIFIED_LINES), - action.formatValue(Baseline.MODIFIED_LINES, Metric.LINE)); + Baseline baseline = selectBaseline(); + return getMetricsForTitle().stream() + .filter(metric -> action.hasValue(baseline, metric)) + .map(metric -> format(baseline, metric)) + .collect(Collectors.joining(", ", "", ".")); + } + + private Baseline selectBaseline() { + if (action.hasBaselineResult(Baseline.MODIFIED_LINES)) { + return Baseline.MODIFIED_LINES; + } + else { + return Baseline.PROJECT; + } + } + + private String format(final Baseline baseline, final Metric metric) { + String suffix; + if (action.hasDelta(baseline, metric)) { + suffix = String.format(" (%s)", action.formatDelta(baseline, metric)); + } + else { + suffix = ""; + } + return String.format("%s: %s%s", + FORMATTER.getDisplayName(metric), action.formatValue(baseline, metric), suffix); + } + + private NavigableSet getMetricsForTitle() { + return new TreeSet<>( + Set.of(Metric.LINE, Metric.BRANCH, Metric.MUTATION)); } private String getSummary() { var root = rootNode; - return getOverallCoverageSummary(root) + "\n\n" + return getOverallCoverageSummary() + "\n\n" + getQualityGatesSummary() + "\n\n" + getProjectMetricsSummary(root); } @@ -132,7 +164,10 @@ private Collection getMissingLines(final FileNode fi var builder = createAnnotationBuilder(fileNode).withTitle("Not covered line"); return fileNode.getMissedLines().stream() - .map(line -> builder.withMessage("Line " + line + " is not covered by tests").withStartLine(line).build()) + .map(line -> builder.withMessage("Line " + line + " is not covered by tests") + .withStartLine(line) + .withEndLine(line) + .build()) .collect(Collectors.toList()); } @@ -141,7 +176,9 @@ private Collection getSurvivedMutations(final FileNo return fileNode.getSurvivedMutations().entrySet().stream() .map(entry -> builder.withMessage(createMutationMessage(entry.getKey(), entry.getValue())) - .withStartLine(entry.getKey()).build()) + .withStartLine(entry.getKey()) + .withEndLine(entry.getKey()) + .build()) .collect(Collectors.toList()); } @@ -157,7 +194,9 @@ private Collection getPartiallyCoveredLines(final Fi return fileNode.getPartiallyCoveredLines().entrySet().stream() .map(entry -> builder.withMessage(createBranchMessage(entry.getKey(), entry.getValue())) - .withStartLine(entry.getKey()).build()) + .withStartLine(entry.getKey()) + .withEndLine(entry.getKey()) + .build()) .collect(Collectors.toList()); } @@ -175,79 +214,32 @@ private ChecksAnnotationBuilder createAnnotationBuilder(final FileNode fileNode) .withAnnotationLevel(ChecksAnnotationLevel.WARNING); } - private String getCoverageReportBaseUrl() { + private String getBaseUrl() { return jenkinsFacade.getAbsoluteUrl(action.getOwner().getUrl(), action.getUrlName()); } - private String getOverallCoverageSummary(final Node root) { - String sectionHeader = getSectionHeader(2, Messages.Checks_Summary()); - - var modifiedFilesCoverageRoot = root.filterByModifiedFiles(); - var modifiedLinesCoverageRoot = root.filterByModifiedLines(); - var indirectlyChangedCoverage = root.filterByIndirectChanges(); - - var projectCoverageHeader = getBulletListItem(1, - formatText(TextFormat.BOLD, getUrlText(Baseline.PROJECT_DELTA.getTitle(), - getCoverageReportBaseUrl() + Baseline.PROJECT_DELTA.getUrl()))); - var modifiedFilesCoverageHeader = getBulletListItem(1, - formatText(TextFormat.BOLD, getUrlText(Baseline.MODIFIED_FILES_DELTA.getTitle(), - getCoverageReportBaseUrl() + Baseline.MODIFIED_FILES_DELTA.getUrl()))); - var modifiedLinesCoverageHeader = getBulletListItem(1, - formatText(TextFormat.BOLD, getUrlText(Baseline.MODIFIED_LINES_DELTA.getTitle(), - getCoverageReportBaseUrl() + Baseline.MODIFIED_LINES_DELTA.getUrl()))); - var indirectCoverageChangesHeader = getBulletListItem(1, - formatText(TextFormat.BOLD, getUrlText(Baseline.INDIRECT.getTitle(), - getCoverageReportBaseUrl() + Baseline.INDIRECT.getUrl()))); - - var projectCoverageLine = getBulletListItem(2, - formatCoverageForMetric(Metric.LINE, Baseline.PROJECT)); - var projectCoverageBranch = getBulletListItem(2, - formatCoverageForMetric(Metric.BRANCH, Baseline.PROJECT)); - var projectCoverageComplexity = getBulletListItem(2, formatRootValueOfMetric(root, Metric.COMPLEXITY_DENSITY)); - var projectCoverageLoc = getBulletListItem(2, formatRootValueOfMetric(root, Metric.LOC)); - - var modifiedFilesCoverageLine = getBulletListItem(2, - formatCoverageForMetric(Metric.LINE, Baseline.MODIFIED_FILES)); - var modifiedFilesCoverageBranch = getBulletListItem(2, - formatCoverageForMetric(Metric.BRANCH, Baseline.MODIFIED_FILES)); - var modifiedFilesCoverageComplexity = getBulletListItem(2, - formatRootValueOfMetric(modifiedFilesCoverageRoot, Metric.COMPLEXITY_DENSITY)); - var modifiedFilesCoverageLoc = getBulletListItem(2, - formatRootValueOfMetric(modifiedFilesCoverageRoot, Metric.LOC)); - - var modifiedLinesCoverageLine = getBulletListItem(2, - formatCoverageForMetric(Metric.LINE, Baseline.MODIFIED_LINES)); - var modifiedLinesCoverageBranch = getBulletListItem(2, - formatCoverageForMetric(Metric.BRANCH, Baseline.MODIFIED_LINES)); - var modifiedLinesCoverageLoc = getBulletListItem(2, - formatRootValueOfMetric(modifiedLinesCoverageRoot, Metric.LOC)); - - var indirectCoverageChangesLine = getBulletListItem(2, - formatCoverageForMetric(Metric.LINE, Baseline.INDIRECT)); - var indirectCoverageChangesBranch = getBulletListItem(2, - formatCoverageForMetric(Metric.BRANCH, Baseline.INDIRECT)); - var indirectCoverageChangesLoc = getBulletListItem(2, - formatRootValueOfMetric(indirectlyChangedCoverage, Metric.LOC)); + private List getBaselines() { + return List.of(Baseline.PROJECT, Baseline.MODIFIED_FILES, Baseline.MODIFIED_LINES, Baseline.INDIRECT); + } - return sectionHeader - + projectCoverageHeader - + projectCoverageLine - + projectCoverageBranch - + projectCoverageComplexity - + projectCoverageLoc - + modifiedFilesCoverageHeader - + modifiedFilesCoverageLine - + modifiedFilesCoverageBranch - + modifiedFilesCoverageComplexity - + modifiedFilesCoverageLoc - + modifiedLinesCoverageHeader - + modifiedLinesCoverageLine - + modifiedLinesCoverageBranch - + modifiedLinesCoverageLoc - + indirectCoverageChangesHeader - + indirectCoverageChangesLine - + indirectCoverageChangesBranch - + indirectCoverageChangesLoc; + private String getOverallCoverageSummary() { + StringBuilder description = new StringBuilder(getSectionHeader(2, Messages.Checks_Summary())); + + for (Baseline baseline : getBaselines()) { + if (action.hasBaselineResult(baseline)) { + description.append(getBulletListItem(1, + formatText(TextFormat.BOLD, + getUrlText(action.getTitle(baseline), getBaseUrl() + baseline.getUrl())))); + for (Value value : action.getValues(baseline)) { + String display = FORMATTER.formatDetailedValueWithMetric(value); + if (action.hasDelta(baseline, value.getMetric())) { + display += String.format(" - Delta: %s", action.formatDelta(baseline, value.getMetric())); + } + description.append(getBulletListItem(2, display)); + } + } + } + return description.toString(); } /** @@ -289,17 +281,6 @@ private String getProjectMetricsSummary(final Node result) { + projectCoverageDeltaRow; } - private String formatCoverageForMetric(final Metric metric, final Baseline baseline) { - return String.format("%s: %s / %s", FORMATTER.getDisplayName(metric), - action.formatValue(baseline, metric), action.formatDelta(baseline, metric)); - } - - private String formatRootValueOfMetric(final Node root, final Metric metric) { - var value = root.getValue(metric); - return value.map(FORMATTER::formatValueWithMetric) - .orElseGet(() -> FORMATTER.getDisplayName(metric) + ": " + Messages.Coverage_Not_Available()); - } - private String formatText(final TextFormat format, final String text) { switch (format) { case BOLD: diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageViewModel.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageViewModel.java index d7a735a8b..659b72a92 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageViewModel.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageViewModel.java @@ -68,7 +68,6 @@ public class CoverageViewModel extends DefaultAsyncTableContentProvider implemen static final String ABSOLUTE_COVERAGE_TABLE_ID = "absolute-coverage-table"; static final String MODIFIED_LINES_COVERAGE_TABLE_ID = "modified-lines-coverage-table"; - static final String MODIFIED_FILES_COVERAGE_TABLE_ID = "modified-files-coverage-table"; static final String INDIRECT_COVERAGE_TABLE_ID = "indirect-coverage-table"; private static final String INLINE_SUFFIX = "-inline"; private static final String INFO_MESSAGES_VIEW_URL = "info"; diff --git a/plugin/src/main/resources/coverage/coverage-summary.jelly b/plugin/src/main/resources/coverage/coverage-summary.jelly index 4693884db..7139e9d10 100644 --- a/plugin/src/main/resources/coverage/coverage-summary.jelly +++ b/plugin/src/main/resources/coverage/coverage-summary.jelly @@ -10,14 +10,7 @@
  • - - - ${it.getDeltaBaseline(baseline).title} - - - ${baseline.title} - - + ${it.getTitle(baseline)}
    diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/AbstractCoverageTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/AbstractCoverageTest.java index c19ec4bae..358473be0 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/AbstractCoverageTest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/AbstractCoverageTest.java @@ -10,6 +10,7 @@ import org.junitpioneer.jupiter.DefaultLocale; import edu.hm.hafner.coverage.Coverage.CoverageBuilder; +import edu.hm.hafner.coverage.CoverageParser; import edu.hm.hafner.coverage.Metric; import edu.hm.hafner.coverage.Node; import edu.hm.hafner.coverage.Value; @@ -50,8 +51,22 @@ public abstract class AbstractCoverageTest extends ResourceTest { * @return the parsed coverage tree */ protected Node readJacocoResult(final String fileName) { + return readResult(fileName, new JacocoParser()); + } + + /** + * Reads and parses a JaCoCo coverage report. + * + * @param fileName + * the name of the coverage report file + * @param parser + * the parser to use + * + * @return the parsed coverage tree + */ + protected Node readResult(final String fileName, final CoverageParser parser) { try { - var node = new JacocoParser().parse(Files.newBufferedReader(getResourceAsFile(fileName)), log); + var node = parser.parse(Files.newBufferedReader(getResourceAsFile(fileName)), log); node.splitPackages(); return node; } diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/charts/TreeMapNodeConverterTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/charts/TreeMapNodeConverterTest.java index 3be8940fe..198a33bca 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/charts/TreeMapNodeConverterTest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/charts/TreeMapNodeConverterTest.java @@ -22,12 +22,12 @@ * @author Ullrich Hafner */ class TreeMapNodeConverterTest extends AbstractCoverageTest { - private static final ColorProvider COLOR_PROVIDER = ColorProviderFactory.createDefaultColorProvider(); + private static final String PREFIX = "../steps/"; @Test void shouldConvertCodingStyleToTree() { - Node tree = readJacocoResult(JACOCO_CODING_STYLE_FILE); + Node tree = readJacocoResult(PREFIX + JACOCO_CODING_STYLE_FILE); LabeledTreeMapNode root = new TreeMapNodeConverter().toTreeChartModel(tree, Metric.LINE, COLOR_PROVIDER); assertThat(root.getName()).isEqualTo("Java coding style"); @@ -49,7 +49,7 @@ void shouldConvertCodingStyleToTree() { @Test void shouldReadBranchCoverage() { - Node tree = readJacocoResult(JACOCO_ANALYSIS_MODEL_FILE); + Node tree = readJacocoResult(PREFIX + JACOCO_ANALYSIS_MODEL_FILE); LabeledTreeMapNode root = new TreeMapNodeConverter().toTreeChartModel(tree, Metric.BRANCH, COLOR_PROVIDER); @@ -69,11 +69,6 @@ private List aggregateChildren(final LabeledTreeMapNode root return subChildren; } - @Override - protected Node readJacocoResult(final String fileName) { - return super.readJacocoResult("../steps/" + fileName); - } - /** * Gets the matching fill color for the coverage percentage. * diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisherTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisherTest.java index 0ff8117e9..144a33d32 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisherTest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/steps/CoverageChecksPublisherTest.java @@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.Fraction; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.junitpioneer.jupiter.DefaultLocale; @@ -15,6 +16,7 @@ import edu.hm.hafner.coverage.Coverage.CoverageBuilder; import edu.hm.hafner.coverage.Metric; import edu.hm.hafner.coverage.Node; +import edu.hm.hafner.coverage.parser.PitestParser; import hudson.model.Run; @@ -39,6 +41,35 @@ class CoverageChecksPublisherTest extends AbstractCoverageTest { private static final String REPORT_NAME = "Name"; private static final int ANNOTATIONS_COUNT_FOR_MODIFIED = 3; + @Test + void shouldShowProjectBaselineForJaCoCo() { + var result = readJacocoResult("jacoco-codingstyle.xml"); + + var publisher = new CoverageChecksPublisher(createActionWithoutDelta(result), result, REPORT_NAME, + ChecksAnnotationScope.SKIP, createJenkins()); + + assertThatTitleIs(publisher, "Line Coverage: 91.02% (294/323), Branch Coverage: 93.97% (109/116)."); + } + + @Test + void shouldShowProjectBaselineForPit() { + var result = readResult("mutations.xml", new PitestParser()); + + var publisher = new CoverageChecksPublisher(createActionWithoutDelta(result), result, REPORT_NAME, + ChecksAnnotationScope.SKIP, createJenkins()); + + assertThatTitleIs(publisher, "Line Coverage: 93.84% (198/211), Mutation Coverage: 90.24% (222/246)."); + } + + private void assertThatTitleIs(final CoverageChecksPublisher publisher, final String expectedTitle) { + var checkDetails = publisher.extractChecksDetails(); + assertThat(checkDetails.getOutput()).isPresent().get().satisfies(output -> { + assertThat(output.getTitle()).isPresent() + .get() + .isEqualTo(expectedTitle); + }); + } + @ParameterizedTest(name = "should create checks (scope = {0}, expected annotations = {1})") @CsvSource({"SKIP, 0", "ALL_LINES, 36", "MODIFIED_LINES, 3"}) void shouldCreateChecksReport(final ChecksAnnotationScope scope, final int expectedAnnotations) { @@ -61,7 +92,7 @@ private void assertThatDetailsAreCorrect(final ChecksDetails checkDetails, final assertThat(checkDetails.getOutput()).isPresent().get().satisfies(output -> { assertThat(output.getTitle()).isPresent() .get() - .isEqualTo("Modified code lines: 50.00% (1/2)"); + .isEqualTo("Line Coverage: 50.00% (1/2) (+50.00%)."); assertThat(output.getText()).isEmpty(); assertChecksAnnotations(output, expectedAnnotations); assertSummary(output); @@ -84,6 +115,7 @@ private void assertChecksAnnotations(final ChecksOutput checksOutput, final int assertThat(annotation.getPath()).contains("edu/hm/hafner/util/TreeStringBuilder.java"); assertThat(annotation.getMessage()).contains("Line 61 is not covered by tests"); assertThat(annotation.getStartLine()).isPresent().get().isEqualTo(61); + assertThat(annotation.getEndLine()).isPresent().get().isEqualTo(61); }, annotation -> { assertThat(annotation.getTitle()).contains("Not covered line"); @@ -91,6 +123,7 @@ private void assertChecksAnnotations(final ChecksOutput checksOutput, final int assertThat(annotation.getPath()).contains("edu/hm/hafner/util/TreeStringBuilder.java"); assertThat(annotation.getMessage()).contains("Line 62 is not covered by tests"); assertThat(annotation.getStartLine()).isPresent().get().isEqualTo(62); + assertThat(annotation.getEndLine()).isPresent().get().isEqualTo(62); }, annotation -> { assertThat(annotation.getTitle()).contains("Partially covered line"); @@ -98,6 +131,7 @@ private void assertChecksAnnotations(final ChecksOutput checksOutput, final int assertThat(annotation.getPath()).contains("edu/hm/hafner/util/TreeStringBuilder.java"); assertThat(annotation.getMessage()).contains("Line 113 is only partially covered, one branch is missing"); assertThat(annotation.getStartLine()).isPresent().get().isEqualTo(113); + assertThat(annotation.getEndLine()).isPresent().get().isEqualTo(113); }); } else { @@ -134,4 +168,13 @@ private CoverageBuildAction createCoverageBuildAction(final Node result) { List.of(testCoverage), new TreeMap<>(Map.of(Metric.LINE, Fraction.ONE_HALF)), List.of(testCoverage), new TreeMap<>(Map.of(Metric.LINE, Fraction.ONE_HALF)), List.of(testCoverage), false); } + + private CoverageBuildAction createActionWithoutDelta(final Node result) { + var run = mock(Run.class); + when(run.getUrl()).thenReturn(BUILD_LINK); + + return new CoverageBuildAction(run, COVERAGE_ID, REPORT_NAME, StringUtils.EMPTY, result, + new QualityGateResult(), null, "refId", + new TreeMap<>(), List.of(), new TreeMap<>(), List.of(), new TreeMap<>(), List.of(), false); + } } diff --git a/plugin/src/test/resources/io/jenkins/plugins/coverage/metrics/steps/coverage-publisher-summary.checks-expected-result b/plugin/src/test/resources/io/jenkins/plugins/coverage/metrics/steps/coverage-publisher-summary.checks-expected-result index b35ca8ef9..fde6afb9b 100644 --- a/plugin/src/test/resources/io/jenkins/plugins/coverage/metrics/steps/coverage-publisher-summary.checks-expected-result +++ b/plugin/src/test/resources/io/jenkins/plugins/coverage/metrics/steps/coverage-publisher-summary.checks-expected-result @@ -1,23 +1,16 @@ ## Coverage Report Overview * **[Overall project (difference to reference job)](http://127.0.0.1:8080/job/pipeline-coding-style/job/5/coverage#overview)** - * Line Coverage: 91.02% (294/323) / +50.00% - * Branch Coverage: 93.97% (109/116) / n/a - * Complexity Density: +49.54% + * Line Coverage: 91.02% (294/323) - Delta: +50.00% + * Branch Coverage: 93.97% (109/116) + * Complexity Density: 0.50% * Lines of Code: 323 * **[Modified files (difference to overall project)](http://127.0.0.1:8080/job/pipeline-coding-style/job/5/coverage#modifiedFilesCoverage)** - * Line Coverage: 50.00% (1/2) / +50.00% - * Branch Coverage: n/a / n/a - * Complexity Density: +43.40% - * Lines of Code: 53 + * Line Coverage: 50.00% (1/2) - Delta: +50.00% * **[Modified code lines (difference to modified files)](http://127.0.0.1:8080/job/pipeline-coding-style/job/5/coverage#modifiedLinesCoverage)** - * Line Coverage: 50.00% (1/2) / +50.00% - * Branch Coverage: n/a / n/a - * Lines of Code: 3 + * Line Coverage: 50.00% (1/2) - Delta: +50.00% * **[Indirect changes](http://127.0.0.1:8080/job/pipeline-coding-style/job/5/coverage#indirectCoverage)** - * Line Coverage: 50.00% (1/2) / n/a - * Branch Coverage: n/a / n/a - * Lines of Code: n/a + * Line Coverage: 50.00% (1/2) ## Quality Gates Summary - INACTIVE diff --git a/ui-tests/pom.xml b/ui-tests/pom.xml index 0250c5f0f..4a63707ee 100644 --- a/ui-tests/pom.xml +++ b/ui-tests/pom.xml @@ -16,10 +16,14 @@ UI Tests of Code Coverage Plugin - 2.396 + 2.395 + 3.39 2.3 2.36.1 ${project.groupId}.code.coverage.api.ui.tests + + + -Djava.awt.headless=true -Xmx1024m -Djenkins.test.timeout=1000 --add-opens java.base/sun.reflect.annotation=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED @@ -36,7 +40,7 @@ org.jenkins-ci acceptance-test-harness - 1.118 + 5504.v485694f31cdf org.apache.httpcomponents @@ -134,6 +138,13 @@ + + + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ + + + @@ -143,6 +154,13 @@ true + + org.revapi + revapi-maven-plugin + + true + + org.assertj assertj-assertions-generator-maven-plugin @@ -226,11 +244,9 @@ - org.revapi - revapi-maven-plugin - - true - + org.jenkins-ci.tools + maven-hpi-plugin + ${hpi-plugin.version}