mirror of
https://github.com/apple/pkl.git
synced 2026-04-19 23:11:29 +02:00
Don't show 100% when number of failures is rounded up (#1110)
Co-Authored-By: Mike Drob <mdrob@apple.com>
This commit is contained in:
@@ -17,6 +17,8 @@ package org.pkl.core.stdlib.test.report;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -140,16 +142,18 @@ public final class SimpleReport implements TestReport {
|
|||||||
private void makeStatsLine(
|
private void makeStatsLine(
|
||||||
AnsiStringBuilder sb, String kind, int total, int failed, boolean isFailed) {
|
AnsiStringBuilder sb, String kind, int total, int failed, boolean isFailed) {
|
||||||
var passed = total - failed;
|
var passed = total - failed;
|
||||||
var passRate = total > 0 ? 100.0 * passed / total : 0.0;
|
var passRate = "0.0";
|
||||||
|
if (total > 0) {
|
||||||
|
var passedDecimal = new BigDecimal(passed);
|
||||||
|
var hundred = new BigDecimal(100);
|
||||||
|
var totalPrecise = new BigDecimal(total);
|
||||||
|
passRate =
|
||||||
|
hundred.multiply(passedDecimal).divide(totalPrecise, 1, RoundingMode.DOWN).toString();
|
||||||
|
}
|
||||||
|
var passRateLine = String.format(Locale.ROOT, "%s%% %s pass", passRate, kind);
|
||||||
|
|
||||||
var color = isFailed ? AnsiCode.RED : AnsiCode.GREEN;
|
var color = isFailed ? AnsiCode.RED : AnsiCode.GREEN;
|
||||||
sb.append(
|
sb.append(color, () -> sb.append(passRateLine));
|
||||||
color,
|
|
||||||
() ->
|
|
||||||
sb.append(String.format(Locale.ROOT, "%.1f%%", passRate))
|
|
||||||
.append(" ")
|
|
||||||
.append(kind)
|
|
||||||
.append(" pass"));
|
|
||||||
|
|
||||||
if (isFailed) {
|
if (isFailed) {
|
||||||
sb.append(" [").append(failed).append('/').append(total).append(" failed]");
|
sb.append(" [").append(failed).append('/').append(total).append(" failed]");
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.pkl.core.stdlib
|
||||||
|
|
||||||
|
import java.io.StringWriter
|
||||||
|
import java.util.*
|
||||||
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.pkl.core.TestResults
|
||||||
|
import org.pkl.core.TestResults.TestResult
|
||||||
|
import org.pkl.core.TestResults.TestSectionResults
|
||||||
|
import org.pkl.core.stdlib.test.report.SimpleReport
|
||||||
|
|
||||||
|
class SimpleReportTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `summarize method should generate correct output`() {
|
||||||
|
var resultsBuilder = TestResults.Builder("module1", "module1")
|
||||||
|
resultsBuilder.setFactsSection(
|
||||||
|
TestSectionResults(
|
||||||
|
TestResults.TestSectionName.FACTS,
|
||||||
|
listOf(
|
||||||
|
TestResult(
|
||||||
|
"example1",
|
||||||
|
321919,
|
||||||
|
listOf(TestResults.Failure("Fact Failure", "failed")),
|
||||||
|
emptyList(),
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
resultsBuilder.setExamplesSection(
|
||||||
|
TestSectionResults(
|
||||||
|
TestResults.TestSectionName.EXAMPLES,
|
||||||
|
listOf(
|
||||||
|
TestResult(
|
||||||
|
"example1",
|
||||||
|
432525,
|
||||||
|
listOf(TestResults.Failure("Output Mismatch", "does not match")),
|
||||||
|
emptyList(),
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
val testResults = listOf(resultsBuilder.build())
|
||||||
|
|
||||||
|
val writer = StringWriter()
|
||||||
|
val simpleReport = SimpleReport(false)
|
||||||
|
simpleReport.summarize(testResults, writer)
|
||||||
|
|
||||||
|
val expectedOutput =
|
||||||
|
"""
|
||||||
|
0.0% tests pass [2/2 failed], 99.9% asserts pass [2/754444 failed]
|
||||||
|
"""
|
||||||
|
.trimIndent()
|
||||||
|
|
||||||
|
assertThat(writer.toString().trimIndent()).isEqualTo(expectedOutput)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -90,7 +90,7 @@ class TestsTest : AbstractTest() {
|
|||||||
^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^
|
||||||
at test#facts["error"][#1] (file:///file, line x)
|
at test#facts["error"][#1] (file:///file, line x)
|
||||||
|
|
||||||
50.0% tests pass [1/2 failed], 66.7% asserts pass [1/3 failed]
|
50.0% tests pass [1/2 failed], 66.6% asserts pass [1/3 failed]
|
||||||
"""
|
"""
|
||||||
.trimIndent()
|
.trimIndent()
|
||||||
)
|
)
|
||||||
@@ -139,7 +139,7 @@ class TestsTest : AbstractTest() {
|
|||||||
age = 35
|
age = 35
|
||||||
}
|
}
|
||||||
|
|
||||||
60.0% tests pass [2/5 failed], 66.7% asserts pass [3/9 failed]
|
60.0% tests pass [2/5 failed], 66.6% asserts pass [3/9 failed]
|
||||||
"""
|
"""
|
||||||
.trimIndent()
|
.trimIndent()
|
||||||
)
|
)
|
||||||
@@ -212,7 +212,7 @@ class TestsTest : AbstractTest() {
|
|||||||
age = 35
|
age = 35
|
||||||
}
|
}
|
||||||
|
|
||||||
50.0% tests pass [2/4 failed], 66.7% asserts pass [2/6 failed]
|
50.0% tests pass [2/4 failed], 66.6% asserts pass [2/6 failed]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
.trimIndent()
|
.trimIndent()
|
||||||
|
|||||||
Reference in New Issue
Block a user