Skip to content

Commit fcf4be9

Browse files
committed
Add testMethodName as another AsciiDoc tag around the scenario
Also optimize some tag prefixes to improve the understanding. Signed-off-by: Johannes Thorn <[email protected]>
1 parent d5b8bef commit fcf4be9

File tree

10 files changed

+166
-130
lines changed

10 files changed

+166
-130
lines changed

jgiven-asciidoc-report/src/main/java/com/tngtech/jgiven/report/asciidoc/AsciiDocBlockConverter.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public String convertStatisticsBlock(
5050

5151
featureStatistics.entries().stream()
5252
.sorted(Map.Entry.comparingByKey())
53+
.filter(entry -> entry.getValue() != null)
5354
.forEach(entry -> appendStatisticsRowFragment(statisticsTable, entry.getKey(), entry.getValue()));
5455

5556
appendStatisticsRowFragment(statisticsTable, "sum", totalStatistics);
@@ -91,13 +92,15 @@ public String convertFeatureHeaderBlock(
9192

9293
@Override
9394
public String convertScenarioHeaderBlock(
95+
final String identifier,
9496
final String name,
9597
final ExecutionStatus executionStatus,
9698
final long duration,
9799
final List<Tag> tags,
98100
final String extendedDescription) {
99101
StringBuilder blockContent = new StringBuilder();
100102

103+
blockContent.append(MetadataMapper.toAsciiDocStartTag(identifier)).append(LINE_BREAK);
101104
blockContent.append(MetadataMapper.toAsciiDocStartTag(executionStatus)).append(LINE_BREAK);
102105

103106
tags.forEach(tag -> blockContent.append(TagMapper.toAsciiDocStartTag(tag)).append(LINE_BREAK));
@@ -258,12 +261,13 @@ public String convertCaseFooterBlock(final String errorMessage, final List<Strin
258261
}
259262

260263
@Override
261-
public String convertScenarioFooterBlock(final ExecutionStatus executionStatus, final List<Tag> tags) {
264+
public String convertScenarioFooterBlock(final String identifier, final ExecutionStatus executionStatus, final List<Tag> tags) {
262265
StringBuilder blockContent = new StringBuilder();
263266

264267
Lists.reverse(tags).forEach(tag -> blockContent.append(TagMapper.toAsciiDocEndTag(tag)).append(LINE_BREAK));
265268

266-
blockContent.append(MetadataMapper.toAsciiDocEndTag(executionStatus));
269+
blockContent.append(MetadataMapper.toAsciiDocEndTag(executionStatus)).append(LINE_BREAK);
270+
blockContent.append(MetadataMapper.toAsciiDocEndTag(identifier));
267271

268272
return blockContent.toString();
269273
}

jgiven-asciidoc-report/src/main/java/com/tngtech/jgiven/report/asciidoc/AsciiDocReportGenerator.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.tngtech.jgiven.impl.util.PrintWriterUtil;
88
import com.tngtech.jgiven.report.AbstractReportConfig;
99
import com.tngtech.jgiven.report.AbstractReportGenerator;
10+
import com.tngtech.jgiven.report.model.ExecutionStatus;
1011
import com.tngtech.jgiven.report.model.ReportModel;
1112
import com.tngtech.jgiven.report.model.ReportModelFile;
1213
import com.tngtech.jgiven.report.model.ReportStatistics;
@@ -41,7 +42,6 @@ public class AsciiDocReportGenerator extends AbstractReportGenerator {
4142

4243
private static final String FEATURE_PATH = "features";
4344
private static final String ASCIIDOC_FILETYPE = ".asciidoc";
44-
private static final String SCENARIO_TAG = "scenario-";
4545
private static final String TAGGED_SCENARIO_QUALIFIER = "tagged";
4646
private static final Logger log = LoggerFactory.getLogger(AsciiDocReportGenerator.class);
4747

@@ -143,7 +143,8 @@ private void writeIndexFileForFailedScenarios() {
143143

144144
final var asciiDocBlocks = snippetGenerator.generateIntroSnippet("");
145145
asciiDocBlocks.addAll(snippetGenerator.generateIndexSnippet(
146-
FEATURE_PATH, this.failedScenarioFeatures, SCENARIO_TAG + "failed", -1));
146+
FEATURE_PATH, this.failedScenarioFeatures,
147+
MetadataMapper.toAsciiDocTagName(ExecutionStatus.FAILED), -1));
147148

148149
writeAsciiDocBlocksToFile(targetDir, "failedScenarios", asciiDocBlocks);
149150
}
@@ -156,7 +157,8 @@ private void writeIndexFileForPendingScenarios() {
156157

157158
final var asciiDocBlocks = snippetGenerator.generateIntroSnippet("");
158159
asciiDocBlocks.addAll(snippetGenerator.generateIndexSnippet(
159-
FEATURE_PATH, this.pendingScenarioFeatures, SCENARIO_TAG + "pending", -1));
160+
FEATURE_PATH, this.pendingScenarioFeatures,
161+
MetadataMapper.toAsciiDocTagName(ExecutionStatus.SCENARIO_PENDING), -1));
160162

161163
writeAsciiDocBlocksToFile(targetDir, "pendingScenarios", asciiDocBlocks);
162164
}
@@ -169,7 +171,8 @@ private void writeIndexFileForAbortedScenarios() {
169171

170172
final var asciiDocBlocks = snippetGenerator.generateIntroSnippet("");
171173
asciiDocBlocks.addAll(snippetGenerator.generateIndexSnippet(
172-
FEATURE_PATH, this.abortedScenarioFeatures, SCENARIO_TAG + "aborted", -1));
174+
FEATURE_PATH, this.abortedScenarioFeatures,
175+
MetadataMapper.toAsciiDocTagName(ExecutionStatus.ABORTED), -1));
173176

174177
writeAsciiDocBlocksToFile(targetDir, "abortedScenarios", asciiDocBlocks);
175178
}

jgiven-asciidoc-report/src/main/java/com/tngtech/jgiven/report/asciidoc/AsciiDocReportModelVisitor.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ public void visit(final ScenarioModel scenarioModel) {
6565
.map(this.featureTagMap::get)
6666
.collect(Collectors.toList());
6767

68-
String scenarioHeader = blockConverter.convertScenarioHeaderBlock(scenarioModel.getDescription(),
69-
scenarioModel.getExecutionStatus(), scenarioModel.getDurationInNanos(), tagList,
70-
scenarioModel.getExtendedDescription());
68+
String scenarioHeader = blockConverter.convertScenarioHeaderBlock(scenarioModel.getTestMethodName(),
69+
scenarioModel.getDescription(), scenarioModel.getExecutionStatus(), scenarioModel.getDurationInNanos(),
70+
tagList, scenarioModel.getExtendedDescription());
7171
asciiDocBlocks.add(scenarioHeader);
7272

7373
scenarioHasDataTable = scenarioModel.isCasesAsTable();
@@ -137,7 +137,8 @@ public void visitEnd(final ScenarioModel scenarioModel) {
137137
asciiDocBlocks.add(casesTableBlock);
138138
}
139139

140-
String scenarioFooter = blockConverter.convertScenarioFooterBlock(scenarioModel.getExecutionStatus(), tagList);
140+
String scenarioFooter = blockConverter.convertScenarioFooterBlock(
141+
scenarioModel.getTestMethodName(), scenarioModel.getExecutionStatus(), tagList);
141142
asciiDocBlocks.add(scenarioFooter);
142143
}
143144

jgiven-asciidoc-report/src/main/java/com/tngtech/jgiven/report/asciidoc/MetadataMapper.java

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ private MetadataMapper() {
1616
// static helper class isn't intended to be instantiated
1717
}
1818

19+
public static String toAsciiDocStartTag(final String scenarioName) {
20+
return "// tag::" + toAsciiDocTagName(scenarioName) + "[]";
21+
}
22+
23+
static String toAsciiDocEndTag(final String scenarioName) {
24+
return "// end::" + toAsciiDocTagName(scenarioName) + "[]";
25+
}
26+
27+
static String toAsciiDocTagName(final String scenarioName) {
28+
return "scenario-" + scenarioName;
29+
}
30+
1931
static String toAsciiDocStartTag(ExecutionStatus executionStatus) {
2032
return "// tag::" + toAsciiDocTagName(executionStatus) + "[]";
2133
}
@@ -24,49 +36,32 @@ static String toAsciiDocEndTag(ExecutionStatus executionStatus) {
2436
return "// end::" + toAsciiDocTagName(executionStatus) + "[]";
2537
}
2638

27-
private static String toAsciiDocTagName(final ExecutionStatus executionStatus) {
28-
switch (executionStatus) {
29-
case SCENARIO_PENDING:
30-
case SOME_STEPS_PENDING:
31-
return "scenario-pending";
32-
case SUCCESS:
33-
return "scenario-successful";
34-
case FAILED:
35-
return "scenario-failed";
36-
default:
37-
return "scenario-" + executionStatus.toString().toLowerCase();
38-
}
39+
static String toAsciiDocTagName(final ExecutionStatus executionStatus) {
40+
return switch (executionStatus) {
41+
case SUCCESS -> "status-is-successful";
42+
case SCENARIO_PENDING, SOME_STEPS_PENDING -> "status-is-pending";
43+
case ABORTED -> "status-is-aborted";
44+
case FAILED -> "status-is-failed";
45+
};
3946
}
4047

4148
static String toHumanReadableStatus(final ExecutionStatus executionStatus) {
42-
switch (executionStatus) {
43-
case SCENARIO_PENDING:
44-
case SOME_STEPS_PENDING:
45-
return ICON_BANNED;
46-
case SUCCESS:
47-
return ICON_CHECK_MARK;
48-
case FAILED:
49-
return ICON_EXCLAMATION_MARK;
50-
case ABORTED:
51-
return ICON_TIMES_CIRCLE;
52-
default:
53-
return executionStatus.toString();
54-
}
49+
return switch (executionStatus) {
50+
case SUCCESS -> ICON_CHECK_MARK;
51+
case SCENARIO_PENDING, SOME_STEPS_PENDING -> ICON_BANNED;
52+
case ABORTED -> ICON_TIMES_CIRCLE;
53+
case FAILED -> ICON_EXCLAMATION_MARK;
54+
};
5555
}
5656

5757
static String toHumanReadableStatus(final StepStatus stepStatus) {
58-
switch (stepStatus) {
59-
case PASSED:
60-
return ICON_CHECK_MARK;
61-
case FAILED:
62-
return ICON_EXCLAMATION_MARK;
63-
case SKIPPED:
64-
return ICON_STEP_FORWARD;
65-
case PENDING:
66-
return ICON_BANNED;
67-
default:
68-
return stepStatus.toString();
69-
}
58+
return switch (stepStatus) {
59+
case PASSED -> ICON_CHECK_MARK;
60+
case SKIPPED -> ICON_STEP_FORWARD;
61+
case PENDING -> ICON_BANNED;
62+
case ABORTED -> ICON_TIMES_CIRCLE;
63+
case FAILED -> ICON_EXCLAMATION_MARK;
64+
};
7065
}
7166

7267
static String toHumanReadableScenarioDuration(final long durationInNanos) {
@@ -86,11 +81,11 @@ static String toHumanReadableStepDuration(final long durationInNanos) {
8681
}
8782

8883
private static String toHumanReadableDuration(final long nanos) {
89-
final Duration duration = Duration.ofNanos(nanos);
90-
final String millisFragment = duration.getNano() / NANOSECONDS_PER_MILLISECOND + "ms";
84+
final var duration = Duration.ofNanos(nanos);
85+
final var millisFragment = duration.getNano() / NANOSECONDS_PER_MILLISECOND + "ms";
9186

92-
final long seconds = duration.getSeconds();
93-
final String secondsFragment = seconds > 0 ? seconds + "s " : "";
87+
final var seconds = duration.getSeconds();
88+
final var secondsFragment = seconds > 0 ? seconds + "s " : "";
9489

9590
return secondsFragment + millisFragment;
9691
}

jgiven-asciidoc-report/src/main/java/com/tngtech/jgiven/report/asciidoc/TagMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ static String toAsciiDocEndTag(final Tag tag) {
2222
}
2323

2424
static String toAsciiDocTagName(final Tag tag) {
25-
return tag.toIdString().replace(' ', '_');
25+
return "tag-" + tag.toIdString().replace(' ', '_');
2626
}
2727
}

jgiven-asciidoc-report/src/test/java/com/tngtech/jgiven/report/asciidoc/AsciiDocReportModelVisitorTest.java

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,9 @@ public void visits_a_scenario_with_two_sections() {
177177
mkStep("When", "action"),
178178
mkStep("Then", "outcome"),
179179
mkSectionTitle("Second Section"),
180-
mkStep("Given", "other state"),
180+
mkStep("Given", "another state"),
181181
mkStep("When", "other action"),
182-
mkStep("Then", "other outcome"))));
182+
mkStep("Then", "another outcome"))));
183183

184184
// when
185185
report.accept(reportModelVisitor);
@@ -243,39 +243,60 @@ private static StepModel mkStep(final String introWord, final String object) {
243243
private static class MyFakeReportBlockConverter implements ReportBlockConverter {
244244

245245
@Override
246-
public String convertStatisticsBlock(final ListMultimap<String, ReportStatistics> featureStatistics,
246+
public String convertStatisticsBlock(
247+
final ListMultimap<String, ReportStatistics> featureStatistics,
247248
final ReportStatistics totalStatistics) {
248249
return "StatisticsBlock";
249250
}
250251

251252
@Override
252-
public String convertFeatureHeaderBlock(String featureName, ReportStatistics statistics,
253+
public String convertFeatureHeaderBlock(
254+
String featureName,
255+
ReportStatistics statistics,
253256
String description) {
254257
return "FeatureHeaderBlock";
255258
}
256259

257260
@Override
258-
public String convertScenarioHeaderBlock(String name, ExecutionStatus executionStatus, long duration,
259-
List<Tag> tags, String extendedDescription) {
261+
public String convertScenarioHeaderBlock(
262+
final String identifier,
263+
String name,
264+
ExecutionStatus executionStatus,
265+
long duration,
266+
List<Tag> tags,
267+
String extendedDescription) {
260268
return "ScenarioHeaderBlock";
261269
}
262270

263271
@Override
264-
public String convertCaseHeaderBlock(final int caseNr, final ExecutionStatus executionStatus,
265-
final long duration, final String description) {
272+
public String convertCaseHeaderBlock(
273+
final int caseNr,
274+
final ExecutionStatus executionStatus,
275+
final long duration,
276+
final String description) {
266277
return "CaseHeaderBlock";
267278
}
268279

269280
@Override
270-
public String convertFirstStepBlock(final int depth, final List<Word> words, final StepStatus status,
271-
final long durationInNanos, final String extendedDescription,
272-
final boolean caseIsUnsuccessful, final String currentSectionTitle) {
281+
public String convertFirstStepBlock(
282+
final int depth,
283+
final List<Word> words,
284+
final StepStatus status,
285+
final long durationInNanos,
286+
final String extendedDescription,
287+
final boolean caseIsUnsuccessful,
288+
final String currentSectionTitle) {
273289
return "FirstStepBlock";
274290
}
275291

276292
@Override
277-
public String convertStepBlock(int depth, List<Word> words, StepStatus status, long durationInNanos,
278-
String extendedDescription, boolean caseIsUnsuccessful) {
293+
public String convertStepBlock(
294+
int depth,
295+
List<Word> words,
296+
StepStatus status,
297+
long durationInNanos,
298+
String extendedDescription,
299+
boolean caseIsUnsuccessful) {
279300
return "StepBlock";
280301
}
281302

@@ -290,7 +311,7 @@ public String convertCaseFooterBlock(final String errorMessage, final List<Strin
290311
}
291312

292313
@Override
293-
public String convertScenarioFooterBlock(ExecutionStatus executionStatus, final List<Tag> tags) {
314+
public String convertScenarioFooterBlock(final String identifier, ExecutionStatus executionStatus, final List<Tag> tags) {
294315
return "ScenarioFooterBlock";
295316
}
296317
}

0 commit comments

Comments
 (0)