Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions allure-cucumber3-jvm/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,15 @@ dependencies {
compile("io.cucumber:cucumber-core:$cucumberVersion")
compile("io.cucumber:cucumber-java:$cucumberVersion")
compile(project(":allure-java-commons"))

testCompile("commons-io:commons-io")
testCompile("io.cucumber:cucumber-testng:$cucumberVersion")
testCompile("io.github.glytching:junit-extensions")
testCompile("org.assertj:assertj-core")
testCompile("org.junit.jupiter:junit-jupiter-api")
testCompile("org.slf4j:slf4j-simple")
testCompile(project(":allure-java-commons-test"))
testRuntime("org.junit.jupiter:junit-jupiter-engine")
}

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

tasks.named<Test>("test") {
useJUnitPlatform()
doFirst {
jvmArgs("-javaagent:${agent.singleFile}")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import io.qameta.allure.model.StatusDetails;
import io.qameta.allure.model.StepResult;
import io.qameta.allure.model.TestResult;
import io.qameta.allure.util.ResultsUtils;

import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
Expand All @@ -46,6 +45,9 @@
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import static io.qameta.allure.util.ResultsUtils.getStatus;
import static io.qameta.allure.util.ResultsUtils.getStatusDetails;

/**
* Allure plugin for Cucumber JVM 3.0.
*/
Expand All @@ -72,7 +74,11 @@ public class AllureCucumber3Jvm implements Formatter {
private final EventHandler<TestStepFinished> stepFinishedHandler = this::handleTestStepFinished;

public AllureCucumber3Jvm() {
this.lifecycle = Allure.getLifecycle();
this(Allure.getLifecycle());
}

public AllureCucumber3Jvm(final AllureLifecycle lifecycle) {
this.lifecycle = lifecycle;
}

@Override
Expand Down Expand Up @@ -104,10 +110,14 @@ private void handleTestCaseStarted(final TestCaseStarted event) {

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

final String name = event.testCase.getName();
final String featureName = currentFeature.getName();

final TestResult result = new TestResult()
.setUuid(getTestCaseUuid(event.testCase))
.setHistoryId(getHistoryId(event.testCase))
.setName(event.testCase.getName())
.setFullName(String.format("%s: %s", featureName, name))
.setName(name)
.setLabels(labelBuilder.getScenarioLabels())
.setLinks(labelBuilder.getScenarioLinks());

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

private void handleTestCaseFinished(final TestCaseFinished event) {
final StatusDetails statusDetails =
ResultsUtils.getStatusDetails(event.result.getError()).orElse(new StatusDetails());

if (statusDetails.getMessage() != null && statusDetails.getTrace() != null) {
lifecycle.updateTestCase(getTestCaseUuid(event.testCase), scenarioResult ->
scenarioResult
.setStatus(translateTestCaseStatus(event.result))
.setStatusDetails(statusDetails));
} else {
lifecycle.updateTestCase(getTestCaseUuid(event.testCase), scenarioResult ->
scenarioResult
.setStatus(translateTestCaseStatus(event.result)));
}

lifecycle.stopTestCase(getTestCaseUuid(event.testCase));
lifecycle.writeTestCase(getTestCaseUuid(event.testCase));
final String uuid = getTestCaseUuid(event.testCase);
lifecycle.updateTestCase(
uuid,
testResult -> testResult.setStatus(translateTestCaseStatus(event.result))
);
final Optional<StatusDetails> details = getStatusDetails(event.result.getError());
details.ifPresent(statusDetails -> lifecycle.updateTestCase(
uuid,
testResult -> testResult.setStatusDetails(statusDetails)
));
lifecycle.stopTestCase(uuid);
lifecycle.writeTestCase(uuid);
}

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

@SuppressWarnings("ReturnCount")
private Status translateTestCaseStatus(final Result testCaseResult) {
Status allureStatus;
if (testCaseResult.getStatus() == Result.Type.UNDEFINED || testCaseResult.getStatus() == Result.Type.PENDING) {
allureStatus = Status.SKIPPED;
} else {
try {
allureStatus = Status.fromValue(testCaseResult.getStatus().lowerCaseName());
} catch (IllegalArgumentException e) {
allureStatus = Status.BROKEN;
}
switch (testCaseResult.getStatus()) {
case FAILED:
return getStatus(testCaseResult.getError())
.orElse(Status.FAILED);
case PASSED:
return Status.PASSED;
case SKIPPED:
case PENDING:
return Status.SKIPPED;
case AMBIGUOUS:
case UNDEFINED:
default:
return null;
}
return allureStatus;
}

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

if (!Status.PASSED.equals(translateTestCaseStatus(event.result))) {
final StatusDetails statusDetails = ResultsUtils.getStatusDetails(event.result.getError()).get();
final StatusDetails statusDetails = getStatusDetails(event.result.getError()).get();
final HookTestStep hookTestStep = (HookTestStep) event.testStep;
if (hookTestStep.getHookType() == HookType.Before) {
final TagParser tagParser = new TagParser(currentFeature, currentTestCase);
Expand All @@ -289,15 +299,15 @@ private void handlePickleStep(final TestStepFinished event) {
final StatusDetails statusDetails;
if (event.result.getStatus() == Result.Type.UNDEFINED) {
statusDetails =
ResultsUtils.getStatusDetails(new PendingException("TODO: implement me"))
getStatusDetails(new PendingException("TODO: implement me"))
.orElse(new StatusDetails());
lifecycle.updateTestCase(getTestCaseUuid(currentTestCase), scenarioResult ->
scenarioResult
.setStatus(translateTestCaseStatus(event.result))
.setStatusDetails(statusDetails));
} else {
statusDetails =
ResultsUtils.getStatusDetails(event.result.getError())
getStatusDetails(event.result.getError())
.orElse(new StatusDetails());
}

Expand Down
Loading