Skip to content

Commit 3963462

Browse files
authored
Add color configuration of trend chart (show passed tests in green or blue ) (#286)
1 parent a244e69 commit 3963462

File tree

3 files changed

+70
-21
lines changed

3 files changed

+70
-21
lines changed

src/main/java/hudson/tasks/test/TestResultProjectAction.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import hudson.model.Job;
4444
import hudson.model.Run;
4545
import hudson.tasks.junit.JUnitResultArchiver;
46+
import hudson.tasks.test.TestResultTrendChart.PassedColor;
4647

4748
import io.jenkins.plugins.echarts.AsyncConfigurableTrendChart;
4849
import io.jenkins.plugins.echarts.AsyncTrendChart;
@@ -60,6 +61,8 @@
6061
* @author Kohsuke Kawaguchi
6162
*/
6263
public class TestResultProjectAction implements Action, AsyncTrendChart, AsyncConfigurableTrendChart {
64+
private static final JacksonFacade JACKSON_FACADE = new JacksonFacade();
65+
6366
/**
6467
* Project that owns this action.
6568
* @since 1.2-beta-1
@@ -119,23 +122,23 @@ public AbstractTestResultAction getLastTestResultAction() {
119122

120123
@Deprecated
121124
protected LinesChartModel createChartModel() {
122-
return createChartModel(new ChartModelConfiguration());
125+
return createChartModel(new ChartModelConfiguration(), PassedColor.BLUE);
123126
}
124127

125-
private LinesChartModel createChartModel(final ChartModelConfiguration configuration) {
128+
private LinesChartModel createChartModel(ChartModelConfiguration configuration, PassedColor passedColor) {
126129
Run<?, ?> lastCompletedBuild = job.getLastCompletedBuild();
127130

128131
JunitTestResultStorage storage = JunitTestResultStorage.find();
129132
if (!(storage instanceof FileJunitTestResultStorage)) {
130133
TestResultImpl pluggableStorage = storage.load(lastCompletedBuild.getParent().getFullName(), lastCompletedBuild.getNumber());
131-
return new TestResultTrendChart().create(pluggableStorage.getTrendTestResultSummary());
134+
return new TestResultTrendChart().create(pluggableStorage.getTrendTestResultSummary(), passedColor);
132135
}
133136

134137
TestResultActionIterable buildHistory = createBuildHistory(lastCompletedBuild);
135138
if (buildHistory == null) {
136139
return new LinesChartModel();
137140
}
138-
return new TestResultTrendChart().create(buildHistory, configuration);
141+
return new TestResultTrendChart().create(buildHistory, configuration, passedColor);
139142
}
140143

141144
@CheckForNull
@@ -227,7 +230,8 @@ public String getBuildTrendModel() {
227230
@JavaScriptMethod
228231
@Override
229232
public String getConfigurableBuildTrendModel(final String configuration) {
230-
return new JacksonFacade().toJson(createChartModel(ChartModelConfiguration.fromJson(configuration)));
233+
PassedColor useBlue = JACKSON_FACADE.getBoolean(configuration, "useBlue", false) ? PassedColor.BLUE : PassedColor.GREEN;
234+
return new JacksonFacade().toJson(createChartModel(ChartModelConfiguration.fromJson(configuration), useBlue));
231235
}
232236

233237
@Override

src/main/java/hudson/tasks/test/TestResultTrendChart.java

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,46 +14,62 @@
1414
import static hudson.tasks.test.TestResultTrendSeriesBuilder.*;
1515

1616
public class TestResultTrendChart {
17+
enum PassedColor {GREEN, BLUE}
1718

1819
public LinesChartModel create(final List<TrendTestResultSummary> results) {
20+
return create(results, PassedColor.BLUE);
21+
}
22+
23+
public LinesChartModel create(final List<TrendTestResultSummary> results, final PassedColor passedColor) {
1924
LinesDataSet dataset = new LinesDataSet();
2025
results.forEach(result -> dataset.add(result.getDisplayName(), result.toMap(), result.getBuildNumber()));
2126

22-
return getLinesChartModel(dataset);
27+
return getLinesChartModel(dataset, passedColor);
2328
}
2429

25-
public LinesChartModel create(@NonNull final Iterable results,
26-
final ChartModelConfiguration configuration) {
30+
public LinesChartModel create(@NonNull final Iterable results, final ChartModelConfiguration configuration) {
31+
return create(results, configuration, PassedColor.GREEN);
32+
}
33+
34+
public LinesChartModel create(@NonNull final Iterable results, final ChartModelConfiguration configuration,
35+
final PassedColor passedColor) {
2736
TestResultTrendSeriesBuilder builder = new TestResultTrendSeriesBuilder();
2837
LinesDataSet dataSet = builder.createDataSet(configuration, results);
2938

30-
return getLinesChartModel(dataSet);
39+
return getLinesChartModel(dataSet, passedColor);
3140
}
3241

3342
public LinesChartModel createFromTestObject(final Iterable results,
34-
final ChartModelConfiguration configuration) {
43+
final ChartModelConfiguration configuration) {
44+
return createFromTestObject(results, configuration, PassedColor.GREEN);
45+
}
46+
47+
public LinesChartModel createFromTestObject(final Iterable results, final ChartModelConfiguration configuration,
48+
final PassedColor passedColor) {
3549
TestObjectTrendSeriesBuilder builder = new TestObjectTrendSeriesBuilder();
3650
LinesDataSet dataSet = builder.createDataSet(configuration, results);
3751

38-
return getLinesChartModel(dataSet);
52+
return getLinesChartModel(dataSet, passedColor);
3953
}
4054

41-
private LinesChartModel getLinesChartModel(final LinesDataSet dataSet) {
55+
private LinesChartModel getLinesChartModel(final LinesDataSet dataSet, final PassedColor passedColor) {
4256
LinesChartModel model = new LinesChartModel(dataSet);
43-
LineSeries failed = new LineSeries("Failed", Palette.RED.getNormal(),
57+
58+
LineSeries passed = new LineSeries("Passed",
59+
passedColor == PassedColor.BLUE ? Palette.BLUE.getNormal() : Palette.GREEN.getNormal(),
4460
LineSeries.StackedMode.STACKED, LineSeries.FilledMode.FILLED);
45-
failed.addAll(dataSet.getSeries(FAILED_KEY));
46-
model.addSeries(failed);
61+
passed.addAll(dataSet.getSeries(PASSED_KEY));
62+
model.addSeries(passed);
4763

4864
LineSeries skipped = new LineSeries("Skipped", Palette.GRAY.getNormal(),
4965
LineSeries.StackedMode.STACKED, LineSeries.FilledMode.FILLED);
5066
skipped.addAll(dataSet.getSeries(SKIPPED_KEY));
5167
model.addSeries(skipped);
5268

53-
LineSeries passed = new LineSeries("Passed", Palette.BLUE.getNormal(),
69+
LineSeries failed = new LineSeries("Failed", Palette.RED.getNormal(),
5470
LineSeries.StackedMode.STACKED, LineSeries.FilledMode.FILLED);
55-
passed.addAll(dataSet.getSeries(PASSED_KEY));
56-
model.addSeries(passed);
71+
failed.addAll(dataSet.getSeries(FAILED_KEY));
72+
model.addSeries(failed);
5773

5874
return model;
5975
}

src/main/resources/hudson/tasks/test/TestResultProjectAction/floatingBox.jelly

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,36 @@ THE SOFTWARE.
2323
-->
2424

2525
<?jelly escape-by-default='true'?>
26-
<j:jelly xmlns:j="jelly:core"
27-
xmlns:c="/charts">
28-
<c:trend-chart it="${from}" title="${%Test Result Trend}" enableLinks="true" configurationId="default"/>
26+
<j:jelly xmlns:j="jelly:core" xmlns:c="/charts">
27+
<c:trend-setup suffix="junit">
28+
<div class="mb-3">
29+
<input class="form-check-input" type="checkbox" value="" id="junit-use-blue" />
30+
<label class="form-check-label" for="junit-use-blue">
31+
Show passed tests in blue (rather than in green)
32+
</label>
33+
</div>
34+
<div class="mb-3">
35+
<label class="form-label fw-bold">
36+
General configuration
37+
</label>
38+
</div>
39+
</c:trend-setup>
40+
41+
<c:trend-chart it="${from}" title="${%Test Result Trend}" enableLinks="true" configurationId="junit"/>
42+
43+
<script>
44+
function fillJunit(trendConfiguration, jsonConfiguration) {
45+
const useBlue = jsonConfiguration['useBlue'];
46+
trendConfiguration.find('#junit-use-blue').prop('checked', !!useBlue);
47+
}
48+
49+
function saveJunit(trendConfiguration) {
50+
return {
51+
'useBlue': trendConfiguration.find('#junit-use-blue').is(':checked')
52+
};
53+
}
54+
55+
echartsJenkinsApi.configureTrend('junit', fillJunit, saveJunit)
56+
</script>
57+
2958
</j:jelly>

0 commit comments

Comments
 (0)