Skip to content
This repository was archived by the owner on Nov 19, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
599b75b
Improve the layout and design of the coverage columns.
uhafner May 20, 2022
adfcb8a
Right align number cells.
uhafner May 20, 2022
ea30b5e
Print n/a without rendering.
uhafner May 20, 2022
d529feb
Use `--medium-grey` for column border.
uhafner May 20, 2022
cec7f4d
Tweak layout for dark mode.
uhafner May 22, 2022
ac9fddd
Merge remote-tracking branch 'origin/master' into column-design-impro…
uhafner May 23, 2022
599f467
Right align column header as well.
uhafner May 23, 2022
537c942
Decrease vertical padding.
uhafner May 23, 2022
01f4f30
Add `noopener` and `norefferer` to `message.properties`.
uhafner May 23, 2022
fbebc6f
Fall back to default serialization if old format is used for `Coverage`.
uhafner Jun 9, 2022
7ee1cde
Bump analysis-pom from 5.26.0 to 5.28.0
dependabot[bot] Jun 10, 2022
e435dd5
Bump codingstyle-pom from 2.27.0 to 2.28.0
dependabot[bot] Jun 10, 2022
4f87c0b
Replace button navigation with tabs.
uhafner Jun 17, 2022
cfb96ad
Activate source code rendering via table selection.
uhafner Jun 18, 2022
6f0bfbe
Use new enum as column type.
uhafner Jun 18, 2022
9b2091a
Update unit test with new table IDs.
uhafner Jun 18, 2022
b13e804
Bump version of data-tables to 1.12.1-1.
uhafner Jun 18, 2022
68706ad
Extract rendering of file cells into a strategy.
uhafner Jun 19, 2022
ffc59c9
Make fields final.
uhafner Jun 19, 2022
c44b938
Select the first tab only if no other tab is selected.
uhafner Jun 19, 2022
60ca274
Simplify registration of selection events.
uhafner Jun 19, 2022
ed3932f
Fix warnings.
uhafner Jun 19, 2022
61c174b
Improve handling of redraw events for charts.
uhafner Jun 19, 2022
b08d7ca
Merge remote-tracking branch 'origin/dependabot/maven/edu.hm.hafner-c…
uhafner Jun 19, 2022
835f717
Merge remote-tracking branch 'origin/dependabot/maven/org.jvnet.hudso…
uhafner Jun 19, 2022
ab738bc
Cleanup versions of dependencies.
uhafner Jun 19, 2022
97805f9
Add TODOs and FIXMEs.
uhafner Jun 20, 2022
818650e
Ignore RevApi right now as we are creating a new major version anyway.
uhafner Jun 20, 2022
05ea0f2
Ignore RevApi for UI tests.
uhafner Jun 20, 2022
d0e8593
Fix typo.
uhafner Jun 21, 2022
5a3a4fe
Add support for builds without source code.
uhafner Jun 21, 2022
78023f1
Check overall source code folder.
uhafner Jun 21, 2022
a3d41db
Always show the no-source-code table view.
uhafner Jun 21, 2022
b91bab3
Improve layout for not selected source code.
uhafner Jun 21, 2022
bf50754
Cleanup.
uhafner Jun 22, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 0 additions & 89 deletions .github/workflows/ui-tests.yml

This file was deleted.

20 changes: 13 additions & 7 deletions plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>org.jvnet.hudson.plugins</groupId>
<artifactId>analysis-pom</artifactId>
<version>5.26.0</version>
<version>5.28.0</version>
<relativePath />
</parent>

Expand All @@ -26,14 +26,13 @@
<trove4j.version>3.0.3</trove4j.version>
<saxon-he.version>11.3</saxon-he.version>

<plugin-util-api.version>2.16.0</plugin-util-api.version>
<forensics-api.version>1.13.0</forensics-api.version>
<forensics-api.version>1.15.1</forensics-api.version>
<pull-request-monitoring.version>1.7.8</pull-request-monitoring.version>
<json-unit-assertj.version>2.35.0</json-unit-assertj.version>
<streamex.version>0.8.1</streamex.version>
<gson.version>2.9.0</gson.version>
<jsoup.version>1.15.1</jsoup.version>
<prism-api.version>1.26.0-2</prism-api.version>
<prism-api.version>1.28.0-2</prism-api.version>
<docker-fixtures.version>1.11</docker-fixtures.version>
<testcontainers.version>1.17.2</testcontainers.version>
</properties>
Expand Down Expand Up @@ -123,6 +122,7 @@
<dependency>
<groupId>io.jenkins.plugins</groupId>
<artifactId>data-tables-api</artifactId>
<version>1.12.1-1</version>
</dependency>
<dependency>
<groupId>io.jenkins.plugins</groupId>
Expand Down Expand Up @@ -158,9 +158,8 @@
<dependency>
<groupId>io.jenkins.plugins</groupId>
<artifactId>plugin-util-api</artifactId>
<version>${plugin-util-api.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
<type>test-jar</type>
</dependency>
<!-- Test Dependencies -->
<dependency>
Expand Down Expand Up @@ -239,7 +238,7 @@
<dependency>
<groupId>io.jenkins.plugins</groupId>
<artifactId>git-forensics</artifactId>
<version>1.8.0</version>
<version>1.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -293,6 +292,13 @@
<entryPointClassPackage>io.jenkins.plugins.coverage.model</entryPointClassPackage>
</configuration>
</plugin>
<plugin>
<groupId>org.revapi</groupId>
<artifactId>revapi-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
package io.jenkins.plugins.coverage.model;

import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.stream.Collectors;

import org.apache.commons.lang3.math.Fraction;

import hudson.Functions;

import io.jenkins.plugins.datatables.DetailedCell;
import io.jenkins.plugins.datatables.TableConfiguration;
import io.jenkins.plugins.datatables.TableConfiguration.SelectStyle;

/**
* {@link CoverageTableModel} implementation for visualizing the change coverage.
*
* @since 3.0.0
*/
class ChangeCoverageTableModel extends CoverageTableModel {
private final CoverageNode changeRoot;

/**
* Creates a change coverage table model.
*
* @param id
* The ID of the table
* @param root
* The root of the origin coverage tree
* @param changeRoot
* The root of the change coverage tree
* @param renderer
* the renderer to use for the file names
*/
ChangeCoverageTableModel(final String id, final CoverageNode root, final CoverageNode changeRoot,
final RowRenderer renderer) {
super(id, root, renderer);

this.changeRoot = changeRoot;
}

@Override
public TableConfiguration getTableConfiguration() {
return super.getTableConfiguration().select(SelectStyle.SINGLE);
}

@Override
public List<Object> getRows() {
Locale browserLocale = Functions.getCurrentLocale();
return changeRoot.getAllFileCoverageNodes().stream()
.map(file -> new ChangeCoverageRow(
getOriginalNode(file), file, browserLocale, getRenderer()))
.collect(Collectors.toList());
}

private FileCoverageNode getOriginalNode(final FileCoverageNode fileNode) {
Optional<FileCoverageNode> reference = getRoot().getAllFileCoverageNodes().stream()
.filter(node -> node.getPath().equals(fileNode.getPath())
&& node.getName().equals(fileNode.getName()))
.findFirst();
return reference.orElse(fileNode); // return this as fallback to prevent exceptions
}

/**
* UI row model for the change coverage details table.
*
* @since 3.0.0
*/
private static class ChangeCoverageRow extends CoverageRow {
private final FileCoverageNode changedFileNode;

ChangeCoverageRow(final FileCoverageNode root, final FileCoverageNode changedFileNode,
final Locale browserLocale, final RowRenderer renderer) {
super(root, browserLocale, renderer);

this.changedFileNode = changedFileNode;
}

@Override
public DetailedCell<?> getLineCoverage() {
Coverage coverage = changedFileNode.getCoverage(CoverageMetric.LINE);
return createColoredCoverageColumn(coverage, "The line change coverage");
}

@Override
public DetailedCell<?> getBranchCoverage() {
Coverage coverage = changedFileNode.getCoverage(CoverageMetric.BRANCH);
return createColoredCoverageColumn(coverage, "The branch change coverage");
}

@Override
public DetailedCell<?> getLineCoverageDelta() {
return createColoredChangeCoverageDeltaColumn(CoverageMetric.LINE);
}

@Override
public DetailedCell<?> getBranchCoverageDelta() {
return createColoredChangeCoverageDeltaColumn(CoverageMetric.BRANCH);
}

@Override
public int getLoc() {
return (int) changedFileNode.getChangedCodeLines().stream()
.filter(line -> changedFileNode.getCoveragePerLine().containsKey(line))
.count();
}

private DetailedCell<?> createColoredChangeCoverageDeltaColumn(final CoverageMetric coverageMetric) {
Coverage changeCoverage = changedFileNode.getCoverage(coverageMetric);
if (changeCoverage.isSet()) {
Fraction delta = changeCoverage.getCoveredFraction()
.subtract(getRoot().getCoverage(coverageMetric).getCoveredFraction());
return createColoredCoverageDeltaColumn(CoveragePercentage.valueOf(delta),
"The change coverage within the file against the total file coverage");
}
return NO_COVERAGE;
}
}
}
Loading