diff --git a/plugin/pom.xml b/plugin/pom.xml index 966b1175d..77a4cb3ca 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -19,7 +19,7 @@ https://github.com/jenkinsci/code-coverage-api-plugin - 4.3.0 + 4.2.2 -SNAPSHOT jenkinsci/code-coverage-api-plugin 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 506a25aea..f6bd4477d 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 @@ -15,6 +15,7 @@ import edu.hm.hafner.coverage.IntegerValue; import edu.hm.hafner.coverage.Metric; import edu.hm.hafner.coverage.Percentage; +import edu.hm.hafner.coverage.SafeFraction; import edu.hm.hafner.coverage.Value; import hudson.Functions; @@ -348,7 +349,7 @@ public String formatDelta(final Fraction fraction, final Metric metric, final Lo || metric.equals(Metric.LOC)) { return String.format(locale, "%+d", fraction.intValue()); } - return String.format(locale, "%+.2f%%", fraction.multiplyBy(HUNDRED).doubleValue()); + return String.format(locale, "%+.2f%%", new SafeFraction(fraction).multiplyBy(HUNDRED).doubleValue()); } /** diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatterTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatterTest.java new file mode 100644 index 000000000..d46e68401 --- /dev/null +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatterTest.java @@ -0,0 +1,22 @@ +package io.jenkins.plugins.coverage.metrics.model; + +import java.util.Locale; + +import org.apache.commons.lang3.math.Fraction; +import org.junit.jupiter.api.Test; + +import edu.hm.hafner.coverage.Metric; + +import static org.assertj.core.api.Assertions.*; + +class ElementFormatterTest { + @Test + void shouldHandleOverflowGracefully() { + var formatter = new ElementFormatter(); + + var fraction = Fraction.getFraction(Integer.MAX_VALUE - 1, Integer.MAX_VALUE - 1); + var delta = formatter.formatDelta(fraction, Metric.LINE, Locale.ENGLISH); + + assertThat(delta).isEqualTo("+100.00%"); + } +}