Skip to content

Commit e912cf6

Browse files
authored
add tests for cucumberjvm 3 (fixes allure-framework#257, via allure-framework#258)
1 parent 1af77a2 commit e912cf6

26 files changed

Lines changed: 600 additions & 449 deletions

allure-cucumber3-jvm/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,15 @@ dependencies {
99
compile("io.cucumber:cucumber-core:$cucumberVersion")
1010
compile("io.cucumber:cucumber-java:$cucumberVersion")
1111
compile(project(":allure-java-commons"))
12+
13+
testCompile("commons-io:commons-io")
1214
testCompile("io.cucumber:cucumber-testng:$cucumberVersion")
15+
testCompile("io.github.glytching:junit-extensions")
16+
testCompile("org.assertj:assertj-core")
17+
testCompile("org.junit.jupiter:junit-jupiter-api")
18+
testCompile("org.slf4j:slf4j-simple")
19+
testCompile(project(":allure-java-commons-test"))
20+
testRuntime("org.junit.jupiter:junit-jupiter-engine")
1321
}
1422

1523
tasks.named<Jar>("jar") {
@@ -21,6 +29,7 @@ tasks.named<Jar>("jar") {
2129
}
2230

2331
tasks.named<Test>("test") {
32+
useJUnitPlatform()
2433
doFirst {
2534
jvmArgs("-javaagent:${agent.singleFile}")
2635
}

allure-cucumber3-jvm/src/main/java/io/qameta/allure/cucumber3jvm/AllureCucumber3Jvm.java

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import io.qameta.allure.model.StatusDetails;
3232
import io.qameta.allure.model.StepResult;
3333
import io.qameta.allure.model.TestResult;
34-
import io.qameta.allure.util.ResultsUtils;
3534

3635
import java.io.ByteArrayInputStream;
3736
import java.nio.charset.Charset;
@@ -46,6 +45,9 @@
4645
import java.util.stream.Collectors;
4746
import java.util.stream.IntStream;
4847

48+
import static io.qameta.allure.util.ResultsUtils.getStatus;
49+
import static io.qameta.allure.util.ResultsUtils.getStatusDetails;
50+
4951
/**
5052
* Allure plugin for Cucumber JVM 3.0.
5153
*/
@@ -72,7 +74,11 @@ public class AllureCucumber3Jvm implements Formatter {
7274
private final EventHandler<TestStepFinished> stepFinishedHandler = this::handleTestStepFinished;
7375

7476
public AllureCucumber3Jvm() {
75-
this.lifecycle = Allure.getLifecycle();
77+
this(Allure.getLifecycle());
78+
}
79+
80+
public AllureCucumber3Jvm(final AllureLifecycle lifecycle) {
81+
this.lifecycle = lifecycle;
7682
}
7783

7884
@Override
@@ -104,10 +110,14 @@ private void handleTestCaseStarted(final TestCaseStarted event) {
104110

105111
final LabelBuilder labelBuilder = new LabelBuilder(currentFeature, event.testCase, tags);
106112

113+
final String name = event.testCase.getName();
114+
final String featureName = currentFeature.getName();
115+
107116
final TestResult result = new TestResult()
108117
.setUuid(getTestCaseUuid(event.testCase))
109118
.setHistoryId(getHistoryId(event.testCase))
110-
.setName(event.testCase.getName())
119+
.setFullName(String.format("%s: %s", featureName, name))
120+
.setName(name)
111121
.setLabels(labelBuilder.getScenarioLabels())
112122
.setLinks(labelBuilder.getScenarioLinks());
113123

@@ -128,22 +138,18 @@ private void handleTestCaseStarted(final TestCaseStarted event) {
128138
}
129139

130140
private void handleTestCaseFinished(final TestCaseFinished event) {
131-
final StatusDetails statusDetails =
132-
ResultsUtils.getStatusDetails(event.result.getError()).orElse(new StatusDetails());
133-
134-
if (statusDetails.getMessage() != null && statusDetails.getTrace() != null) {
135-
lifecycle.updateTestCase(getTestCaseUuid(event.testCase), scenarioResult ->
136-
scenarioResult
137-
.setStatus(translateTestCaseStatus(event.result))
138-
.setStatusDetails(statusDetails));
139-
} else {
140-
lifecycle.updateTestCase(getTestCaseUuid(event.testCase), scenarioResult ->
141-
scenarioResult
142-
.setStatus(translateTestCaseStatus(event.result)));
143-
}
144-
145-
lifecycle.stopTestCase(getTestCaseUuid(event.testCase));
146-
lifecycle.writeTestCase(getTestCaseUuid(event.testCase));
141+
final String uuid = getTestCaseUuid(event.testCase);
142+
lifecycle.updateTestCase(
143+
uuid,
144+
testResult -> testResult.setStatus(translateTestCaseStatus(event.result))
145+
);
146+
final Optional<StatusDetails> details = getStatusDetails(event.result.getError());
147+
details.ifPresent(statusDetails -> lifecycle.updateTestCase(
148+
uuid,
149+
testResult -> testResult.setStatusDetails(statusDetails)
150+
));
151+
lifecycle.stopTestCase(uuid);
152+
lifecycle.writeTestCase(uuid);
147153
}
148154

149155
private void handleTestStepStarted(final TestStepStarted event) {
@@ -211,18 +217,22 @@ private String getHistoryId(final TestCase testCase) {
211217
return Utils.md5(testCaseLocation);
212218
}
213219

220+
@SuppressWarnings("ReturnCount")
214221
private Status translateTestCaseStatus(final Result testCaseResult) {
215-
Status allureStatus;
216-
if (testCaseResult.getStatus() == Result.Type.UNDEFINED || testCaseResult.getStatus() == Result.Type.PENDING) {
217-
allureStatus = Status.SKIPPED;
218-
} else {
219-
try {
220-
allureStatus = Status.fromValue(testCaseResult.getStatus().lowerCaseName());
221-
} catch (IllegalArgumentException e) {
222-
allureStatus = Status.BROKEN;
223-
}
222+
switch (testCaseResult.getStatus()) {
223+
case FAILED:
224+
return getStatus(testCaseResult.getError())
225+
.orElse(Status.FAILED);
226+
case PASSED:
227+
return Status.PASSED;
228+
case SKIPPED:
229+
case PENDING:
230+
return Status.SKIPPED;
231+
case AMBIGUOUS:
232+
case UNDEFINED:
233+
default:
234+
return null;
224235
}
225-
return allureStatus;
226236
}
227237

228238
private List<Parameter> getExamplesAsParameters(final ScenarioOutline scenarioOutline) {
@@ -263,7 +273,7 @@ private void handleHookStep(final TestStepFinished event) {
263273
Consumer<StepResult> stepResult = result -> result.setStatus(translateTestCaseStatus(event.result));
264274

265275
if (!Status.PASSED.equals(translateTestCaseStatus(event.result))) {
266-
final StatusDetails statusDetails = ResultsUtils.getStatusDetails(event.result.getError()).get();
276+
final StatusDetails statusDetails = getStatusDetails(event.result.getError()).get();
267277
final HookTestStep hookTestStep = (HookTestStep) event.testStep;
268278
if (hookTestStep.getHookType() == HookType.Before) {
269279
final TagParser tagParser = new TagParser(currentFeature, currentTestCase);
@@ -289,15 +299,15 @@ private void handlePickleStep(final TestStepFinished event) {
289299
final StatusDetails statusDetails;
290300
if (event.result.getStatus() == Result.Type.UNDEFINED) {
291301
statusDetails =
292-
ResultsUtils.getStatusDetails(new PendingException("TODO: implement me"))
302+
getStatusDetails(new PendingException("TODO: implement me"))
293303
.orElse(new StatusDetails());
294304
lifecycle.updateTestCase(getTestCaseUuid(currentTestCase), scenarioResult ->
295305
scenarioResult
296306
.setStatus(translateTestCaseStatus(event.result))
297307
.setStatusDetails(statusDetails));
298308
} else {
299309
statusDetails =
300-
ResultsUtils.getStatusDetails(event.result.getError())
310+
getStatusDetails(event.result.getError())
301311
.orElse(new StatusDetails());
302312
}
303313

0 commit comments

Comments
 (0)