diff --git a/README.md b/README.md index 047f79d6d..65f2bbd35 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ It has support for the following report formats: - [JaCoCo](https://www.jacoco.org/) code coverage results - [OpenCover](https://github.com/OpenCover/opencover) code coverage results - [VectorCAST](https://www.vector.com/int/en/products/products-a-z/software/vectorcast) code coverage results including MC/DC, Function, Function Call coverages +- [TRACE32](https://www.lauterbach.com) code coverage results - [PIT](https://pitest.org/) mutation coverage results - [JUnit](https://junit.org/junit5/) test results - [NUnit](https://nunit.org) test results @@ -114,6 +115,7 @@ The Coverage Plug-in supports the following report formats: - [Cobertura](https://cobertura.github.io/cobertura/): Code Coverage - [OpenCover](https://github.com/OpenCover/opencover): Code Coverage - [VectorCAST](https://www.vector.com/int/en/products/products-a-z/software/vectorcast) Code Coverage including MC/DC, Function, Function Call coverages +- [TRACE32](https://www.lauterbach.com) Code Coverage - [PIT](https://pitest.org/): Mutation Coverage - [JUnit](https://ant.apache.org/manual/Tasks/junitreport.html): Test Results - [NUnit](https://nunit.org/): Test Results diff --git a/plugin/pom.xml b/plugin/pom.xml index 8c4855162..2e236a86d 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -13,7 +13,7 @@ Coverage Plugin Collects reports of code coverage or mutation coverage tools and visualizes the results. It has support - for the following report formats: JaCoCo, Cobertura, and PIT. + for the following report formats: JaCoCo, Cobertura, PIT and TRACE32. https://github.com/jenkinsci/coverage-plugin @@ -35,7 +35,7 @@ false - 0.65.0 + 0.66.0-rc1267.b_509b_0079b_61 2.11.0 diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/charts/CoverageTrendChart.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/charts/CoverageTrendChart.java index 795d63a70..4fc9b4831 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/charts/CoverageTrendChart.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/charts/CoverageTrendChart.java @@ -63,6 +63,15 @@ public LinesChartModel create(final Iterable> re addSeriesIfAvailable(dataSet, model, Metric.MCDC_PAIR, JenkinsPalette.RED.light()); addSeriesIfAvailable(dataSet, model, Metric.FUNCTION_CALL, JenkinsPalette.RED.dark()); + /* TRACE32 metrics */ + addSeriesIfAvailable(dataSet, model, Metric.STATEMENT, JenkinsPalette.RED.light()); + addSeriesIfAvailable(dataSet, model, Metric.STMT_DC, JenkinsPalette.RED.light()); + addSeriesIfAvailable(dataSet, model, Metric.STMT_CC, JenkinsPalette.RED.light()); + addSeriesIfAvailable(dataSet, model, Metric.FUNCTION, JenkinsPalette.RED.light()); + addSeriesIfAvailable(dataSet, model, Metric.OBJECT_CODE, JenkinsPalette.RED.light()); + addSeriesIfAvailable(dataSet, model, Metric.DECISION, JenkinsPalette.RED.normal()); + addSeriesIfAvailable(dataSet, model, Metric.CONDITION, JenkinsPalette.RED.normal()); + model.useContinuousRangeAxis(); model.computeVisibleRange(); model.setRangeMax(100); // Restrict the range to 100% 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 6692cd4ec..38b1b1641 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 @@ -649,7 +649,12 @@ NavigableSet getMetricsForSummary() { // software metrics Metric.LOC, Metric.NCSS, Metric.TESTS, Metric.CYCLOMATIC_COMPLEXITY, Metric.COGNITIVE_COMPLEXITY, Metric.NPATH_COMPLEXITY, - Metric.MCDC_PAIR, Metric.FUNCTION_CALL)); + Metric.MCDC_PAIR, Metric.FUNCTION_CALL, + // TRACE32 metrics + Metric.STATEMENT, Metric.STMT_CC, Metric.STMT_DC, + Metric.CONDITION, Metric.DECISION, Metric.FUNCTION, + Metric.OBJECT_CODE, Metric.BYTES + )); } /** 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 b1172e13c..062e5cad2 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 @@ -542,7 +542,9 @@ NavigableSet getOverviewMetrics() { return new TreeSet<>( Set.of(Metric.LINE, Metric.LOC, Metric.BRANCH, Metric.CYCLOMATIC_COMPLEXITY, Metric.MUTATION, Metric.TEST_STRENGTH, Metric.TESTS, - Metric.MCDC_PAIR, Metric.FUNCTION_CALL)); + Metric.MCDC_PAIR, Metric.FUNCTION_CALL, Metric.STATEMENT, + Metric.STMT_DC, Metric.STMT_CC, Metric.CONDITION, Metric.DECISION, + Metric.FUNCTION, Metric.OBJECT_CODE, Metric.BYTES)); } } diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTableModel.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTableModel.java index b5de91577..e9245d0a0 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTableModel.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTableModel.java @@ -129,6 +129,16 @@ public List getColumns() { configureValueColumn("testStrength", Metric.TEST_STRENGTH, Messages.Column_TestStrength(), Messages.Column_DeltaTestStrength("Δ"), columns); + /* TRACE32 metrics */ + configureValueColumn("statementCoverage", Metric.STATEMENT, Metric.STATEMENT.getDisplayName(), SKIP_DELTA, columns); + configureValueColumn("stmtDcCoverage", Metric.STMT_DC, Metric.STMT_DC.getDisplayName(), SKIP_DELTA, columns); + configureValueColumn("stmtCcCoverage", Metric.STMT_CC, Metric.STMT_CC.getDisplayName(), SKIP_DELTA, columns); + configureValueColumn("conditionCoverage", Metric.CONDITION, Metric.CONDITION.getDisplayName(), SKIP_DELTA, columns); + configureValueColumn("decisionCoverage", Metric.DECISION, Metric.DECISION.getDisplayName(), SKIP_DELTA, columns); + configureValueColumn("functionCoverage", Metric.FUNCTION, Metric.FUNCTION.getDisplayName(), SKIP_DELTA, columns); + configureValueColumn("objectCodeCoverage", Metric.OBJECT_CODE, Metric.OBJECT_CODE.getDisplayName(), SKIP_DELTA, columns); + configureValueColumn("bytesCoverage", Metric.BYTES, Metric.BYTES.getDisplayName(), SKIP_DELTA, columns); + var entries = new EnumMap<>(Map.of( Metric.LOC, 200, Metric.TESTS, 500, @@ -267,6 +277,38 @@ public DetailedCell getTestStrength() { return createColoredCoverageColumn(getCoverageOfNode(Metric.TEST_STRENGTH)); } + public DetailedCell getStatementCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.STATEMENT)); + } + + public DetailedCell getStmtDcCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.STMT_DC)); + } + + public DetailedCell getStmtCcCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.STMT_CC)); + } + + public DetailedCell getConditionCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.CONDITION)); + } + + public DetailedCell getDecisionCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.DECISION)); + } + + public DetailedCell getFunctionCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.FUNCTION)); + } + + public DetailedCell getObjectCodeCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.OBJECT_CODE)); + } + + public DetailedCell getBytesCoverage() { + return createColoredCoverageColumn(getCoverageOfNode(Metric.BYTES)); + } + Coverage getCoverageOfNode(final Metric metric) { return file.getTypedValue(metric, Coverage.nullObject(metric)); } diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTool.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTool.java index 72385d598..47d01dc88 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTool.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/steps/CoverageTool.java @@ -250,7 +250,10 @@ public enum Parser { "symbol-footsteps-outline plugin-ionicons-api"), XUNIT(Messages._Parser_Xunit(), ParserType.TEST, "**/xunit.xml,**/TestResult.xml", - "symbol-solid/list-check plugin-font-awesome-api"); + "symbol-solid/list-check plugin-font-awesome-api"), + TRACE32(Messages._Parser_TRACE32(), ParserType.COVERAGE, + "**/index.xml", + "symbol-footsteps-outline plugin-ionicons-api"); private final Localizable displayName; private final ParserType parserType; 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 04025e620..ba4302cb1 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 @@ -81,7 +81,8 @@ public class CoverageViewModel extends DefaultAsyncTableContentProvider implemen private static final ElementFormatter FORMATTER = new ElementFormatter(); private static final Set TREE_METRICS = Set.of( Metric.LINE, Metric.BRANCH, Metric.MUTATION, Metric.TEST_STRENGTH, Metric.CYCLOMATIC_COMPLEXITY, Metric.TESTS, - Metric.MCDC_PAIR, Metric.FUNCTION_CALL, Metric.COGNITIVE_COMPLEXITY, Metric.NCSS, Metric.NPATH_COMPLEXITY); + Metric.MCDC_PAIR, Metric.FUNCTION_CALL, Metric.COGNITIVE_COMPLEXITY, Metric.NCSS, Metric.NPATH_COMPLEXITY, + Metric.STATEMENT, Metric.STMT_DC, Metric.STMT_CC, Metric.CONDITION, Metric.DECISION, Metric.FUNCTION, Metric.OBJECT_CODE, Metric.BYTES); private final Run owner; private final String displayName; private final CoverageStatistics statistics; diff --git a/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/model/Messages.properties b/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/model/Messages.properties index b718e51e0..c67904542 100644 --- a/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/model/Messages.properties +++ b/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/model/Messages.properties @@ -19,6 +19,14 @@ Metric.FUNCTION_CALL=Function Call Coverage Metric.NCSS=NCSS Metric.COGNITIVE_COMPLEXITY=Cognitive Complexity Metric.NPATH=NPath Complexity +Metric.STATEMENT=Statement Coverage +Metric.STMT_DC=Statement + Decision Coverage +Metric.STMT_CC=Statement + Condition Coverage +Metric.CONDITION=Condition Coverage +Metric.DECISION=Decision Coverage +Metric.FUNCTION=Function Coverage +Metric.OBJECT_CODE=Object Code Coverage +Metric.BYTES=Bytes Coverage Metric.Short.CONTAINER=Container Metric.Short.MODULE=Module @@ -41,6 +49,14 @@ Metric.Short.FUNCTION_CALL=Function Call Metric.Short.NCSS=NCSS Metric.Short.COGNITIVE_COMPLEXITY=Cognitive Complexity Metric.Short.NPATH=NPath Complexity +Metric.Short.STATEMENT=Statement +Metric.Short.STMT_DC=Statement + DC +Metric.Short.STMT_CC=Statement + CC +Metric.Short.CONDITION=Condition +Metric.Short.DECISION=Decision +Metric.Short.FUNCTION=Function +Metric.Short.OBJECT_CODE=Object Code +Metric.Short.BYTES=Bytes Metric.MUTATION.Killed=Killed Metric.MUTATION.Survived=Survived diff --git a/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/Messages.properties b/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/Messages.properties index 9c8f6773a..f8381f777 100644 --- a/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/Messages.properties +++ b/plugin/src/main/resources/io/jenkins/plugins/coverage/metrics/steps/Messages.properties @@ -12,6 +12,7 @@ Parser.OpenCover=OpenCover Coverage Reports Parser.PIT=PIT Mutation Testing Reports Parser.VectorCAST=VectorCAST Coverage Results Parser.Xunit=XUnit Test Results +Parser.TRACE32=TRACE32 Coverage Reports Coverage.Not.Available=N/A Coverage.Link.Name=Coverage Report