diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index fb19a1b5d..bb09719d9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -79,7 +79,7 @@ body: id: terms attributes: label: Code of Conduct - description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/allure-framework/allure-java/blob/master/CODE_OF_CONDUCT.md) + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/allure-framework/allure-java/blob/main/CODE_OF_CONDUCT.md) options: - label: I agree to follow this project's Code of Conduct required: true diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 69f577fc1..ad77feb7d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,7 +7,7 @@ on: - '*' push: branches: - - 'master' + - 'main' - 'hotfix-*' jobs: diff --git a/.github/workflows/dependency-submission.yml b/.github/workflows/dependency-submission.yml new file mode 100644 index 000000000..bb93c2eb2 --- /dev/null +++ b/.github/workflows/dependency-submission.yml @@ -0,0 +1,22 @@ +name: Dependency Submission + +on: + push: + branches: + - main + +permissions: + contents: write + +jobs: + dependency-submission: + name: Dependency Submission + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Generate and submit dependency graph + uses: gradle/actions/dependency-submission@v3 + env: + DEPENDENCY_GRAPH_EXCLUDE_PROJECTS: ':allure-java-commons-test' + DEPENDENCY_GRAPH_INCLUDE_CONFIGURATIONS: 'runtimeClasspath' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c2167b9d7..1f8821c29 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,5 @@ name: Release +run-name: Release ${{ inputs.releaseVersion }} (next ${{ inputs.nextVersion }}) by ${{ github.actor }} on: workflow_dispatch: diff --git a/AUTHORS b/AUTHORS index 0edbd3fb9..8263d9471 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,4 +1,4 @@ The following authors have created the source code of "Allure Java" -published and distributed by Qameta Software OÜ as the owner: +published and distributed by Qameta Software Inc as the owner: * Dmitry Baev diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 64bac5a9e..000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,40 +0,0 @@ -pipeline { - agent { label 'java' } - parameters { - booleanParam(name: 'RELEASE', defaultValue: false, description: 'Perform release?') - string(name: 'RELEASE_VERSION', defaultValue: '', description: 'Release version') - string(name: 'NEXT_VERSION', defaultValue: '', description: 'Next version (without SNAPSHOT)') - } - stages { - stage('Build') { - steps { - sh './gradlew build' - } - } - stage('Release') { - when { expression { return params.RELEASE } } - steps { - withCredentials([usernamePassword(credentialsId: 'qameta-ci_bintray', - usernameVariable: 'BINTRAY_USER', passwordVariable: 'BINTRAY_API_KEY')]) { - sshagent(['qameta-ci_ssh']) { - sh 'git checkout master && git pull origin master' - sh "./gradlew release -Prelease.useAutomaticVersion=true " + - "-Prelease.releaseVersion=${RELEASE_VERSION} " + - "-Prelease.newVersion=${NEXT_VERSION}-SNAPSHOT" - } - } - } - } - } - post { - always { - allure results: [[path: '**/build/allure-results']] - deleteDir() - } - - failure { - slackSend message: "${env.JOB_NAME} - #${env.BUILD_NUMBER} failed (<${env.BUILD_URL}|Open>)", - color: 'danger', teamDomain: 'qameta', channel: 'allure', tokenCredentialId: 'allure-channel' - } - } -} diff --git a/LICENSE b/LICENSE index e078585bf..aa0c10ae1 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 Qameta Software OÜ + Copyright 2016-2024 Qameta Software Inc Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 202c13479..e452787b3 100644 --- a/README.md +++ b/README.md @@ -13,48 +13,48 @@ [![Build](https://github.com/allure-framework/allure-java/actions/workflows/build.yml/badge.svg)](https://github.com/allure-framework/allure-java/actions/workflows/build.yml) [![Allure Java](https://img.shields.io/github/release/allure-framework/allure-java.svg)](https://github.com/allure-framework/allure-java/releases/latest) -The repository contains new versions of adaptors for JVM-based test frameworks. +> The repository contains new versions of adaptors for JVM-based test frameworks. -All the artifacts are deployed to `https://repo1.maven.org/maven2/io/qameta/allure/`. +[Allure Report logo](https://allurereport.org "Allure Report") -## TestNG - -The new TestNG adaptors is pretty much ready. To use the adaptor you should add the following dependency: +- Learn more about Allure Report at [https://allurereport.org](https://allurereport.org) +- 📚 [Documentation](https://allurereport.org/docs/) – discover official documentation for Allure Report +- ❓ [Questions and Support](https://github.com/orgs/allure-framework/discussions/categories/questions-support) – get help from the team and community +- 📢 [Official announcements](https://github.com/orgs/allure-framework/discussions/categories/announcements) – stay updated with our latest news and updates +- 💬 [General Discussion](https://github.com/orgs/allure-framework/discussions/categories/general-discussion) – engage in casual conversations, share insights and ideas with the community +- 🖥️ [Live Demo](https://demo.allurereport.org/) — explore a live example of Allure Report in action -```xml - - io.qameta.allure - allure-testng - $LATEST_VERSION - -``` +--- +## TestNG -also you need to configure AspectJ weaver to support steps. +- 🚀 Documentation — https://allurereport.org/docs/testng/ +- 📚 Example project — https://github.com/allure-examples?q=topic%3Atestng +- ✅ Generate a project in 10 seconds via Allure Start - https://allurereport.org/start/ ## JUnit 4 -The first draft of a new JUnit 4 adaptor is ready. To use the adaptor you should add the following dependency: +- 🚀 Documentation — work in progress +- 📚 Example project — https://github.com/allure-examples?q=topic%3Ajunit4 +- ✅ Generate a project in 10 seconds via Allure Start - https://allurereport.org/start/ +- +## JUnit 5 -```xml - - io.qameta.allure - allure-junit4 - $LATEST_VERSION - -``` +- 🚀 Documentation — https://allurereport.org/docs/junit5/ +- 📚 Example project — https://github.com/allure-examples?q=topic%3Ajunit5 +- ✅ Generate a project in 10 seconds via Allure Start - https://allurereport.org/start/ -## JUnit 5 +## Cucumber JVM -To use JUnit 5 simply add the following dependency to your project: +- 🚀 Documentation — https://allurereport.org/docs/cucumberjvm/ +- 📚 Example project — https://github.com/allure-examples?q=cucumber&type=all&language=java +- ✅ Generate a project in 10 seconds via Allure Start - https://allurereport.org/start/ -```xml - - io.qameta.allure - allure-junit5 - $LATEST_VERSION - -``` +## Spock +- 🚀 Documentation — https://allurereport.org/docs/spock/ +- 📚 Example project — https://github.com/allure-examples?q=topic%3Aspock +- ✅ Generate a project in 10 seconds via Allure Start - https://allurereport.org/start/ + ## Selenide Listener for Selenide, that logging steps for Allure: @@ -240,17 +240,3 @@ Usage example: Awaitility.setDefaultConditionEvaluationListener(new AllureAwaitilityListener()); ``` -## Cucumber -4,5,6,7 versions are supported instead of N use the required version. -To use Cucumber simply add the following dependency to your project: - -[How to use allure cucumber code examples](https://github.com/allure-examples?q=cucumber&type=all&language=java) - -```xml - - io.qameta.allure - allure-cucumberN-jvm - $LATEST_VERSION - - -``` diff --git a/allure-assertj/src/main/java/io/qameta/allure/assertj/AllureAspectJ.java b/allure-assertj/src/main/java/io/qameta/allure/assertj/AllureAspectJ.java index fbf10f7f0..128791172 100644 --- a/allure-assertj/src/main/java/io/qameta/allure/assertj/AllureAspectJ.java +++ b/allure-assertj/src/main/java/io/qameta/allure/assertj/AllureAspectJ.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-assertj/src/test/java/io/qameta/allure/assertj/AllureAspectJTest.java b/allure-assertj/src/test/java/io/qameta/allure/assertj/AllureAspectJTest.java index 12437b900..57ddef240 100644 --- a/allure-assertj/src/test/java/io/qameta/allure/assertj/AllureAspectJTest.java +++ b/allure-assertj/src/test/java/io/qameta/allure/assertj/AllureAspectJTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentContent.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentContent.java index c8fe7c111..50af67ea4 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentContent.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentContent.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentData.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentData.java index 86b318a05..e097b8815 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentData.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentData.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentProcessor.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentProcessor.java index cfc93c716..467261139 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentProcessor.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderException.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderException.java index 5d702bffa..daaf9cc91 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderException.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderException.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderer.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderer.java index 1d239331e..355f6d782 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderer.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/AttachmentRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentContent.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentContent.java index ab26abbb6..ccdc978a8 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentContent.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentContent.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentProcessor.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentProcessor.java index dc57e9a01..652c8ca5f 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentProcessor.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/DefaultAttachmentProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/FreemarkerAttachmentRenderer.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/FreemarkerAttachmentRenderer.java index 244230d25..50ac53924 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/FreemarkerAttachmentRenderer.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/FreemarkerAttachmentRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpRequestAttachment.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpRequestAttachment.java index 47493fc46..75cda2e96 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpRequestAttachment.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpRequestAttachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ import io.qameta.allure.attachment.AttachmentData; import io.qameta.allure.util.ObjectUtils; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -41,9 +42,18 @@ public class HttpRequestAttachment implements AttachmentData { private final Map cookies; + private final Map formParams; + public HttpRequestAttachment(final String name, final String url, final String method, final String body, final String curl, final Map headers, final Map cookies) { + this(name, url, method, body, curl, headers, cookies, Collections.emptyMap()); + } + + @SuppressWarnings("checkstyle:parameternumber") + public HttpRequestAttachment(final String name, final String url, final String method, + final String body, final String curl, final Map headers, + final Map cookies, final Map formParams) { this.name = name; this.url = url; this.method = method; @@ -51,6 +61,7 @@ public HttpRequestAttachment(final String name, final String url, final String m this.curl = curl; this.headers = headers; this.cookies = cookies; + this.formParams = formParams; } public String getUrl() { @@ -73,6 +84,10 @@ public Map getCookies() { return cookies; } + public Map getFormParams() { + return formParams; + } + public String getCurl() { return curl; } @@ -90,6 +105,7 @@ public String toString() { + ",\n\tbody=" + this.body + ",\n\theaders=" + ObjectUtils.mapToString(this.headers) + ",\n\tcookies=" + ObjectUtils.mapToString(this.cookies) + + ",\n\tformParams=" + ObjectUtils.mapToString(this.formParams) + "\n)"; } @@ -111,6 +127,8 @@ public static final class Builder { private final Map cookies = new HashMap<>(); + private final Map formParams = new HashMap<>(); + private Builder(final String name, final String url) { Objects.requireNonNull(name, "Name must not be null value"); Objects.requireNonNull(url, "Url must not be null value"); @@ -160,6 +178,12 @@ public Builder setBody(final String body) { return this; } + public Builder setFormParams(final Map formParams) { + Objects.requireNonNull(formParams, "Form params must not be null value"); + this.formParams.putAll(formParams); + return this; + } + /** * Use setter method instead. * @deprecated scheduled for removal in 3.0 release @@ -215,7 +239,7 @@ public Builder withBody(final String body) { } public HttpRequestAttachment build() { - return new HttpRequestAttachment(name, url, method, body, getCurl(), headers, cookies); + return new HttpRequestAttachment(name, url, method, body, getCurl(), headers, cookies, formParams); } private String getCurl() { @@ -226,6 +250,7 @@ private String getCurl() { builder.append(" '").append(url).append('\''); headers.forEach((key, value) -> appendHeader(builder, key, value)); cookies.forEach((key, value) -> appendCookie(builder, key, value)); + formParams.forEach((key, value) -> appendFormParams(builder, key, value)); if (Objects.nonNull(body)) { builder.append(" -d '").append(body).append('\''); @@ -248,5 +273,13 @@ private static void appendCookie(final StringBuilder builder, final String key, .append(value) .append('\''); } + + private static void appendFormParams(final StringBuilder builder, final String key, final String value) { + builder.append(" --form '") + .append(key) + .append('=') + .append(value) + .append('\''); + } } } diff --git a/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpResponseAttachment.java b/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpResponseAttachment.java index ee79d0ba5..2369e10f8 100644 --- a/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpResponseAttachment.java +++ b/allure-attachments/src/main/java/io/qameta/allure/attachment/http/HttpResponseAttachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/main/resources/tpl/http-request.ftl b/allure-attachments/src/main/resources/tpl/http-request.ftl index b4e31d632..935c1c91a 100644 --- a/allure-attachments/src/main/resources/tpl/http-request.ftl +++ b/allure-attachments/src/main/resources/tpl/http-request.ftl @@ -3,36 +3,45 @@
<#if data.method??>${data.method}<#else>GET to <#if data.url??>${data.url}<#else>Unknown
<#if data.body??> -

Body

-
+

Body

+
     <#t>${data.body}
     
-
+
<#if (data.headers)?has_content> -

Headers

-
- <#list data.headers as name, value> -
${name}: ${value!"null"}
- -
+

Headers

+
+ <#list data.headers as name, value> +
${name}: ${value!"null"}
+ +
<#if (data.cookies)?has_content> -

Cookies

-
- <#list data.cookies as name, value> -
${name}: ${value!"null"}
- -
+

Cookies

+
+ <#list data.cookies as name, value> +
${name}: ${value!"null"}
+ +
<#if data.curl??> -

Curl

-
-${data.curl} -
+

Curl

+
+ ${data.curl} +
+ + +<#if (data.formParams)?has_content> +

FormParams

+
+ <#list data.formParams as name, value> +
${name}: ${value!"null"}
+ +
diff --git a/allure-attachments/src/test/java/io/qameta/allure/attachment/DefaultAttachmentProcessorTest.java b/allure-attachments/src/test/java/io/qameta/allure/attachment/DefaultAttachmentProcessorTest.java index 1283d6116..a1d2def2e 100644 --- a/allure-attachments/src/test/java/io/qameta/allure/attachment/DefaultAttachmentProcessorTest.java +++ b/allure-attachments/src/test/java/io/qameta/allure/attachment/DefaultAttachmentProcessorTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/test/java/io/qameta/allure/attachment/FreemarkerAttachmentRendererTest.java b/allure-attachments/src/test/java/io/qameta/allure/attachment/FreemarkerAttachmentRendererTest.java index 0dabc89d2..0a773e59f 100644 --- a/allure-attachments/src/test/java/io/qameta/allure/attachment/FreemarkerAttachmentRendererTest.java +++ b/allure-attachments/src/test/java/io/qameta/allure/attachment/FreemarkerAttachmentRendererTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/test/java/io/qameta/allure/attachment/NegativeFreemarkerAttachmentRendererTest.java b/allure-attachments/src/test/java/io/qameta/allure/attachment/NegativeFreemarkerAttachmentRendererTest.java index 865eb5e48..fbc2e6611 100644 --- a/allure-attachments/src/test/java/io/qameta/allure/attachment/NegativeFreemarkerAttachmentRendererTest.java +++ b/allure-attachments/src/test/java/io/qameta/allure/attachment/NegativeFreemarkerAttachmentRendererTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-attachments/src/test/java/io/qameta/allure/attachment/testdata/TestData.java b/allure-attachments/src/test/java/io/qameta/allure/attachment/testdata/TestData.java index 60903f8c1..f5933c6db 100644 --- a/allure-attachments/src/test/java/io/qameta/allure/attachment/testdata/TestData.java +++ b/allure-attachments/src/test/java/io/qameta/allure/attachment/testdata/TestData.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-awaitility/src/main/java/io/qameta/allure/awaitility/AllureAwaitilityListener.java b/allure-awaitility/src/main/java/io/qameta/allure/awaitility/AllureAwaitilityListener.java index 8a3f468b2..93f6c0ee8 100644 --- a/allure-awaitility/src/main/java/io/qameta/allure/awaitility/AllureAwaitilityListener.java +++ b/allure-awaitility/src/main/java/io/qameta/allure/awaitility/AllureAwaitilityListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-awaitility/src/main/java/io/qameta/allure/awaitility/TemporalDuration.java b/allure-awaitility/src/main/java/io/qameta/allure/awaitility/TemporalDuration.java index 17a489e27..b9f58879d 100644 --- a/allure-awaitility/src/main/java/io/qameta/allure/awaitility/TemporalDuration.java +++ b/allure-awaitility/src/main/java/io/qameta/allure/awaitility/TemporalDuration.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-awaitility/src/test/java/io/qameta/allure/awaitility/ConditionListenersPositiveTest.java b/allure-awaitility/src/test/java/io/qameta/allure/awaitility/ConditionListenersPositiveTest.java index e62e0314f..74cfa88f2 100644 --- a/allure-awaitility/src/test/java/io/qameta/allure/awaitility/ConditionListenersPositiveTest.java +++ b/allure-awaitility/src/test/java/io/qameta/allure/awaitility/ConditionListenersPositiveTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsNegativeTest.java b/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsNegativeTest.java index 4b27b17e6..29577aee2 100644 --- a/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsNegativeTest.java +++ b/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsNegativeTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsPositiveTest.java b/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsPositiveTest.java index da5f84137..db00c41e6 100644 --- a/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsPositiveTest.java +++ b/allure-awaitility/src/test/java/io/qameta/allure/awaitility/GlobalSettingsPositiveTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-citrus/src/main/java/io/qameta/allure/citrus/AllureCitrus.java b/allure-citrus/src/main/java/io/qameta/allure/citrus/AllureCitrus.java index 3db26c236..21f68bebe 100644 --- a/allure-citrus/src/main/java/io/qameta/allure/citrus/AllureCitrus.java +++ b/allure-citrus/src/main/java/io/qameta/allure/citrus/AllureCitrus.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-citrus/src/test/java/io/qameta/allure/citrus/AllureCitrusTest.java b/allure-citrus/src/test/java/io/qameta/allure/citrus/AllureCitrusTest.java index a31fd6f00..7f29c0490 100644 --- a/allure-citrus/src/test/java/io/qameta/allure/citrus/AllureCitrusTest.java +++ b/allure-citrus/src/test/java/io/qameta/allure/citrus/AllureCitrusTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/main/java/cucumber/runtime/formatter/TestSourcesModelProxy.java b/allure-cucumber4-jvm/src/main/java/cucumber/runtime/formatter/TestSourcesModelProxy.java index e6af04883..f55994b76 100644 --- a/allure-cucumber4-jvm/src/main/java/cucumber/runtime/formatter/TestSourcesModelProxy.java +++ b/allure-cucumber4-jvm/src/main/java/cucumber/runtime/formatter/TestSourcesModelProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/AllureCucumber4Jvm.java b/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/AllureCucumber4Jvm.java index ecefc8ef6..8998226d8 100644 --- a/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/AllureCucumber4Jvm.java +++ b/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/AllureCucumber4Jvm.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,10 +17,10 @@ import cucumber.api.HookTestStep; import cucumber.api.HookType; -import cucumber.api.PendingException; import cucumber.api.PickleStepTestStep; import cucumber.api.Result; import cucumber.api.TestCase; +import cucumber.api.TestStep; import cucumber.api.event.ConcurrentEventListener; import cucumber.api.event.EmbedEvent; import cucumber.api.event.EventHandler; @@ -39,6 +39,7 @@ import gherkin.ast.TableRow; import gherkin.pickles.PickleCell; import gherkin.pickles.PickleRow; +import gherkin.pickles.PickleStep; import gherkin.pickles.PickleTable; import gherkin.pickles.PickleTag; import io.qameta.allure.Allure; @@ -52,12 +53,14 @@ import io.qameta.allure.model.TestResultContainer; import java.io.ByteArrayInputStream; +import java.net.URI; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.util.Collections; import java.util.Deque; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -66,6 +69,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import static cucumber.api.HookType.Before; import static io.qameta.allure.util.ResultsUtils.createParameter; import static io.qameta.allure.util.ResultsUtils.getStatus; import static io.qameta.allure.util.ResultsUtils.getStatusDetails; @@ -82,17 +86,12 @@ }) public class AllureCucumber4Jvm implements ConcurrentEventListener { + private static final String COLON = ":"; + private final AllureLifecycle lifecycle; - private final ConcurrentHashMap scenarioUuids = new ConcurrentHashMap<>(); private final TestSourcesModelProxy testSources = new TestSourcesModelProxy(); - private final ThreadLocal currentFeature = new InheritableThreadLocal<>(); - private final ThreadLocal currentFeatureFile = new InheritableThreadLocal<>(); - private final ThreadLocal currentTestCase = new InheritableThreadLocal<>(); - private final ThreadLocal currentContainer = new InheritableThreadLocal<>(); - private final ThreadLocal forbidTestCaseStatusChange = new InheritableThreadLocal<>(); - private final EventHandler featureStartedHandler = this::handleFeatureStartedHandler; private final EventHandler caseStartedHandler = this::handleTestCaseStarted; private final EventHandler caseFinishedHandler = this::handleTestCaseFinished; @@ -101,11 +100,14 @@ public class AllureCucumber4Jvm implements ConcurrentEventListener { private final EventHandler writeEventHandler = this::handleWriteEvent; private final EventHandler embedEventHandler = this::handleEmbedEvent; + private final Map hookStepContainerUuid = new ConcurrentHashMap<>(); + private final Map testCaseUuids = new ConcurrentHashMap<>(); + private final Map stepUuids = new ConcurrentHashMap<>(); + private final Map fixtureUuids = new ConcurrentHashMap<>(); + private static final String TXT_EXTENSION = ".txt"; private static final String TEXT_PLAIN = "text/plain"; - private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().toString(); - private static final String CLASSPATH_PREFIX = "classpath:"; - private static final String FILE_PREFIX = "file:"; + private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().getSchemeSpecificPart(); @SuppressWarnings("unused") public AllureCucumber4Jvm() { @@ -130,39 +132,46 @@ public void setEventPublisher(final EventPublisher publisher) { publisher.registerHandlerFor(EmbedEvent.class, embedEventHandler); } - /* - Event Handlers - */ - private void handleFeatureStartedHandler(final TestSourceRead event) { testSources.addTestSourceReadEvent(event.uri, event); } private void handleTestCaseStarted(final TestCaseStarted event) { - currentFeatureFile.set(event.testCase.getUri()); - currentFeature.set(testSources.getFeature(currentFeatureFile.get())); - currentTestCase.set(event.testCase); - currentContainer.set(UUID.randomUUID().toString()); - forbidTestCaseStatusChange.set(false); + final TestCase testCase = event.getTestCase(); + final Feature feature = testSources.getFeature(testCase.getUri()); - final TestCase testCase = currentTestCase.get(); final Deque tags = new LinkedList<>(testCase.getTags()); - - final Feature feature = currentFeature.get(); final LabelBuilder labelBuilder = new LabelBuilder(feature, testCase, tags); final String name = testCase.getName(); + + // the same way full name is generated for + // org.junit.platform.engine.support.descriptor.ClasspathResourceSource + // to support io.qameta.allure.junitplatform.AllurePostDiscoveryFilter + final String fullName = String.format("%s:%d", + getTestCaseUri(testCase), + testCase.getLine() + ); + + final String testCaseUuid = testCaseUuids + .computeIfAbsent(testCase, tc -> UUID.randomUUID().toString()); + final TestResult result = new TestResult() - .setUuid(getTestCaseUuid(testCase)) + .setUuid(testCaseUuid) + .setTestCaseId(getTestCaseId(testCase)) .setHistoryId(getHistoryId(testCase)) - .setFullName(getTestCaseUri(testCase) + ":" + testCase.getLine()) + .setFullName(fullName) .setName(name) .setLabels(labelBuilder.getScenarioLabels()) .setLinks(labelBuilder.getScenarioLinks()); final ScenarioDefinition scenarioDefinition = - testSources.getScenarioDefinition(currentFeatureFile.get(), testCase.getLine()); + testSources.getScenarioDefinition( + testCase.getUri(), + testCase.getLine() + ); + if (scenarioDefinition instanceof ScenarioOutline) { result.setParameters( getExamplesAsParameters((ScenarioOutline) scenarioDefinition, testCase) @@ -178,74 +187,157 @@ private void handleTestCaseStarted(final TestCaseStarted event) { result.setDescription(description); } - final TestResultContainer resultContainer = new TestResultContainer() - .setName(String.format("%s: %s", scenarioDefinition.getKeyword(), scenarioDefinition.getName())) - .setUuid(getTestContainerUuid()) - .setChildren(Collections.singletonList(getTestCaseUuid(testCase))); - lifecycle.scheduleTestCase(result); - lifecycle.startTestContainer(getTestContainerUuid(), resultContainer); - lifecycle.startTestCase(getTestCaseUuid(testCase)); + lifecycle.startTestCase(testCaseUuid); } private void handleTestCaseFinished(final TestCaseFinished event) { + final TestCase testCase = event.getTestCase(); + final String uuid = testCaseUuids.get(testCase); + if (Objects.isNull(uuid)) { + return; + } + + final Feature feature = testSources.getFeature(testCase.getUri()); + final Result result = event.result; + final Status status = translateTestCaseStatus(result); + final StatusDetails statusDetails = getStatusDetails(result.getError()) + .orElseGet(StatusDetails::new); + + final TagParser tagParser = new TagParser(feature, testCase); + statusDetails + .setFlaky(tagParser.isFlaky()) + .setMuted(tagParser.isMuted()) + .setKnown(tagParser.isKnown()); + + lifecycle.updateTestCase(uuid, testResult -> testResult + .setStatus(status) + .setStatusDetails(statusDetails) + ); - final String uuid = getTestCaseUuid(event.testCase); - final Optional details = getStatusDetails(event.result.getError()); - details.ifPresent(statusDetails -> lifecycle.updateTestCase( - uuid, - testResult -> testResult.setStatusDetails(statusDetails) - )); lifecycle.stopTestCase(uuid); - lifecycle.stopTestContainer(getTestContainerUuid()); lifecycle.writeTestCase(uuid); - lifecycle.writeTestContainer(getTestContainerUuid()); } private void handleTestStepStarted(final TestStepStarted event) { - if (event.testStep instanceof PickleStepTestStep) { - final PickleStepTestStep pickleStep = (PickleStepTestStep) event.testStep; - final String stepKeyword = Optional.ofNullable( - testSources.getKeywordFromSource(currentFeatureFile.get(), pickleStep.getStepLine()) - ).orElse("UNDEFINED"); - - final StepResult stepResult = new StepResult() - .setName(String.format("%s %s", stepKeyword, pickleStep.getPickleStep().getText())) - .setStart(System.currentTimeMillis()); - - lifecycle.startStep(getTestCaseUuid(currentTestCase.get()), getStepUuid(pickleStep), stepResult); - - pickleStep.getStepArgument().stream() - .filter(PickleTable.class::isInstance) - .findFirst() - .ifPresent(table -> createDataTableAttachment((PickleTable) table)); - } else if (event.testStep instanceof HookTestStep) { - initHook((HookTestStep) event.testStep); + final TestCase testCase = event.getTestCase(); + if (event.testStep instanceof HookTestStep) { + final HookTestStep hook = (HookTestStep) event.testStep; + + if (isFixtureHook(hook)) { + handleStartFixtureHook(testCase, hook); + } else { + handleStartStepHook(testCase, hook); + } + } else if (event.testStep instanceof PickleStepTestStep) { + handleStartPickleStep(testCase, (PickleStepTestStep) event.testStep); + } + } + + private void handleStartPickleStep(final TestCase testCase, + final PickleStepTestStep pickleStep) { + final String uuid = testCaseUuids.get(testCase); + if (Objects.isNull(uuid)) { + return; } + + final PickleStep step = pickleStep.getPickleStep(); + final String stepKeyword = Optional + .ofNullable( + testSources.getKeywordFromSource( + testCase.getUri(), + pickleStep.getStepLine() + ) + ) + .orElse(""); + + final StepResult stepResult = new StepResult() + .setName(stepKeyword + step.getText()) + .setStart(System.currentTimeMillis()); + + final String stepUuid = stepUuids.computeIfAbsent( + pickleStep, + cl -> UUID.randomUUID().toString() + ); + + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, stepUuid, stepResult); + + pickleStep.getStepArgument() + .stream() + .filter(PickleTable.class::isInstance) + .map(PickleTable.class::cast) + .findFirst() + .ifPresent(this::createDataTableAttachment); + } - private void initHook(final HookTestStep hook) { + private void handleStartStepHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCaseUuids.get(testCase); + if (Objects.isNull(uuid)) { + return; + } - final FixtureResult hookResult = new FixtureResult() + final StepResult stepResult = new StepResult() .setName(hook.getCodeLocation()) .setStart(System.currentTimeMillis()); - if (hook.getHookType() == HookType.Before) { - lifecycle.startPrepareFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); - } else { - lifecycle.startTearDownFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); + final String stepUuid = stepUuids.computeIfAbsent( + hook, unused -> UUID.randomUUID().toString() + ); + + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, stepUuid, stepResult); + } + + private void handleStartFixtureHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCaseUuids.get(testCase); + if (Objects.isNull(uuid)) { + return; } + + final String containerUuid = hookStepContainerUuid + .computeIfAbsent(hook, unused -> UUID.randomUUID().toString()); + + lifecycle.startTestContainer(new TestResultContainer() + .setUuid(containerUuid) + .setChildren(Collections.singletonList(uuid)) + ); + + final FixtureResult hookResult = new FixtureResult() + .setName(hook.getCodeLocation()); + + final String fixtureUuid = fixtureUuids.computeIfAbsent( + hook, unused -> UUID.randomUUID().toString() + ); + if (hook.getHookType() == Before) { + lifecycle.startPrepareFixture(containerUuid, fixtureUuid, hookResult); + } else { + lifecycle.startTearDownFixture(containerUuid, fixtureUuid, hookResult); + } } private void handleTestStepFinished(final TestStepFinished event) { if (event.testStep instanceof HookTestStep) { - handleHookStep(event); - } else { - handlePickleStep(event); + final HookTestStep hook = (HookTestStep) event.testStep; + if (isFixtureHook(hook)) { + handleStopHookStep(event.result, hook); + } else { + handleStopStep(event.getTestCase(), event.result, hook); + } + } else if (event.testStep instanceof PickleStepTestStep) { + final PickleStepTestStep pickleStep = (PickleStepTestStep) event.testStep; + handleStopStep(event.getTestCase(), event.result, pickleStep); } } + private static boolean isFixtureHook(final HookTestStep hook) { + return hook.getHookType() == Before || hook.getHookType() == HookType.After; + } + private void handleWriteEvent(final WriteEvent event) { lifecycle.addAttachment( "Text output", @@ -256,34 +348,41 @@ private void handleWriteEvent(final WriteEvent event) { } private void handleEmbedEvent(final EmbedEvent event) { - lifecycle.addAttachment("Screenshot", null, null, new ByteArrayInputStream(event.data)); + lifecycle.addAttachment( + Objects.isNull(event.name) + ? "Embedding" + : event.name, + event.mimeType, + null, + new ByteArrayInputStream(event.data) + ); } - /* - Utility Methods - */ - - private String getTestContainerUuid() { - return currentContainer.get(); + private String getHistoryId(final TestCase testCase) { + final String testCaseLocation = getTestCaseUri(testCase) + COLON + testCase.getLine(); + return md5(testCaseLocation); } - private String getTestCaseUuid(final TestCase testCase) { - return scenarioUuids.computeIfAbsent(getHistoryId(testCase), it -> UUID.randomUUID().toString()); + private String getTestCaseId(final TestCase testCase) { + final String testCaseId = getTestCaseUri(testCase) + COLON + testCase.getName(); + return md5(testCaseId); } - private String getStepUuid(final PickleStepTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getPickleStep().getText() + step.getStepLine(); - } + private String getTestCaseUri(final TestCase testCase) { + final String testCaseUri = getUriWithoutScheme(testCase); - private String getHookStepUuid(final HookTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getHookType().toString() + step.getCodeLocation(); + if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) { + return testCaseUri.substring(CUCUMBER_WORKING_DIR.length()); + } + return testCaseUri; } - private String getHistoryId(final TestCase testCase) { - final String testCaseLocation = getTestCaseUri(testCase) + ":" + testCase.getLine(); - return md5(testCaseLocation); + private static String getUriWithoutScheme(final TestCase testCase) { + try { + return URI.create(testCase.getUri()).getSchemeSpecificPart(); + } catch (Exception ignored) { + return testCase.getUri(); + } } private Status translateTestCaseStatus(final Result testCaseResult) { @@ -304,139 +403,116 @@ private Status translateTestCaseStatus(final Result testCaseResult) { } private List getExamplesAsParameters( - final ScenarioOutline scenarioOutline, final TestCase localCurrentTestCase) { - final Optional examplesBlock = - scenarioOutline.getExamples().stream() + final ScenarioOutline scenario, + final TestCase localCurrentTestCase) { + final Optional maybeExample = + scenario.getExamples().stream() .filter(example -> example.getTableBody().stream() - .anyMatch(row -> row.getLocation().getLine() == localCurrentTestCase.getLine()) - ).findFirst(); - - if (examplesBlock.isPresent()) { - final TableRow row = examplesBlock.get().getTableBody().stream() - .filter(example -> example.getLocation().getLine() == localCurrentTestCase.getLine()) - .findFirst().get(); - return IntStream.range(0, examplesBlock.get().getTableHeader().getCells().size()).mapToObj(index -> { - final String name = examplesBlock.get().getTableHeader().getCells().get(index).getValue(); - final String value = row.getCells().get(index).getValue(); - return createParameter(name, value); - }).collect(Collectors.toList()); - } else { + .anyMatch(row -> row.getLocation().getLine() + == localCurrentTestCase.getLine()) + ) + .findFirst(); + + if (!maybeExample.isPresent()) { return Collections.emptyList(); } + + final Examples examples = maybeExample.get(); + + final Optional maybeRow = examples.getTableBody().stream() + .filter(example -> example.getLocation().getLine() == localCurrentTestCase.getLine()) + .findFirst(); + + if (!maybeRow.isPresent()) { + return Collections.emptyList(); + } + + final TableRow row = maybeRow.get(); + + return IntStream.range(0, examples.getTableHeader().getCells().size()) + .mapToObj(index -> { + final String name = examples.getTableHeader().getCells().get(index).getValue(); + final String value = row.getCells().get(index).getValue(); + return createParameter(name, value); + }) + .collect(Collectors.toList()); } private void createDataTableAttachment(final PickleTable pickleTable) { final List rows = pickleTable.getRows(); final StringBuilder dataTableCsv = new StringBuilder(); - if (!rows.isEmpty()) { - rows.forEach(dataTableRow -> { - dataTableCsv.append( - dataTableRow.getCells().stream() - .map(PickleCell::getValue) - .collect(Collectors.joining("\t")) - ); - dataTableCsv.append('\n'); - }); - - final String attachmentSource = lifecycle - .prepareAttachment("Data table", "text/tab-separated-values", "csv"); - lifecycle.writeAttachment(attachmentSource, - new ByteArrayInputStream(dataTableCsv.toString().getBytes(StandardCharsets.UTF_8))); + for (PickleRow row : rows) { + final String rowString = row.getCells().stream() + .map(PickleCell::getValue) + .collect(Collectors.joining("\t", "", "\n")); + dataTableCsv.append(rowString); } + final String attachmentSource = lifecycle + .prepareAttachment("Data table", "text/tab-separated-values", "csv"); + lifecycle.writeAttachment(attachmentSource, + new ByteArrayInputStream(dataTableCsv.toString().getBytes(StandardCharsets.UTF_8))); } - private void handleHookStep(final TestStepFinished event) { - final HookTestStep hookStep = (HookTestStep) event.testStep; - final String uuid = getHookStepUuid(hookStep); - final FixtureResult fixtureResult = new FixtureResult().setStatus(translateTestCaseStatus(event.result)); - - if (!Status.PASSED.equals(fixtureResult.getStatus())) { - final TestResult testResult = new TestResult().setStatus(translateTestCaseStatus(event.result)); - final StatusDetails statusDetails = getStatusDetails(event.result.getError()) - .orElseGet(StatusDetails::new); - - final String errorMessage = event.result.getError() == null - ? hookStep.getHookType().name() + " is failed." - : hookStep.getHookType().name() + " is failed: " - + event.result.getError().getLocalizedMessage(); - - statusDetails.setMessage(errorMessage); - - if (hookStep.getHookType() == HookType.Before) { - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); - statusDetails - .setFlaky(tagParser.isFlaky()) - .setMuted(tagParser.isMuted()) - .setKnown(tagParser.isKnown()); - testResult.setStatus(Status.SKIPPED); - updateTestCaseStatus(testResult.getStatus()); - forbidTestCaseStatusChange.set(true); - } else { - testResult.setStatus(Status.BROKEN); - updateTestCaseStatus(testResult.getStatus()); - } - fixtureResult.setStatusDetails(statusDetails); + private void handleStopHookStep(final Result eventResult, + final HookTestStep hook) { + final String containerUuid = hookStepContainerUuid.get(hook); + if (Objects.isNull(containerUuid)) { + // maybe throw an exception? + return; } - lifecycle.updateFixture(uuid, result -> result.setStatus(fixtureResult.getStatus()) - .setStatusDetails(fixtureResult.getStatusDetails())); + final String uuid = fixtureUuids.get(hook); + if (Objects.isNull(uuid)) { + // maybe throw an exception? + return; + } + + final Status status = translateTestCaseStatus(eventResult); + final StatusDetails statusDetails = getStatusDetails(eventResult.getError()) + .orElseGet(StatusDetails::new); + + lifecycle.updateFixture(uuid, result -> result + .setStatus(status) + .setStatusDetails(statusDetails) + ); lifecycle.stopFixture(uuid); + + lifecycle.stopTestContainer(containerUuid); + lifecycle.writeTestContainer(containerUuid); } - private void handlePickleStep(final TestStepFinished event) { + private void handleStopStep(final TestCase testCase, + final Result eventResult, + final TestStep step) { + final String stepUuid = stepUuids.get(step); + if (Objects.isNull(stepUuid)) { + // maybe exception? + return; + } - final Status stepStatus = translateTestCaseStatus(event.result); - final StatusDetails statusDetails; - if (event.result.getStatus() == Result.Type.UNDEFINED) { - updateTestCaseStatus(Status.PASSED); + final Feature feature = testSources.getFeature(testCase.getUri()); - statusDetails = - getStatusDetails(new PendingException("TODO: implement me")) - .orElse(new StatusDetails()); - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), scenarioResult -> - scenarioResult - .setStatusDetails(statusDetails)); - } else { - statusDetails = - getStatusDetails(event.result.getError()) - .orElse(new StatusDetails()); - updateTestCaseStatus(stepStatus); - } + final Status stepStatus = translateTestCaseStatus(eventResult); - if (!Status.PASSED.equals(stepStatus) && stepStatus != null) { - forbidTestCaseStatusChange.set(true); - } + final StatusDetails statusDetails + = eventResult.getStatus() == Result.Type.UNDEFINED + ? new StatusDetails().setMessage("Undefined Step. Please add step definition") + : getStatusDetails(eventResult.getError()) + .orElse(new StatusDetails()); - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); + final TagParser tagParser = new TagParser(feature, testCase); statusDetails .setFlaky(tagParser.isFlaky()) .setMuted(tagParser.isMuted()) .setKnown(tagParser.isKnown()); - lifecycle.updateStep(getStepUuid((PickleStepTestStep) event.testStep), - stepResult -> stepResult.setStatus(stepStatus).setStatusDetails(statusDetails)); - lifecycle.stopStep(getStepUuid((PickleStepTestStep) event.testStep)); - } - - private void updateTestCaseStatus(final Status status) { - if (!forbidTestCaseStatusChange.get()) { - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), - result -> result.setStatus(status)); - } - } - - private String getTestCaseUri(final TestCase testCase) { - final String testCaseUri = testCase.getUri(); - if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) { - return testCaseUri.substring(CUCUMBER_WORKING_DIR.length()); - } - if (testCaseUri.startsWith(CLASSPATH_PREFIX)) { - return testCaseUri.substring(CLASSPATH_PREFIX.length()); - } - if (testCaseUri.startsWith(FILE_PREFIX)) { - return testCaseUri.substring(FILE_PREFIX.length()); - } - return testCaseUri; + lifecycle.updateStep( + stepUuid, + stepResult -> stepResult + .setStatus(stepStatus) + .setStatusDetails(statusDetails) + ); + lifecycle.stopStep(stepUuid); } } diff --git a/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/LabelBuilder.java b/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/LabelBuilder.java index 9958e8e85..a0ed3c28b 100644 --- a/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/LabelBuilder.java +++ b/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/LabelBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/TagParser.java b/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/TagParser.java index dec84aeb5..0c7417c05 100644 --- a/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/TagParser.java +++ b/allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/TagParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/AllureCucumber4JvmTest.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/AllureCucumber4JvmTest.java index b39650faf..9cc09bbfc 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/AllureCucumber4JvmTest.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/AllureCucumber4JvmTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,19 +15,16 @@ */ package io.qameta.allure.cucumber4jvm; -import cucumber.runtime.ClassFinder; import cucumber.runtime.FeaturePathFeatureSupplier; import cucumber.runtime.Runtime; import cucumber.runtime.io.MultiLoader; import cucumber.runtime.io.ResourceLoader; -import cucumber.runtime.io.ResourceLoaderClassFinder; import cucumber.runtime.model.FeatureLoader; import io.cucumber.core.model.FeatureWithLines; import io.cucumber.core.options.CommandlineOptionsParser; import io.cucumber.core.options.RuntimeOptions; import io.github.glytching.junit.extension.system.SystemProperty; import io.github.glytching.junit.extension.system.SystemPropertyExtension; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Step; import io.qameta.allure.model.Attachment; import io.qameta.allure.model.FixtureResult; @@ -39,10 +36,10 @@ import io.qameta.allure.model.StatusDetails; import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; +import io.qameta.allure.model.TestResultContainer; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; -import io.qameta.allure.test.AllureTestCommonsUtils; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.parallel.ResourceLock; @@ -59,6 +56,7 @@ import static io.qameta.allure.util.ResultsUtils.PACKAGE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.SUITE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.TEST_CLASS_LABEL_NAME; +import static io.qameta.allure.util.ResultsUtils.md5; import static java.lang.Thread.currentThread; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; @@ -88,8 +86,10 @@ void shouldSetStatus() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.PASSED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Add a to b", Status.PASSED) + ); } @AllureFeatures.FailedTests @@ -260,7 +260,7 @@ void shouldAddAttachments() { .extracting(Attachment::getName, Attachment::getType) .containsExactlyInAnyOrder( tuple("Text output", "text/plain"), - tuple("Screenshot", null) + tuple("Embedding", "image/png") ); final List attachmentContents = results.getAttachments().values().stream() @@ -283,10 +283,10 @@ void shouldAddBackgroundSteps() { .flatExtracting(TestResult::getSteps) .extracting(StepResult::getName) .containsExactly( - "Given cat is sad", - "And cat is murmur", - "When Pet the cat", - "Then Cat is happy" + "Given cat is sad", + "And cat is murmur", + "When Pet the cat", + "Then Cat is happy" ); } @@ -448,15 +448,17 @@ void shouldProcessUndefinedSteps() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.SKIPPED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Step is not defined", null) + ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is undefined", null), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is undefined", null), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -474,9 +476,9 @@ void shouldProcessPendingExceptionsInSteps() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is yet to be implemented", Status.SKIPPED), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is yet to be implemented", Status.SKIPPED), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -495,10 +497,10 @@ void shouldSupportDryRunForSimpleFeatures() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.SKIPPED), - tuple("And b is 10", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 5", Status.SKIPPED), + tuple("And b is 10", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); } @@ -509,32 +511,29 @@ void shouldSupportDryRunForHooks() { final AllureResults results = runFeature("features/hooks.feature", "--dry-run", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .startsWith( - tuple("Simple scenario with Before and After hooks", Status.SKIPPED) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("HookSteps.beforeHook()", Status.SKIPPED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("HookSteps.afterHook()", Status.SKIPPED) ); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.SKIPPED), - tuple("And b is 8", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 7", Status.SKIPPED), + tuple("And b is 8", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); } @@ -556,7 +555,7 @@ void shouldPersistHistoryIdForExamples() { final List testResults = results.getTestResults(); assertThat(testResults) .extracting(TestResult::getHistoryId) - .containsExactlyInAnyOrder("646aca5d0775cd4f13161e1ea1a68c39", "c0f824814a130048e9f86358363cf23e"); + .containsExactlyInAnyOrder("c0f824814a130048e9f86358363cf23e", "646aca5d0775cd4f13161e1ea1a68c39"); } @AllureFeatures.History @@ -569,6 +568,42 @@ void shouldPersistDifferentHistoryIdComparedToTheSameTestCaseInDifferentLocation .isNotEqualTo(results2.getTestResults().get(0).getHistoryId()); } + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForScenarios() { + final AllureResults results = runFeature("features/simple.feature"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Add a to b", + md5("src/test/resources/features/simple.feature:Add a to b") + ) + ); + } + + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForExamples() { + final AllureResults results = runFeature("features/examples.feature", "--threads", "2"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ), + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ) + ); + } + @AllureFeatures.Parallel @Test void shouldProcessScenariosInParallelMode() { @@ -580,30 +615,33 @@ void shouldProcessScenariosInParallelMode() { .hasSize(3); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 1", - "And b is 3", - "When I add a to b", - "Then result is 4") + "Given a is 1", + "And b is 3", + "When I add a to b", + "Then result is 4" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 2", - "And b is 4", - "When I add a to b", - "Then result is 6") + "Given a is 2", + "And b is 4", + "When I add a to b", + "Then result is 6" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 7", - "And b is 8", - "When I add a to b", - "Then result is 15") + "Given a is 7", + "And b is 8", + "When I add a to b", + "Then result is 15" ); } @@ -614,64 +652,61 @@ void shouldDisplayHooksAsStages() { final AllureResults results = runFeature("features/hooks.feature", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .containsExactlyInAnyOrder( - tuple("Simple scenario with Before and After hooks", Status.PASSED), - tuple("Simple scenario with Before hook with Exception", Status.SKIPPED), - tuple("Simple scenario with After hook with Exception", Status.BROKEN) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); + final TestResult tr2 = results.getTestResultByName("Simple scenario with Before hook with Exception"); + final TestResult tr3 = results.getTestResultByName("Simple scenario with After hook with Exception"); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("HookSteps.beforeHook()", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("HookSteps.afterHook()", Status.PASSED) ); - assertThat(testResults.get(1).getSteps()) + assertThat(tr2.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.SKIPPED), - tuple("And b is 8", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 7", Status.SKIPPED), + tuple("And b is 8", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); - assertThat(results.getTestResultContainers().get(1).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr2)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("HookSteps.beforeHookWithException()", Status.FAILED) ); - - assertThat(testResults.get(2).getSteps()) + assertThat(tr3.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(2).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr3)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("HookSteps.afterHookWithException()", Status.FAILED) @@ -688,19 +723,19 @@ void shouldHandleAmbigiousStepsExceptions() { assertThat(testResults) .extracting(TestResult::getName, TestResult::getStatus) .containsExactlyInAnyOrder( - tuple("Simple scenario with ambigious steps", Status.SKIPPED) + tuple("Simple scenario with ambigious steps", null) ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactly( - tuple("When ambigious step present", null), - tuple("Then something bad should happen", Status.SKIPPED) + tuple("When ambigious step present", null), + tuple("Then something bad should happen", Status.SKIPPED) ); } @ResourceLock(value = SYSTEM_PROPERTIES, mode = READ_WRITE) - @SystemProperty(name = "allure.label.x-provided", value = "cucumberjvm4-test-provided") + @SystemProperty(name = "allure.label.x-provided", value = "cucumberjvm5-test-provided") @Test void shouldSupportProvidedLabels() { final AllureResults results = runFeature("features/simple.feature"); @@ -711,7 +746,37 @@ void shouldSupportProvidedLabels() { .flatExtracting(TestResult::getLabels) .extracting(Label::getName, Label::getValue) .contains( - tuple("x-provided", "cucumberjvm4-test-provided") + tuple("x-provided", "cucumberjvm5-test-provided") + ); + } + + @Test + void shouldSupportRuntimeApiInStepsWhenHooksAreUsed() { + final AllureResults results = runFeature("features/runtimeapi.feature"); + + final List testResults = results.getTestResults(); + + assertThat(testResults) + .hasSize(1) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) + .containsExactly( + "When step 1", + "When step 2", + "And step 3", + "Then step 4", + "And step 5" + ); + + assertThat(testResults) + .flatExtracting(TestResult::getLinks) + .extracting(Link::getName, Link::getUrl) + .containsExactly( + tuple("step1", "https://example.org/step1"), + tuple("step2", "https://example.org/step2"), + tuple("step3", "https://example.org/step3"), + tuple("step4", "https://example.org/step4"), + tuple("step5", "https://example.org/step5") ); } @@ -719,38 +784,31 @@ void shouldSupportProvidedLabels() { @Step private AllureResults runFeature(final String featureResource, final String... moreOptions) { - - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - - final AllureLifecycle lifecycle = new AllureLifecycle(writer); - final AllureCucumber4Jvm cucumber4Jvm = new AllureCucumber4Jvm(lifecycle); - final ClassLoader classLoader = currentThread().getContextClassLoader(); - final ResourceLoader resourceLoader = new MultiLoader(classLoader); - final ClassFinder classFinder = new ResourceLoaderClassFinder(resourceLoader, classLoader); - final List opts = new ArrayList<>(Arrays.asList( - "--glue", "io.qameta.allure.cucumber4jvm.samples", - "--plugin", "null_summary" - )); - opts.addAll(Arrays.asList(moreOptions)); - final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); - final RuntimeOptions options = new CommandlineOptionsParser() - .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); - - final FeaturePathFeatureSupplier supplier - = new FeaturePathFeatureSupplier(new FeatureLoader(resourceLoader), options); - - final Runtime runtime = Runtime.builder() - .withClassLoader(classLoader) - .withRuntimeOptions(options) - .withAdditionalPlugins(cucumber4Jvm) - .withFeatureSupplier(supplier) - .build(); - - runtime.run(); - - AllureTestCommonsUtils.attach(writer); - - return writer; + return RunUtils.runTests(lifecycle -> { + final AllureCucumber4Jvm cucumber4Jvm = new AllureCucumber4Jvm(lifecycle); + final ClassLoader classLoader = currentThread().getContextClassLoader(); + final ResourceLoader resourceLoader = new MultiLoader(classLoader); + final List opts = new ArrayList<>(Arrays.asList( + "--glue", "io.qameta.allure.cucumber4jvm.samples", + "--plugin", "null_summary" + )); + opts.addAll(Arrays.asList(moreOptions)); + final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); + final RuntimeOptions options = new CommandlineOptionsParser() + .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); + + final FeaturePathFeatureSupplier supplier + = new FeaturePathFeatureSupplier(new FeatureLoader(resourceLoader), options); + + final Runtime runtime = Runtime.builder() + .withClassLoader(classLoader) + .withRuntimeOptions(options) + .withAdditionalPlugins(cucumber4Jvm) + .withFeatureSupplier(supplier) + .build(); + + runtime.run(); + }); } diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AmbigiousSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AmbigiousSteps.java index 3f76659a8..2b43b9ea8 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AmbigiousSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AmbigiousSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AttachmentSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AttachmentSteps.java index e72223093..c0308b3f3 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AttachmentSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/AttachmentSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BackgroundFeatureSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BackgroundFeatureSteps.java index b2ff7f6e6..b39835696 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BackgroundFeatureSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BackgroundFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BrokenFeatureSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BrokenFeatureSteps.java index 7ff508ab6..53e0895c5 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BrokenFeatureSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/BrokenFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/DatatableFeatureSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/DatatableFeatureSteps.java index d903702e6..4faa730ab 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/DatatableFeatureSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/DatatableFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/HookSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/HookSteps.java index ee2d6a5b6..68aa59fd7 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/HookSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/HookSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/PendingSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/PendingSteps.java index c1ab1b965..7d122c577 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/PendingSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/PendingSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/RuntimeApiSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/RuntimeApiSteps.java new file mode 100644 index 000000000..41bd4bfa6 --- /dev/null +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/RuntimeApiSteps.java @@ -0,0 +1,83 @@ +/* + * Copyright 2016-2024 Qameta Software Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.qameta.allure.cucumber4jvm.samples; + +import io.cucumber.java.Before; +import io.cucumber.java.en.And; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import io.qameta.allure.Allure; + +/** + * @author charlie (Dmitry Baev). + */ +public class RuntimeApiSteps { + + @Before("@beforeScenario") + public void beforeScenario(){ + // nothing + } + + @Before("@beforeFeature") + public void beforeFeature(){ + // nothing + } + + @When("^step 1$") + public void step1() { + Allure.step("step1 nested"); + Allure.link("step1", "https://example.org/step1"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step1: " + uuid); + }); + } + + @When("^step 2$") + public void step2() { + Allure.step("step2 nested"); + Allure.link("step2", "https://example.org/step2"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step2: " + uuid); + }); + } + + @And("^step 3$") + public void step3() { + Allure.step("step3 nested"); + Allure.link("step3", "https://example.org/step3"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step3: " + uuid); + }); + } + + @Then("^step 4$") + public void step4() { + Allure.step("step4 nested"); + Allure.link("step4", "https://example.org/step4"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step4: " + uuid); + }); + } + + @And("^step 5$") + public void step5() { + Allure.step("step5 nested"); + Allure.link("step5", "https://example.org/step5"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step5: " + uuid); + }); + } +} diff --git a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/SimpleFeatureSteps.java b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/SimpleFeatureSteps.java index 44e64a45f..f2baf281a 100644 --- a/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/SimpleFeatureSteps.java +++ b/allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/samples/SimpleFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber4-jvm/src/test/resources/features/runtimeapi.feature b/allure-cucumber4-jvm/src/test/resources/features/runtimeapi.feature new file mode 100644 index 000000000..ec43eccb7 --- /dev/null +++ b/allure-cucumber4-jvm/src/test/resources/features/runtimeapi.feature @@ -0,0 +1,10 @@ +@beforeFeature +Feature: Should support runtime API in all steps + + @beforeScenario + Scenario: Scenario with Runtime API usage + When step 1 + When step 2 + And step 3 + Then step 4 + And step 5 diff --git a/allure-cucumber5-jvm/build.gradle.kts b/allure-cucumber5-jvm/build.gradle.kts index e39b579e4..0bb513d73 100644 --- a/allure-cucumber5-jvm/build.gradle.kts +++ b/allure-cucumber5-jvm/build.gradle.kts @@ -15,7 +15,9 @@ dependencies { testImplementation("org.assertj:assertj-core") testImplementation("org.junit.jupiter:junit-jupiter-api") testImplementation("org.slf4j:slf4j-simple") + testImplementation(project(":allure-assertj")) testImplementation(project(":allure-java-commons-test")) + testImplementation(project(":allure-junit-platform")) testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") } diff --git a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/AllureCucumber5Jvm.java b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/AllureCucumber5Jvm.java index f89c338d0..546838100 100644 --- a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/AllureCucumber5Jvm.java +++ b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/AllureCucumber5Jvm.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,11 +29,13 @@ import io.cucumber.plugin.event.HookType; import io.cucumber.plugin.event.PickleStepTestStep; import io.cucumber.plugin.event.Result; +import io.cucumber.plugin.event.Step; import io.cucumber.plugin.event.StepArgument; import io.cucumber.plugin.event.TestCase; import io.cucumber.plugin.event.TestCaseFinished; import io.cucumber.plugin.event.TestCaseStarted; import io.cucumber.plugin.event.TestSourceRead; +import io.cucumber.plugin.event.TestStep; import io.cucumber.plugin.event.TestStepFinished; import io.cucumber.plugin.event.TestStepStarted; import io.cucumber.plugin.event.WriteEvent; @@ -49,13 +51,13 @@ import io.qameta.allure.model.TestResultContainer; import java.io.ByteArrayInputStream; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.util.Collections; import java.util.Deque; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -80,17 +82,12 @@ }) public class AllureCucumber5Jvm implements ConcurrentEventListener { + private static final String COLON = ":"; + private final AllureLifecycle lifecycle; - private final ConcurrentHashMap scenarioUuids = new ConcurrentHashMap<>(); private final TestSourcesModelProxy testSources = new TestSourcesModelProxy(); - private final ThreadLocal currentFeature = new InheritableThreadLocal<>(); - private final ThreadLocal currentFeatureFile = new InheritableThreadLocal<>(); - private final ThreadLocal currentTestCase = new InheritableThreadLocal<>(); - private final ThreadLocal currentContainer = new InheritableThreadLocal<>(); - private final ThreadLocal forbidTestCaseStatusChange = new InheritableThreadLocal<>(); - private final EventHandler featureStartedHandler = this::handleFeatureStartedHandler; private final EventHandler caseStartedHandler = this::handleTestCaseStarted; private final EventHandler caseFinishedHandler = this::handleTestCaseFinished; @@ -99,6 +96,10 @@ public class AllureCucumber5Jvm implements ConcurrentEventListener { private final EventHandler writeEventHandler = this::handleWriteEvent; private final EventHandler embedEventHandler = this::handleEmbedEvent; + private final Map hookStepContainerUuid = new ConcurrentHashMap<>(); + private final Map stepUuids = new ConcurrentHashMap<>(); + private final Map fixtureUuids = new ConcurrentHashMap<>(); + private static final String TXT_EXTENSION = ".txt"; private static final String TEXT_PLAIN = "text/plain"; private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().getSchemeSpecificPart(); @@ -112,9 +113,6 @@ public AllureCucumber5Jvm(final AllureLifecycle lifecycle) { this.lifecycle = lifecycle; } - /* - Event Handlers - */ @Override public void setEventPublisher(final EventPublisher publisher) { publisher.registerHandlerFor(TestSourceRead.class, featureStartedHandler); @@ -134,30 +132,40 @@ private void handleFeatureStartedHandler(final TestSourceRead event) { } private void handleTestCaseStarted(final TestCaseStarted event) { - currentFeatureFile.set(event.getTestCase().getUri()); - currentFeature.set(testSources.getFeature(currentFeatureFile.get())); - currentTestCase.set(event.getTestCase()); - currentContainer.set(UUID.randomUUID().toString()); - forbidTestCaseStatusChange.set(false); + final TestCase testCase = event.getTestCase(); + final Feature feature = testSources.getFeature(testCase.getUri()); - final TestCase testCase = currentTestCase.get(); final Deque tags = new LinkedList<>(testCase.getTags()); - - final Feature feature = currentFeature.get(); final LabelBuilder labelBuilder = new LabelBuilder(feature, testCase, tags); final String name = testCase.getName(); + + // the same way full name is generated for + // org.junit.platform.engine.support.descriptor.ClasspathResourceSource + // to support io.qameta.allure.junitplatform.AllurePostDiscoveryFilter + final String fullName = String.format("%s:%d", + getTestCaseUri(testCase), + testCase.getLine() + ); + + final String testCaseUuid = testCase.getId().toString(); + final TestResult result = new TestResult() - .setUuid(getTestCaseUuid(testCase)) + .setUuid(testCaseUuid) + .setTestCaseId(getTestCaseId(testCase)) .setHistoryId(getHistoryId(testCase)) - .setFullName(getTestCaseUri(testCase) + ":" + testCase.getLine()) + .setFullName(fullName) .setName(name) .setLabels(labelBuilder.getScenarioLabels()) .setLinks(labelBuilder.getScenarioLinks()); final ScenarioDefinition scenarioDefinition = - testSources.getScenarioDefinition(currentFeatureFile.get(), testCase.getLine()); + testSources.getScenarioDefinition( + testCase.getUri(), + testCase.getLine() + ); + if (scenarioDefinition instanceof ScenarioOutline) { result.setParameters( getExamplesAsParameters((ScenarioOutline) scenarioDefinition, testCase) @@ -173,75 +181,131 @@ private void handleTestCaseStarted(final TestCaseStarted event) { result.setDescription(description); } - final TestResultContainer resultContainer = new TestResultContainer() - .setName(String.format("%s: %s", scenarioDefinition.getKeyword(), scenarioDefinition.getName())) - .setUuid(getTestContainerUuid()) - .setChildren(Collections.singletonList(getTestCaseUuid(testCase))); - lifecycle.scheduleTestCase(result); - lifecycle.startTestContainer(getTestContainerUuid(), resultContainer); - lifecycle.startTestCase(getTestCaseUuid(testCase)); + lifecycle.startTestCase(testCaseUuid); } private void handleTestCaseFinished(final TestCaseFinished event) { + final TestCase testCase = event.getTestCase(); + final Feature feature = testSources.getFeature(testCase.getUri()); + final String uuid = testCase.getId().toString(); + final Result result = event.getResult(); + final Status status = translateTestCaseStatus(result); + final StatusDetails statusDetails = getStatusDetails(result.getError()) + .orElseGet(StatusDetails::new); + + final TagParser tagParser = new TagParser(feature, testCase); + statusDetails + .setFlaky(tagParser.isFlaky()) + .setMuted(tagParser.isMuted()) + .setKnown(tagParser.isKnown()); + + lifecycle.updateTestCase(uuid, testResult -> testResult + .setStatus(status) + .setStatusDetails(statusDetails) + ); - final String uuid = getTestCaseUuid(event.getTestCase()); - final Optional details = getStatusDetails(event.getResult().getError()); - details.ifPresent(statusDetails -> lifecycle.updateTestCase( - uuid, - testResult -> testResult.setStatusDetails(statusDetails) - )); lifecycle.stopTestCase(uuid); - lifecycle.stopTestContainer(getTestContainerUuid()); lifecycle.writeTestCase(uuid); - lifecycle.writeTestContainer(getTestContainerUuid()); } private void handleTestStepStarted(final TestStepStarted event) { - if (event.getTestStep() instanceof PickleStepTestStep) { - final PickleStepTestStep pickleStep = (PickleStepTestStep) event.getTestStep(); - final String stepKeyword = Optional.ofNullable( - testSources.getKeywordFromSource(currentFeatureFile.get(), pickleStep.getStep().getLine()) - ).orElse("UNDEFINED"); - - final StepResult stepResult = new StepResult() - .setName(String.format("%s %s", stepKeyword, pickleStep.getStep().getText())) - .setStart(System.currentTimeMillis()); - - lifecycle.startStep(getTestCaseUuid(currentTestCase.get()), getStepUuid(pickleStep), stepResult); + final TestCase testCase = event.getTestCase(); + if (event.getTestStep() instanceof HookTestStep) { + final HookTestStep hook = (HookTestStep) event.getTestStep(); - final StepArgument stepArgument = pickleStep.getStep().getArgument(); - if (stepArgument instanceof DataTableArgument) { - final DataTableArgument dataTableArgument = (DataTableArgument) stepArgument; - createDataTableAttachment(dataTableArgument); + if (isFixtureHook(hook)) { + handleStartFixtureHook(testCase, hook); + } else { + handleStartStepHook(testCase, hook); } - } else if (event.getTestStep() instanceof HookTestStep) { - initHook((HookTestStep) event.getTestStep()); + } else if (event.getTestStep() instanceof PickleStepTestStep) { + handleStartPickleStep(testCase, (PickleStepTestStep) event.getTestStep()); } } - private void initHook(final HookTestStep hook) { + private void handleStartPickleStep(final TestCase testCase, + final PickleStepTestStep pickleStep) { + final String uuid = testCase.getId().toString(); + final Step step = pickleStep.getStep(); - final FixtureResult hookResult = new FixtureResult() + final StepResult stepResult = new StepResult() + .setName(step.getKeyWord() + step.getText()) + .setStart(System.currentTimeMillis()); + + final String stepUuid = stepUuids.computeIfAbsent( + pickleStep, + cl -> UUID.randomUUID().toString() + ); + + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, stepUuid, stepResult); + + final StepArgument stepArgument = step.getArgument(); + if (stepArgument instanceof DataTableArgument) { + final DataTableArgument dataTableArgument = (DataTableArgument) stepArgument; + createDataTableAttachment(dataTableArgument); + } + } + + private void handleStartStepHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCase.getId().toString(); + final StepResult stepResult = new StepResult() .setName(hook.getCodeLocation()) .setStart(System.currentTimeMillis()); + final String stepUuid = stepUuids.computeIfAbsent( + hook, unused -> UUID.randomUUID().toString() + ); + + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, stepUuid, stepResult); + } + + private void handleStartFixtureHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCase.getId().toString(); + + final String containerUuid = hookStepContainerUuid + .computeIfAbsent(hook, unused -> UUID.randomUUID().toString()); + + lifecycle.startTestContainer(new TestResultContainer() + .setUuid(containerUuid) + .setChildren(Collections.singletonList(uuid)) + ); + + final FixtureResult hookResult = new FixtureResult() + .setName(hook.getCodeLocation()); + + final String fixtureUuid = fixtureUuids.computeIfAbsent( + hook, unused -> UUID.randomUUID().toString() + ); if (hook.getHookType() == HookType.BEFORE) { - lifecycle.startPrepareFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); + lifecycle.startPrepareFixture(containerUuid, fixtureUuid, hookResult); } else { - lifecycle.startTearDownFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); + lifecycle.startTearDownFixture(containerUuid, fixtureUuid, hookResult); } - } private void handleTestStepFinished(final TestStepFinished event) { if (event.getTestStep() instanceof HookTestStep) { - handleHookStep(event); - } else { - handlePickleStep(event); + final HookTestStep hook = (HookTestStep) event.getTestStep(); + if (isFixtureHook(hook)) { + handleStopHookStep(event.getResult(), hook); + } else { + handleStopStep(event.getTestCase(), event.getResult(), hook); + } + } else if (event.getTestStep() instanceof PickleStepTestStep) { + final PickleStepTestStep pickleStep = (PickleStepTestStep) event.getTestStep(); + handleStopStep(event.getTestCase(), event.getResult(), pickleStep); } } + private static boolean isFixtureHook(final HookTestStep hook) { + return hook.getHookType() == HookType.BEFORE || hook.getHookType() == HookType.AFTER; + } + private void handleWriteEvent(final WriteEvent event) { lifecycle.addAttachment( "Text output", @@ -252,36 +316,19 @@ private void handleWriteEvent(final WriteEvent event) { } private void handleEmbedEvent(final EmbedEvent event) { - lifecycle.addAttachment("Screenshot", null, null, new ByteArrayInputStream(event.getData())); - } - - /* - Utility Methods - */ - - private String getTestContainerUuid() { - return currentContainer.get(); - } - - private String getTestCaseUuid(final TestCase testCase) { - return scenarioUuids.computeIfAbsent(getHistoryId(testCase), it -> UUID.randomUUID().toString()); - } - - private String getStepUuid(final PickleStepTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getStep().getText() + step.getStep().getLine(); - } - - private String getHookStepUuid(final HookTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getHookType().toString() + step.getCodeLocation(); + lifecycle.addAttachment(event.name, event.getMediaType(), null, new ByteArrayInputStream(event.getData())); } private String getHistoryId(final TestCase testCase) { - final String testCaseLocation = getTestCaseUri(testCase) + ":" + testCase.getLine(); + final String testCaseLocation = getTestCaseUri(testCase) + COLON + testCase.getLine(); return md5(testCaseLocation); } + private String getTestCaseId(final TestCase testCase) { + final String testCaseId = getTestCaseUri(testCase) + COLON + testCase.getName(); + return md5(testCaseId); + } + private String getTestCaseUri(final TestCase testCase) { final String testCaseUri = testCase.getUri().getSchemeSpecificPart(); if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) { @@ -308,26 +355,39 @@ private Status translateTestCaseStatus(final Result testCaseResult) { } private List getExamplesAsParameters( - final ScenarioOutline scenarioOutline, final TestCase localCurrentTestCase - ) { - final Optional examplesBlock = - scenarioOutline.getExamples().stream() + final ScenarioOutline scenario, + final TestCase localCurrentTestCase) { + final Optional maybeExample = + scenario.getExamples().stream() .filter(example -> example.getTableBody().stream() - .anyMatch(row -> row.getLocation().getLine() == localCurrentTestCase.getLine()) - ).findFirst(); - - if (examplesBlock.isPresent()) { - final TableRow row = examplesBlock.get().getTableBody().stream() - .filter(example -> example.getLocation().getLine() == localCurrentTestCase.getLine()) - .findFirst().get(); - return IntStream.range(0, examplesBlock.get().getTableHeader().getCells().size()).mapToObj(index -> { - final String name = examplesBlock.get().getTableHeader().getCells().get(index).getValue(); - final String value = row.getCells().get(index).getValue(); - return createParameter(name, value); - }).collect(Collectors.toList()); - } else { + .anyMatch(row -> row.getLocation().getLine() + == localCurrentTestCase.getLine()) + ) + .findFirst(); + + if (!maybeExample.isPresent()) { return Collections.emptyList(); } + + final Examples examples = maybeExample.get(); + + final Optional maybeRow = examples.getTableBody().stream() + .filter(example -> example.getLocation().getLine() == localCurrentTestCase.getLine()) + .findFirst(); + + if (!maybeRow.isPresent()) { + return Collections.emptyList(); + } + + final TableRow row = maybeRow.get(); + + return IntStream.range(0, examples.getTableHeader().getCells().size()) + .mapToObj(index -> { + final String name = examples.getTableHeader().getCells().get(index).getValue(); + final String value = row.getCells().get(index).getValue(); + return createParameter(name, value); + }) + .collect(Collectors.toList()); } private void createDataTableAttachment(final DataTableArgument dataTableArgument) { @@ -352,83 +412,65 @@ private void createDataTableAttachment(final DataTableArgument dataTableArgument new ByteArrayInputStream(dataTableCsv.toString().getBytes(StandardCharsets.UTF_8))); } - private void handleHookStep(final TestStepFinished event) { - final HookTestStep hookStep = (HookTestStep) event.getTestStep(); - final String uuid = getHookStepUuid(hookStep); - final FixtureResult fixtureResult = new FixtureResult().setStatus(translateTestCaseStatus(event.getResult())); - - if (!Status.PASSED.equals(fixtureResult.getStatus())) { - final TestResult testResult = new TestResult().setStatus(translateTestCaseStatus(event.getResult())); - final StatusDetails statusDetails = getStatusDetails(event.getResult().getError()) - .orElseGet(StatusDetails::new); - - final String errorMessage = event.getResult().getError() == null - ? hookStep.getHookType().name() + " is failed." - : hookStep.getHookType().name() + " is failed: " - + event.getResult().getError().getLocalizedMessage(); - - statusDetails.setMessage(errorMessage); - - if (hookStep.getHookType() == HookType.BEFORE) { - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); - statusDetails - .setFlaky(tagParser.isFlaky()) - .setMuted(tagParser.isMuted()) - .setKnown(tagParser.isKnown()); - testResult.setStatus(Status.SKIPPED); - updateTestCaseStatus(testResult.getStatus()); - forbidTestCaseStatusChange.set(true); - } else { - testResult.setStatus(Status.BROKEN); - updateTestCaseStatus(testResult.getStatus()); - } - fixtureResult.setStatusDetails(statusDetails); + private void handleStopHookStep(final Result eventResult, + final HookTestStep hook) { + final String containerUuid = hookStepContainerUuid.get(hook); + if (Objects.isNull(containerUuid)) { + // maybe throw an exception? + return; } - lifecycle.updateFixture(uuid, result -> result.setStatus(fixtureResult.getStatus()) - .setStatusDetails(fixtureResult.getStatusDetails())); + final String uuid = fixtureUuids.get(hook); + if (Objects.isNull(uuid)) { + // maybe throw an exception? + return; + } + + final Status status = translateTestCaseStatus(eventResult); + final StatusDetails statusDetails = getStatusDetails(eventResult.getError()) + .orElseGet(StatusDetails::new); + + lifecycle.updateFixture(uuid, result -> result + .setStatus(status) + .setStatusDetails(statusDetails) + ); lifecycle.stopFixture(uuid); + + lifecycle.stopTestContainer(containerUuid); + lifecycle.writeTestContainer(containerUuid); } - private void handlePickleStep(final TestStepFinished event) { + private void handleStopStep(final TestCase testCase, + final Result eventResult, + final TestStep step) { + final String stepUuid = stepUuids.get(step); + if (Objects.isNull(stepUuid)) { + // maybe exception? + return; + } - final Status stepStatus = translateTestCaseStatus(event.getResult()); - final StatusDetails statusDetails; - if (event.getResult().getStatus() == io.cucumber.plugin.event.Status.UNDEFINED) { - updateTestCaseStatus(Status.PASSED); + final Feature feature = testSources.getFeature(testCase.getUri()); - statusDetails = - getStatusDetails(new IllegalStateException("Undefined Step. Please add step definition")) - .orElse(new StatusDetails()); - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), scenarioResult -> - scenarioResult - .setStatusDetails(statusDetails)); - } else { - statusDetails = - getStatusDetails(event.getResult().getError()) - .orElse(new StatusDetails()); - updateTestCaseStatus(stepStatus); - } + final Status stepStatus = translateTestCaseStatus(eventResult); - if (!Status.PASSED.equals(stepStatus) && stepStatus != null) { - forbidTestCaseStatusChange.set(true); - } + final StatusDetails statusDetails + = eventResult.getStatus() == io.cucumber.plugin.event.Status.UNDEFINED + ? new StatusDetails().setMessage("Undefined Step. Please add step definition") + : getStatusDetails(eventResult.getError()) + .orElse(new StatusDetails()); - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); + final TagParser tagParser = new TagParser(feature, testCase); statusDetails .setFlaky(tagParser.isFlaky()) .setMuted(tagParser.isMuted()) .setKnown(tagParser.isKnown()); - lifecycle.updateStep(getStepUuid((PickleStepTestStep) event.getTestStep()), - stepResult -> stepResult.setStatus(stepStatus).setStatusDetails(statusDetails)); - lifecycle.stopStep(getStepUuid((PickleStepTestStep) event.getTestStep())); - } - - private void updateTestCaseStatus(final Status status) { - if (!forbidTestCaseStatusChange.get()) { - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), - result -> result.setStatus(status)); - } + lifecycle.updateStep( + stepUuid, + stepResult -> stepResult + .setStatus(stepStatus) + .setStatusDetails(statusDetails) + ); + lifecycle.stopStep(stepUuid); } } diff --git a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/LabelBuilder.java b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/LabelBuilder.java index ba18430d3..645487621 100644 --- a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/LabelBuilder.java +++ b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/LabelBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/TagParser.java b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/TagParser.java index a6e5724b7..211939586 100644 --- a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/TagParser.java +++ b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/TagParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModel.java b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModel.java index 6ffda30d3..2b3909c62 100644 --- a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModel.java +++ b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModel.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModelProxy.java b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModelProxy.java index 46937911c..0e459841e 100644 --- a/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModelProxy.java +++ b/allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/testsourcemodel/TestSourcesModelProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/AllureCucumber5JvmTest.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/AllureCucumber5JvmTest.java index 64391b3d4..f4de28513 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/AllureCucumber5JvmTest.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/AllureCucumber5JvmTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ import io.cucumber.core.runtime.TimeServiceEventBus; import io.github.glytching.junit.extension.system.SystemProperty; import io.github.glytching.junit.extension.system.SystemPropertyExtension; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Step; import io.qameta.allure.model.Attachment; import io.qameta.allure.model.FixtureResult; @@ -38,10 +37,10 @@ import io.qameta.allure.model.StatusDetails; import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; +import io.qameta.allure.model.TestResultContainer; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; -import io.qameta.allure.test.AllureTestCommonsUtils; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.parallel.ResourceLock; @@ -61,6 +60,7 @@ import static io.qameta.allure.util.ResultsUtils.PACKAGE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.SUITE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.TEST_CLASS_LABEL_NAME; +import static io.qameta.allure.util.ResultsUtils.md5; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.junit.jupiter.api.parallel.ResourceAccessMode.READ_WRITE; @@ -89,8 +89,10 @@ void shouldSetStatus() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.PASSED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Add a to b", Status.PASSED) + ); } @AllureFeatures.FailedTests @@ -261,7 +263,7 @@ void shouldAddAttachments() { .extracting(Attachment::getName, Attachment::getType) .containsExactlyInAnyOrder( tuple("Text output", "text/plain"), - tuple("Screenshot", null) + tuple("ImageAttachment", "image/png") ); final List attachmentContents = results.getAttachments().values().stream() @@ -284,10 +286,10 @@ void shouldAddBackgroundSteps() { .flatExtracting(TestResult::getSteps) .extracting(StepResult::getName) .containsExactly( - "Given cat is sad", - "And cat is murmur", - "When Pet the cat", - "Then Cat is happy" + "Given cat is sad", + "And cat is murmur", + "When Pet the cat", + "Then Cat is happy" ); } @@ -449,15 +451,17 @@ void shouldProcessUndefinedSteps() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.SKIPPED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Step is not defined", null) + ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is undefined", null), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is undefined", null), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -475,9 +479,9 @@ void shouldProcessPendingExceptionsInSteps() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is yet to be implemented", Status.SKIPPED), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is yet to be implemented", Status.SKIPPED), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -496,10 +500,10 @@ void shouldSupportDryRunForSimpleFeatures() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.SKIPPED), - tuple("And b is 10", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 5", Status.SKIPPED), + tuple("And b is 10", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); } @@ -510,32 +514,29 @@ void shouldSupportDryRunForHooks() { final AllureResults results = runFeature("features/hooks.feature", "--dry-run", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .startsWith( - tuple("Simple scenario with Before and After hooks", Status.SKIPPED) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber5jvm.samples.HookSteps.beforeHook()", Status.SKIPPED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber5jvm.samples.HookSteps.afterHook()", Status.SKIPPED) ); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.SKIPPED), - tuple("And b is 8", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 7", Status.SKIPPED), + tuple("And b is 8", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); } @@ -570,6 +571,42 @@ void shouldPersistDifferentHistoryIdComparedToTheSameTestCaseInDifferentLocation .isNotEqualTo(results2.getTestResults().get(0).getHistoryId()); } + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForScenarios() { + final AllureResults results = runFeature("features/simple.feature"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Add a to b", + md5("src/test/resources/features/simple.feature:Add a to b") + ) + ); + } + + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForExamples() { + final AllureResults results = runFeature("features/examples.feature", "--threads", "2"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ), + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ) + ); + } + @AllureFeatures.Parallel @Test void shouldProcessScenariosInParallelMode() { @@ -581,30 +618,33 @@ void shouldProcessScenariosInParallelMode() { .hasSize(3); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 1", - "And b is 3", - "When I add a to b", - "Then result is 4") + "Given a is 1", + "And b is 3", + "When I add a to b", + "Then result is 4" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 2", - "And b is 4", - "When I add a to b", - "Then result is 6") + "Given a is 2", + "And b is 4", + "When I add a to b", + "Then result is 6" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 7", - "And b is 8", - "When I add a to b", - "Then result is 15") + "Given a is 7", + "And b is 8", + "When I add a to b", + "Then result is 15" ); } @@ -615,64 +655,61 @@ void shouldDisplayHooksAsStages() { final AllureResults results = runFeature("features/hooks.feature", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .containsExactlyInAnyOrder( - tuple("Simple scenario with Before and After hooks", Status.PASSED), - tuple("Simple scenario with Before hook with Exception", Status.SKIPPED), - tuple("Simple scenario with After hook with Exception", Status.BROKEN) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); + final TestResult tr2 = results.getTestResultByName("Simple scenario with Before hook with Exception"); + final TestResult tr3 = results.getTestResultByName("Simple scenario with After hook with Exception"); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber5jvm.samples.HookSteps.beforeHook()", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber5jvm.samples.HookSteps.afterHook()", Status.PASSED) ); - assertThat(testResults.get(1).getSteps()) + assertThat(tr2.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.SKIPPED), - tuple("And b is 8", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 7", Status.SKIPPED), + tuple("And b is 8", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); - assertThat(results.getTestResultContainers().get(1).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr2)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber5jvm.samples.HookSteps.beforeHookWithException()", Status.FAILED) ); - - assertThat(testResults.get(2).getSteps()) + assertThat(tr3.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(2).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr3)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber5jvm.samples.HookSteps.afterHookWithException()", Status.FAILED) @@ -689,14 +726,14 @@ void shouldHandleAmbigiousStepsExceptions() { assertThat(testResults) .extracting(TestResult::getName, TestResult::getStatus) .containsExactlyInAnyOrder( - tuple("Simple scenario with ambigious steps", Status.SKIPPED) + tuple("Simple scenario with ambigious steps", null) ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactly( - tuple("When ambigious step present", null), - tuple("Then something bad should happen", Status.SKIPPED) + tuple("When ambigious step present", null), + tuple("Then something bad should happen", Status.SKIPPED) ); } @@ -716,42 +753,66 @@ void shouldSupportProvidedLabels() { ); } + @Test + void shouldSupportRuntimeApiInStepsWhenHooksAreUsed() { + final AllureResults results = runFeature("features/runtimeapi.feature"); + + final List testResults = results.getTestResults(); + + assertThat(testResults) + .hasSize(1) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) + .containsExactly( + "When step 1", + "When step 2", + "And step 3", + "Then step 4", + "And step 5" + ); + + assertThat(testResults) + .flatExtracting(TestResult::getLinks) + .extracting(Link::getName, Link::getUrl) + .containsExactly( + tuple("step1", "https://example.org/step1"), + tuple("step2", "https://example.org/step2"), + tuple("step3", "https://example.org/step3"), + tuple("step4", "https://example.org/step4"), + tuple("step5", "https://example.org/step5") + ); + } + @SystemProperty(name = "cucumber.junit-platform.naming-strategy", value = "long") @Step private AllureResults runFeature(final String featureResource, final String... moreOptions) { - - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - - final AllureLifecycle lifecycle = new AllureLifecycle(writer); - final AllureCucumber5Jvm cucumber5jvm = new AllureCucumber5Jvm(lifecycle); - final Supplier classLoader = ClassLoaders::getDefaultClassLoader; - final List opts = new ArrayList<>(Arrays.asList( - "--glue", "io.qameta.allure.cucumber5jvm.samples", - "--plugin", "null_summary" - )); - opts.addAll(Arrays.asList(moreOptions)); - final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); - final RuntimeOptions options = new CommandlineOptionsParser() - .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); - - final EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID); - final FeatureParser parser = new FeatureParser(bus::generateId); - final FeaturePathFeatureSupplier supplier - = new FeaturePathFeatureSupplier(classLoader, options, parser); - - final Runtime runtime = Runtime.builder() - .withClassLoader(classLoader) - .withRuntimeOptions(options) - .withAdditionalPlugins(cucumber5jvm) - .withFeatureSupplier(supplier) - .build(); - - runtime.run(); - - AllureTestCommonsUtils.attach(writer); - - return writer; + return RunUtils.runTests(lifecycle -> { + final AllureCucumber5Jvm cucumber5jvm = new AllureCucumber5Jvm(lifecycle); + final Supplier classLoader = ClassLoaders::getDefaultClassLoader; + final List opts = new ArrayList<>(Arrays.asList( + "--glue", "io.qameta.allure.cucumber5jvm.samples", + "--plugin", "null_summary" + )); + opts.addAll(Arrays.asList(moreOptions)); + final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); + final RuntimeOptions options = new CommandlineOptionsParser() + .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); + + final EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID); + final FeatureParser parser = new FeatureParser(bus::generateId); + final FeaturePathFeatureSupplier supplier + = new FeaturePathFeatureSupplier(classLoader, options, parser); + + final Runtime runtime = Runtime.builder() + .withClassLoader(classLoader) + .withRuntimeOptions(options) + .withAdditionalPlugins(cucumber5jvm) + .withFeatureSupplier(supplier) + .build(); + + runtime.run(); + }); } diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AmbigiousSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AmbigiousSteps.java index bf219907f..f2a15b537 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AmbigiousSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AmbigiousSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AttachmentSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AttachmentSteps.java index e3a335a9e..8439cb453 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AttachmentSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/AttachmentSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BackgroundFeatureSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BackgroundFeatureSteps.java index 5f9177674..135a0bb19 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BackgroundFeatureSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BackgroundFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BrokenFeatureSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BrokenFeatureSteps.java index 6a78e6bf9..d9ee5ce1a 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BrokenFeatureSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/BrokenFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/DatatableFeatureSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/DatatableFeatureSteps.java index a75c68849..10ecd8bc9 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/DatatableFeatureSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/DatatableFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/HookSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/HookSteps.java index 00f96ebc3..857683726 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/HookSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/HookSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/PendingSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/PendingSteps.java index 29ee3cbf4..52a8da1a5 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/PendingSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/PendingSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/RuntimeApiSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/RuntimeApiSteps.java new file mode 100644 index 000000000..20c73a7fa --- /dev/null +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/RuntimeApiSteps.java @@ -0,0 +1,83 @@ +/* + * Copyright 2016-2024 Qameta Software Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.qameta.allure.cucumber5jvm.samples; + +import io.cucumber.java.Before; +import io.cucumber.java.en.And; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import io.qameta.allure.Allure; + +/** + * @author charlie (Dmitry Baev). + */ +public class RuntimeApiSteps { + + @Before("@beforeScenario") + public void beforeScenario(){ + // nothing + } + + @Before("@beforeFeature") + public void beforeFeature(){ + // nothing + } + + @When("^step 1$") + public void step1() { + Allure.step("step1 nested"); + Allure.link("step1", "https://example.org/step1"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step1: " + uuid); + }); + } + + @When("^step 2$") + public void step2() { + Allure.step("step2 nested"); + Allure.link("step2", "https://example.org/step2"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step2: " + uuid); + }); + } + + @And("^step 3$") + public void step3() { + Allure.step("step3 nested"); + Allure.link("step3", "https://example.org/step3"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step3: " + uuid); + }); + } + + @Then("^step 4$") + public void step4() { + Allure.step("step4 nested"); + Allure.link("step4", "https://example.org/step4"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step4: " + uuid); + }); + } + + @And("^step 5$") + public void step5() { + Allure.step("step5 nested"); + Allure.link("step5", "https://example.org/step5"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step5: " + uuid); + }); + } +} diff --git a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/SimpleFeatureSteps.java b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/SimpleFeatureSteps.java index 3c7c2fd0a..01c1c1534 100644 --- a/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/SimpleFeatureSteps.java +++ b/allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/samples/SimpleFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber5-jvm/src/test/resources/features/runtimeapi.feature b/allure-cucumber5-jvm/src/test/resources/features/runtimeapi.feature new file mode 100644 index 000000000..ec43eccb7 --- /dev/null +++ b/allure-cucumber5-jvm/src/test/resources/features/runtimeapi.feature @@ -0,0 +1,10 @@ +@beforeFeature +Feature: Should support runtime API in all steps + + @beforeScenario + Scenario: Scenario with Runtime API usage + When step 1 + When step 2 + And step 3 + Then step 4 + And step 5 diff --git a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/AllureCucumber6Jvm.java b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/AllureCucumber6Jvm.java index 693171406..bb0e513bf 100644 --- a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/AllureCucumber6Jvm.java +++ b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/AllureCucumber6Jvm.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import io.cucumber.plugin.event.HookType; import io.cucumber.plugin.event.PickleStepTestStep; import io.cucumber.plugin.event.Result; +import io.cucumber.plugin.event.Step; import io.cucumber.plugin.event.StepArgument; import io.cucumber.plugin.event.TestCase; import io.cucumber.plugin.event.TestCaseFinished; @@ -48,13 +49,13 @@ import io.qameta.allure.model.TestResultContainer; import java.io.ByteArrayInputStream; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.util.Collections; import java.util.Deque; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -78,17 +79,12 @@ }) public class AllureCucumber6Jvm implements ConcurrentEventListener { + private static final String COLON = ":"; + private final AllureLifecycle lifecycle; - private final ConcurrentHashMap scenarioUuids = new ConcurrentHashMap<>(); private final TestSourcesModelProxy testSources = new TestSourcesModelProxy(); - private final ThreadLocal currentFeature = new InheritableThreadLocal<>(); - private final ThreadLocal currentFeatureFile = new InheritableThreadLocal<>(); - private final ThreadLocal currentTestCase = new InheritableThreadLocal<>(); - private final ThreadLocal currentContainer = new InheritableThreadLocal<>(); - private final ThreadLocal forbidTestCaseStatusChange = new InheritableThreadLocal<>(); - private final EventHandler featureStartedHandler = this::handleFeatureStartedHandler; private final EventHandler caseStartedHandler = this::handleTestCaseStarted; private final EventHandler caseFinishedHandler = this::handleTestCaseFinished; @@ -97,6 +93,8 @@ public class AllureCucumber6Jvm implements ConcurrentEventListener { private final EventHandler writeEventHandler = this::handleWriteEvent; private final EventHandler embedEventHandler = this::handleEmbedEvent; + private final Map hookStepContainerUuid = new ConcurrentHashMap<>(); + private static final String TXT_EXTENSION = ".txt"; private static final String TEXT_PLAIN = "text/plain"; private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().getSchemeSpecificPart(); @@ -110,9 +108,6 @@ public AllureCucumber6Jvm(final AllureLifecycle lifecycle) { this.lifecycle = lifecycle; } - /* - Event Handlers - */ @Override public void setEventPublisher(final EventPublisher publisher) { publisher.registerHandlerFor(TestSourceRead.class, featureStartedHandler); @@ -132,29 +127,28 @@ private void handleFeatureStartedHandler(final TestSourceRead event) { } private void handleTestCaseStarted(final TestCaseStarted event) { - currentFeatureFile.set(event.getTestCase().getUri()); - currentFeature.set(testSources.getFeature(currentFeatureFile.get())); - currentTestCase.set(event.getTestCase()); - currentContainer.set(UUID.randomUUID().toString()); - forbidTestCaseStatusChange.set(false); + final TestCase testCase = event.getTestCase(); + final Feature feature = testSources.getFeature(testCase.getUri()); - final TestCase testCase = currentTestCase.get(); final Deque tags = new LinkedList<>(testCase.getTags()); - - final Feature feature = currentFeature.get(); final LabelBuilder labelBuilder = new LabelBuilder(feature, testCase, tags); final String name = testCase.getName(); + + // the same way full name is generated for // org.junit.platform.engine.support.descriptor.ClasspathResourceSource // to support io.qameta.allure.junitplatform.AllurePostDiscoveryFilter final String fullName = String.format("%s:%d", - getTestCaseUri(event.getTestCase()), - event.getTestCase().getLocation().getLine() + getTestCaseUri(testCase), + testCase.getLocation().getLine() ); + final String testCaseUuid = testCase.getId().toString(); + final TestResult result = new TestResult() - .setUuid(getTestCaseUuid(testCase)) + .setUuid(testCaseUuid) + .setTestCaseId(getTestCaseId(testCase)) .setHistoryId(getHistoryId(testCase)) .setFullName(fullName) .setName(name) @@ -163,11 +157,11 @@ private void handleTestCaseStarted(final TestCaseStarted event) { final Scenario scenarioDefinition = testSources.getScenarioDefinition( - currentFeatureFile.get(), + testCase.getUri(), testCase.getLocation().getLine() ); - if (scenarioDefinition.getExamplesCount() > 0) { + if (scenarioDefinition.getExamplesList() != null) { result.setParameters( getExamplesAsParameters(scenarioDefinition, testCase) ); @@ -182,75 +176,121 @@ private void handleTestCaseStarted(final TestCaseStarted event) { result.setDescription(description); } - final TestResultContainer resultContainer = new TestResultContainer() - .setName(String.format("%s: %s", scenarioDefinition.getKeyword(), scenarioDefinition.getName())) - .setUuid(getTestContainerUuid()) - .setChildren(Collections.singletonList(getTestCaseUuid(testCase))); - lifecycle.scheduleTestCase(result); - lifecycle.startTestContainer(getTestContainerUuid(), resultContainer); - lifecycle.startTestCase(getTestCaseUuid(testCase)); + lifecycle.startTestCase(testCaseUuid); } private void handleTestCaseFinished(final TestCaseFinished event) { + final TestCase testCase = event.getTestCase(); + final Feature feature = testSources.getFeature(testCase.getUri()); + final String uuid = testCase.getId().toString(); + final Result result = event.getResult(); + final Status status = translateTestCaseStatus(result); + final StatusDetails statusDetails = getStatusDetails(result.getError()) + .orElseGet(StatusDetails::new); + + final TagParser tagParser = new TagParser(feature, testCase); + statusDetails + .setFlaky(tagParser.isFlaky()) + .setMuted(tagParser.isMuted()) + .setKnown(tagParser.isKnown()); + + lifecycle.updateTestCase(uuid, testResult -> testResult + .setStatus(status) + .setStatusDetails(statusDetails) + ); - final String uuid = getTestCaseUuid(event.getTestCase()); - final Optional details = getStatusDetails(event.getResult().getError()); - details.ifPresent(statusDetails -> lifecycle.updateTestCase( - uuid, - testResult -> testResult.setStatusDetails(statusDetails) - )); lifecycle.stopTestCase(uuid); - lifecycle.stopTestContainer(getTestContainerUuid()); lifecycle.writeTestCase(uuid); - lifecycle.writeTestContainer(getTestContainerUuid()); } private void handleTestStepStarted(final TestStepStarted event) { - if (event.getTestStep() instanceof PickleStepTestStep) { - final PickleStepTestStep pickleStep = (PickleStepTestStep) event.getTestStep(); - final String stepKeyword = Optional.ofNullable( - testSources.getKeywordFromSource(currentFeatureFile.get(), pickleStep.getStep().getLine()) - ).orElse("UNDEFINED"); - - final StepResult stepResult = new StepResult() - .setName(String.format("%s %s", stepKeyword, pickleStep.getStep().getText())) - .setStart(System.currentTimeMillis()); - - lifecycle.startStep(getTestCaseUuid(currentTestCase.get()), getStepUuid(pickleStep), stepResult); + final TestCase testCase = event.getTestCase(); + if (event.getTestStep() instanceof HookTestStep) { + final HookTestStep hook = (HookTestStep) event.getTestStep(); - final StepArgument stepArgument = pickleStep.getStep().getArgument(); - if (stepArgument instanceof DataTableArgument) { - final DataTableArgument dataTableArgument = (DataTableArgument) stepArgument; - createDataTableAttachment(dataTableArgument); + if (isFixtureHook(hook)) { + handleStartFixtureHook(testCase, hook); + } else { + handleStartStepHook(testCase, hook); } - } else if (event.getTestStep() instanceof HookTestStep) { - initHook((HookTestStep) event.getTestStep()); + } else if (event.getTestStep() instanceof PickleStepTestStep) { + handleStartPickleStep(testCase, (PickleStepTestStep) event.getTestStep()); } } - private void initHook(final HookTestStep hook) { + private void handleStartPickleStep(final TestCase testCase, + final PickleStepTestStep pickleStep) { + final String uuid = testCase.getId().toString(); + final Step step = pickleStep.getStep(); - final FixtureResult hookResult = new FixtureResult() + final StepResult stepResult = new StepResult() + .setName(step.getKeyword() + step.getText()) + .setStart(System.currentTimeMillis()); + + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, pickleStep.getId().toString(), stepResult); + + final StepArgument stepArgument = step.getArgument(); + if (stepArgument instanceof DataTableArgument) { + final DataTableArgument dataTableArgument = (DataTableArgument) stepArgument; + createDataTableAttachment(dataTableArgument); + } + } + + private void handleStartStepHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCase.getId().toString(); + final StepResult stepResult = new StepResult() .setName(hook.getCodeLocation()) .setStart(System.currentTimeMillis()); + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, hook.getId().toString(), stepResult); + } + + private void handleStartFixtureHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCase.getId().toString(); + + final UUID hookId = hook.getId(); + final String containerUuid = hookStepContainerUuid + .computeIfAbsent(hookId, unused -> UUID.randomUUID().toString()); + + lifecycle.startTestContainer(new TestResultContainer() + .setUuid(containerUuid) + .setChildren(Collections.singletonList(uuid)) + ); + + final FixtureResult hookResult = new FixtureResult() + .setName(hook.getCodeLocation()); + + final String fixtureUuid = hookId.toString(); if (hook.getHookType() == HookType.BEFORE) { - lifecycle.startPrepareFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); + lifecycle.startPrepareFixture(containerUuid, fixtureUuid, hookResult); } else { - lifecycle.startTearDownFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); + lifecycle.startTearDownFixture(containerUuid, fixtureUuid, hookResult); } - } private void handleTestStepFinished(final TestStepFinished event) { if (event.getTestStep() instanceof HookTestStep) { - handleHookStep(event); - } else { - handlePickleStep(event); + final HookTestStep hook = (HookTestStep) event.getTestStep(); + if (isFixtureHook(hook)) { + handleStopHookStep(event.getResult(), hook); + } else { + handleStopStep(event.getTestCase(), event.getResult(), hook.getId()); + } + } else if (event.getTestStep() instanceof PickleStepTestStep) { + final PickleStepTestStep pickleStep = (PickleStepTestStep) event.getTestStep(); + handleStopStep(event.getTestCase(), event.getResult(), pickleStep.getId()); } } + private static boolean isFixtureHook(final HookTestStep hook) { + return hook.getHookType() == HookType.BEFORE || hook.getHookType() == HookType.AFTER; + } + private void handleWriteEvent(final WriteEvent event) { lifecycle.addAttachment( "Text output", @@ -264,33 +304,16 @@ private void handleEmbedEvent(final EmbedEvent event) { lifecycle.addAttachment(event.name, event.getMediaType(), null, new ByteArrayInputStream(event.getData())); } - /* - Utility Methods - */ - - private String getTestContainerUuid() { - return currentContainer.get(); - } - - private String getTestCaseUuid(final TestCase testCase) { - return scenarioUuids.computeIfAbsent(getHistoryId(testCase), it -> UUID.randomUUID().toString()); - } - - private String getStepUuid(final PickleStepTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getStep().getText() + step.getStep().getLine(); - } - - private String getHookStepUuid(final HookTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getHookType().toString() + step.getCodeLocation(); - } - private String getHistoryId(final TestCase testCase) { - final String testCaseLocation = getTestCaseUri(testCase) + ":" + testCase.getLocation().getLine(); + final String testCaseLocation = getTestCaseUri(testCase) + COLON + testCase.getLocation().getLine(); return md5(testCaseLocation); } + private String getTestCaseId(final TestCase testCase) { + final String testCaseId = getTestCaseUri(testCase) + COLON + testCase.getName(); + return md5(testCaseId); + } + private String getTestCaseUri(final TestCase testCase) { final String testCaseUri = testCase.getUri().getSchemeSpecificPart(); if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) { @@ -317,8 +340,8 @@ private Status translateTestCaseStatus(final Result testCaseResult) { } private List getExamplesAsParameters( - final Scenario scenario, final TestCase localCurrentTestCase - ) { + final Scenario scenario, + final TestCase localCurrentTestCase) { final Optional maybeExample = scenario.getExamplesList().stream() .filter(example -> example.getTableBodyList().stream() @@ -374,83 +397,56 @@ private void createDataTableAttachment(final DataTableArgument dataTableArgument new ByteArrayInputStream(dataTableCsv.toString().getBytes(StandardCharsets.UTF_8))); } - private void handleHookStep(final TestStepFinished event) { - final HookTestStep hookStep = (HookTestStep) event.getTestStep(); - final String uuid = getHookStepUuid(hookStep); - final FixtureResult fixtureResult = new FixtureResult().setStatus(translateTestCaseStatus(event.getResult())); - - if (!Status.PASSED.equals(fixtureResult.getStatus())) { - final TestResult testResult = new TestResult().setStatus(translateTestCaseStatus(event.getResult())); - final StatusDetails statusDetails = getStatusDetails(event.getResult().getError()) - .orElseGet(StatusDetails::new); - - final String errorMessage = event.getResult().getError() == null - ? hookStep.getHookType().name() + " is failed." - : hookStep.getHookType().name() - + " is failed: " - + event.getResult().getError().getLocalizedMessage(); - statusDetails.setMessage(errorMessage); - - if (hookStep.getHookType() == HookType.BEFORE) { - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); - statusDetails - .setFlaky(tagParser.isFlaky()) - .setMuted(tagParser.isMuted()) - .setKnown(tagParser.isKnown()); - testResult.setStatus(Status.SKIPPED); - updateTestCaseStatus(testResult.getStatus()); - forbidTestCaseStatusChange.set(true); - } else { - testResult.setStatus(Status.BROKEN); - updateTestCaseStatus(testResult.getStatus()); - } - fixtureResult.setStatusDetails(statusDetails); + private void handleStopHookStep(final Result eventResult, + final HookTestStep hook) { + final String containerUuid = hookStepContainerUuid.get(hook.getId()); + if (Objects.isNull(containerUuid)) { + // maybe throw an exception? + return; } - lifecycle.updateFixture(uuid, result -> result.setStatus(fixtureResult.getStatus()) - .setStatusDetails(fixtureResult.getStatusDetails())); + final String uuid = hook.getId().toString(); + + final Status status = translateTestCaseStatus(eventResult); + final StatusDetails statusDetails = getStatusDetails(eventResult.getError()) + .orElseGet(StatusDetails::new); + + lifecycle.updateFixture(uuid, result -> result + .setStatus(status) + .setStatusDetails(statusDetails) + ); lifecycle.stopFixture(uuid); - } - private void handlePickleStep(final TestStepFinished event) { + lifecycle.stopTestContainer(containerUuid); + lifecycle.writeTestContainer(containerUuid); + } - final Status stepStatus = translateTestCaseStatus(event.getResult()); - final StatusDetails statusDetails; - if (event.getResult().getStatus() == io.cucumber.plugin.event.Status.UNDEFINED) { - updateTestCaseStatus(Status.PASSED); + private void handleStopStep(final TestCase testCase, + final Result eventResult, + final UUID stepId) { + final Feature feature = testSources.getFeature(testCase.getUri()); - statusDetails = - getStatusDetails(new IllegalStateException("Undefined Step. Please add step definition")) - .orElse(new StatusDetails()); - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), scenarioResult -> - scenarioResult - .setStatusDetails(statusDetails)); - } else { - statusDetails = - getStatusDetails(event.getResult().getError()) - .orElse(new StatusDetails()); - updateTestCaseStatus(stepStatus); - } + final Status stepStatus = translateTestCaseStatus(eventResult); - if (!Status.PASSED.equals(stepStatus) && stepStatus != null) { - forbidTestCaseStatusChange.set(true); - } + final StatusDetails statusDetails + = eventResult.getStatus() == io.cucumber.plugin.event.Status.UNDEFINED + ? new StatusDetails().setMessage("Undefined Step. Please add step definition") + : getStatusDetails(eventResult.getError()) + .orElse(new StatusDetails()); - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); + final TagParser tagParser = new TagParser(feature, testCase); statusDetails .setFlaky(tagParser.isFlaky()) .setMuted(tagParser.isMuted()) .setKnown(tagParser.isKnown()); - lifecycle.updateStep(getStepUuid((PickleStepTestStep) event.getTestStep()), - stepResult -> stepResult.setStatus(stepStatus).setStatusDetails(statusDetails)); - lifecycle.stopStep(getStepUuid((PickleStepTestStep) event.getTestStep())); - } - - private void updateTestCaseStatus(final Status status) { - if (!forbidTestCaseStatusChange.get()) { - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), - result -> result.setStatus(status)); - } + final String stepUuid = stepId.toString(); + lifecycle.updateStep( + stepUuid, + stepResult -> stepResult + .setStatus(stepStatus) + .setStatusDetails(statusDetails) + ); + lifecycle.stopStep(stepUuid); } } diff --git a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/LabelBuilder.java b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/LabelBuilder.java index 2c0dcdc5f..94247a990 100644 --- a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/LabelBuilder.java +++ b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/LabelBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/TagParser.java b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/TagParser.java index f1e5940bf..a594d97d9 100644 --- a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/TagParser.java +++ b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/TagParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModel.java b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModel.java index 8545fd102..2bdc4b09b 100644 --- a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModel.java +++ b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModel.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModelProxy.java b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModelProxy.java index 84f757ff0..228f1623a 100644 --- a/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModelProxy.java +++ b/allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/testsourcemodel/TestSourcesModelProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/AllureCucumber6JvmTest.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/AllureCucumber6JvmTest.java index 1e29208c4..8cfbd31bf 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/AllureCucumber6JvmTest.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/AllureCucumber6JvmTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ import io.cucumber.core.runtime.TimeServiceEventBus; import io.github.glytching.junit.extension.system.SystemProperty; import io.github.glytching.junit.extension.system.SystemPropertyExtension; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Step; import io.qameta.allure.model.Attachment; import io.qameta.allure.model.FixtureResult; @@ -38,10 +37,10 @@ import io.qameta.allure.model.StatusDetails; import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; +import io.qameta.allure.model.TestResultContainer; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; -import io.qameta.allure.test.AllureTestCommonsUtils; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.parallel.ResourceLock; @@ -61,6 +60,7 @@ import static io.qameta.allure.util.ResultsUtils.PACKAGE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.SUITE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.TEST_CLASS_LABEL_NAME; +import static io.qameta.allure.util.ResultsUtils.md5; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.junit.jupiter.api.parallel.ResourceAccessMode.READ_WRITE; @@ -89,8 +89,10 @@ void shouldSetStatus() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.PASSED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Add a to b", Status.PASSED) + ); } @AllureFeatures.FailedTests @@ -284,10 +286,10 @@ void shouldAddBackgroundSteps() { .flatExtracting(TestResult::getSteps) .extracting(StepResult::getName) .containsExactly( - "Given cat is sad", - "And cat is murmur", - "When Pet the cat", - "Then Cat is happy" + "Given cat is sad", + "And cat is murmur", + "When Pet the cat", + "Then Cat is happy" ); } @@ -449,15 +451,17 @@ void shouldProcessUndefinedSteps() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.SKIPPED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Step is not defined", null) + ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is undefined", null), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is undefined", null), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -475,9 +479,9 @@ void shouldProcessPendingExceptionsInSteps() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is yet to be implemented", Status.SKIPPED), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is yet to be implemented", Status.SKIPPED), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -496,10 +500,10 @@ void shouldSupportDryRunForSimpleFeatures() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("And b is 10", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 5", Status.PASSED), + tuple("And b is 10", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); } @@ -510,32 +514,29 @@ void shouldSupportDryRunForHooks() { final AllureResults results = runFeature("features/hooks.feature", "--dry-run", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .startsWith( - tuple("Simple scenario with Before and After hooks", Status.PASSED) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber6jvm.samples.HookSteps.beforeHook()", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber6jvm.samples.HookSteps.afterHook()", Status.PASSED) ); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); } @@ -570,6 +571,42 @@ void shouldPersistDifferentHistoryIdComparedToTheSameTestCaseInDifferentLocation .isNotEqualTo(results2.getTestResults().get(0).getHistoryId()); } + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForScenarios() { + final AllureResults results = runFeature("features/simple.feature"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Add a to b", + md5("src/test/resources/features/simple.feature:Add a to b") + ) + ); + } + + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForExamples() { + final AllureResults results = runFeature("features/examples.feature", "--threads", "2"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ), + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ) + ); + } + @AllureFeatures.Parallel @Test void shouldProcessScenariosInParallelMode() { @@ -581,30 +618,33 @@ void shouldProcessScenariosInParallelMode() { .hasSize(3); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 1", - "And b is 3", - "When I add a to b", - "Then result is 4") + "Given a is 1", + "And b is 3", + "When I add a to b", + "Then result is 4" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 2", - "And b is 4", - "When I add a to b", - "Then result is 6") + "Given a is 2", + "And b is 4", + "When I add a to b", + "Then result is 6" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 7", - "And b is 8", - "When I add a to b", - "Then result is 15") + "Given a is 7", + "And b is 8", + "When I add a to b", + "Then result is 15" ); } @@ -615,64 +655,61 @@ void shouldDisplayHooksAsStages() { final AllureResults results = runFeature("features/hooks.feature", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .containsExactlyInAnyOrder( - tuple("Simple scenario with Before and After hooks", Status.PASSED), - tuple("Simple scenario with Before hook with Exception", Status.SKIPPED), - tuple("Simple scenario with After hook with Exception", Status.BROKEN) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); + final TestResult tr2 = results.getTestResultByName("Simple scenario with Before hook with Exception"); + final TestResult tr3 = results.getTestResultByName("Simple scenario with After hook with Exception"); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber6jvm.samples.HookSteps.beforeHook()", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber6jvm.samples.HookSteps.afterHook()", Status.PASSED) ); - assertThat(testResults.get(1).getSteps()) + assertThat(tr2.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.SKIPPED), - tuple("And b is 8", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 7", Status.SKIPPED), + tuple("And b is 8", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); - assertThat(results.getTestResultContainers().get(1).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr2)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber6jvm.samples.HookSteps.beforeHookWithException()", Status.FAILED) ); - - assertThat(testResults.get(2).getSteps()) + assertThat(tr3.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(2).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr3)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber6jvm.samples.HookSteps.afterHookWithException()", Status.FAILED) @@ -689,14 +726,14 @@ void shouldHandleAmbigiousStepsExceptions() { assertThat(testResults) .extracting(TestResult::getName, TestResult::getStatus) .containsExactlyInAnyOrder( - tuple("Simple scenario with ambigious steps", Status.SKIPPED) + tuple("Simple scenario with ambigious steps", null) ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactly( - tuple("When ambigious step present", null), - tuple("Then something bad should happen", Status.SKIPPED) + tuple("When ambigious step present", null), + tuple("Then something bad should happen", Status.SKIPPED) ); } @@ -716,41 +753,65 @@ void shouldSupportProvidedLabels() { ); } + @Test + void shouldSupportRuntimeApiInStepsWhenHooksAreUsed() { + final AllureResults results = runFeature("features/runtimeapi.feature"); + + final List testResults = results.getTestResults(); + + assertThat(testResults) + .hasSize(1) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) + .containsExactly( + "When step 1", + "When step 2", + "And step 3", + "Then step 4", + "And step 5" + ); + + assertThat(testResults) + .flatExtracting(TestResult::getLinks) + .extracting(Link::getName, Link::getUrl) + .containsExactly( + tuple("step1", "https://example.org/step1"), + tuple("step2", "https://example.org/step2"), + tuple("step3", "https://example.org/step3"), + tuple("step4", "https://example.org/step4"), + tuple("step5", "https://example.org/step5") + ); + } + @SystemProperty(name = "cucumber.junit-platform.naming-strategy", value = "long") @Step private AllureResults runFeature(final String featureResource, final String... moreOptions) { - - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - - final AllureLifecycle lifecycle = new AllureLifecycle(writer); - final AllureCucumber6Jvm cucumber6jvm = new AllureCucumber6Jvm(lifecycle); - final Supplier classLoader = ClassLoaders::getDefaultClassLoader; - final List opts = new ArrayList<>(Arrays.asList( - "--glue", "io.qameta.allure.cucumber6jvm.samples", - "--plugin", "null_summary" - )); - opts.addAll(Arrays.asList(moreOptions)); - final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); - final RuntimeOptions options = new CommandlineOptionsParser(System.out) - .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); - - final EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID); - final FeatureParser parser = new FeatureParser(bus::generateId); - final FeaturePathFeatureSupplier supplier - = new FeaturePathFeatureSupplier(classLoader, options, parser); - - final Runtime runtime = Runtime.builder() - .withClassLoader(classLoader) - .withRuntimeOptions(options) - .withAdditionalPlugins(cucumber6jvm) - .withFeatureSupplier(supplier) - .build(); - - runtime.run(); - - AllureTestCommonsUtils.attach(writer); - - return writer; + return RunUtils.runTests(lifecycle -> { + final AllureCucumber6Jvm cucumber6jvm = new AllureCucumber6Jvm(lifecycle); + final Supplier classLoader = ClassLoaders::getDefaultClassLoader; + final List opts = new ArrayList<>(Arrays.asList( + "--glue", "io.qameta.allure.cucumber6jvm.samples", + "--plugin", "null_summary" + )); + opts.addAll(Arrays.asList(moreOptions)); + final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); + final RuntimeOptions options = new CommandlineOptionsParser(System.out) + .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); + + final EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID); + final FeatureParser parser = new FeatureParser(bus::generateId); + final FeaturePathFeatureSupplier supplier + = new FeaturePathFeatureSupplier(classLoader, options, parser); + + final Runtime runtime = Runtime.builder() + .withClassLoader(classLoader) + .withRuntimeOptions(options) + .withAdditionalPlugins(cucumber6jvm) + .withFeatureSupplier(supplier) + .build(); + + runtime.run(); + }); } } diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AmbigiousSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AmbigiousSteps.java index 434852199..8d8a22dfe 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AmbigiousSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AmbigiousSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AttachmentSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AttachmentSteps.java index cf896ffe2..b3f397a3b 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AttachmentSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/AttachmentSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BackgroundFeatureSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BackgroundFeatureSteps.java index 9eb6f294f..f8b041039 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BackgroundFeatureSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BackgroundFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BrokenFeatureSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BrokenFeatureSteps.java index 9e815c978..22b64b97b 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BrokenFeatureSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/BrokenFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/DatatableFeatureSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/DatatableFeatureSteps.java index bd0cec6f6..416732c3d 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/DatatableFeatureSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/DatatableFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/HookSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/HookSteps.java index e0de9fc63..fcc108bf7 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/HookSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/HookSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/PendingSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/PendingSteps.java index df67e1a8a..db1279635 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/PendingSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/PendingSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/RuntimeApiSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/RuntimeApiSteps.java new file mode 100644 index 000000000..c769404ef --- /dev/null +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/RuntimeApiSteps.java @@ -0,0 +1,83 @@ +/* + * Copyright 2016-2024 Qameta Software Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.qameta.allure.cucumber6jvm.samples; + +import io.cucumber.java.Before; +import io.cucumber.java.en.And; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import io.qameta.allure.Allure; + +/** + * @author charlie (Dmitry Baev). + */ +public class RuntimeApiSteps { + + @Before("@beforeScenario") + public void beforeScenario(){ + // nothing + } + + @Before("@beforeFeature") + public void beforeFeature(){ + // nothing + } + + @When("^step 1$") + public void step1() { + Allure.step("step1 nested"); + Allure.link("step1", "https://example.org/step1"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step1: " + uuid); + }); + } + + @When("^step 2$") + public void step2() { + Allure.step("step2 nested"); + Allure.link("step2", "https://example.org/step2"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step2: " + uuid); + }); + } + + @And("^step 3$") + public void step3() { + Allure.step("step3 nested"); + Allure.link("step3", "https://example.org/step3"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step3: " + uuid); + }); + } + + @Then("^step 4$") + public void step4() { + Allure.step("step4 nested"); + Allure.link("step4", "https://example.org/step4"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step4: " + uuid); + }); + } + + @And("^step 5$") + public void step5() { + Allure.step("step5 nested"); + Allure.link("step5", "https://example.org/step5"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step5: " + uuid); + }); + } +} diff --git a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/SimpleFeatureSteps.java b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/SimpleFeatureSteps.java index 85d03e315..ffa41cb13 100644 --- a/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/SimpleFeatureSteps.java +++ b/allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/samples/SimpleFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber6-jvm/src/test/resources/features/runtimeapi.feature b/allure-cucumber6-jvm/src/test/resources/features/runtimeapi.feature new file mode 100644 index 000000000..ec43eccb7 --- /dev/null +++ b/allure-cucumber6-jvm/src/test/resources/features/runtimeapi.feature @@ -0,0 +1,10 @@ +@beforeFeature +Feature: Should support runtime API in all steps + + @beforeScenario + Scenario: Scenario with Runtime API usage + When step 1 + When step 2 + And step 3 + Then step 4 + And step 5 diff --git a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/AllureCucumber7Jvm.java b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/AllureCucumber7Jvm.java index 123a1e29b..5f85512fd 100644 --- a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/AllureCucumber7Jvm.java +++ b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/AllureCucumber7Jvm.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ import io.cucumber.messages.types.Examples; import io.cucumber.messages.types.Feature; import io.cucumber.messages.types.Scenario; +import io.cucumber.messages.types.TableCell; import io.cucumber.messages.types.TableRow; import io.cucumber.plugin.ConcurrentEventListener; import io.cucumber.plugin.event.DataTableArgument; @@ -28,6 +29,7 @@ import io.cucumber.plugin.event.HookType; import io.cucumber.plugin.event.PickleStepTestStep; import io.cucumber.plugin.event.Result; +import io.cucumber.plugin.event.Step; import io.cucumber.plugin.event.StepArgument; import io.cucumber.plugin.event.TestCase; import io.cucumber.plugin.event.TestCaseFinished; @@ -48,13 +50,13 @@ import io.qameta.allure.model.TestResultContainer; import java.io.ByteArrayInputStream; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.util.Collections; import java.util.Deque; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -78,17 +80,12 @@ }) public class AllureCucumber7Jvm implements ConcurrentEventListener { + private static final String COLON = ":"; + private final AllureLifecycle lifecycle; - private final ConcurrentHashMap scenarioUuids = new ConcurrentHashMap<>(); private final TestSourcesModelProxy testSources = new TestSourcesModelProxy(); - private final ThreadLocal currentFeature = new InheritableThreadLocal<>(); - private final ThreadLocal currentFeatureFile = new InheritableThreadLocal<>(); - private final ThreadLocal currentTestCase = new InheritableThreadLocal<>(); - private final ThreadLocal currentContainer = new InheritableThreadLocal<>(); - private final ThreadLocal forbidTestCaseStatusChange = new InheritableThreadLocal<>(); - private final EventHandler featureStartedHandler = this::handleFeatureStartedHandler; private final EventHandler caseStartedHandler = this::handleTestCaseStarted; private final EventHandler caseFinishedHandler = this::handleTestCaseFinished; @@ -97,6 +94,8 @@ public class AllureCucumber7Jvm implements ConcurrentEventListener { private final EventHandler writeEventHandler = this::handleWriteEvent; private final EventHandler embedEventHandler = this::handleEmbedEvent; + private final Map hookStepContainerUuid = new ConcurrentHashMap<>(); + private static final String TXT_EXTENSION = ".txt"; private static final String TEXT_PLAIN = "text/plain"; private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().getSchemeSpecificPart(); @@ -110,9 +109,6 @@ public AllureCucumber7Jvm(final AllureLifecycle lifecycle) { this.lifecycle = lifecycle; } - /* - Event Handlers - */ @Override public void setEventPublisher(final EventPublisher publisher) { publisher.registerHandlerFor(TestSourceRead.class, featureStartedHandler); @@ -132,20 +128,15 @@ private void handleFeatureStartedHandler(final TestSourceRead event) { } private void handleTestCaseStarted(final TestCaseStarted event) { - currentFeatureFile.set(event.getTestCase().getUri()); - currentFeature.set(testSources.getFeature(currentFeatureFile.get())); - currentTestCase.set(event.getTestCase()); - currentContainer.set(UUID.randomUUID().toString()); - forbidTestCaseStatusChange.set(false); + final TestCase testCase = event.getTestCase(); + final Feature feature = testSources.getFeature(testCase.getUri()); - final TestCase testCase = currentTestCase.get(); final Deque tags = new LinkedList<>(testCase.getTags()); - - final Feature feature = currentFeature.get(); final LabelBuilder labelBuilder = new LabelBuilder(feature, testCase, tags); final String name = testCase.getName(); + // the same way full name is generated for // org.junit.platform.engine.support.descriptor.ClasspathResourceSource // to support io.qameta.allure.junitplatform.AllurePostDiscoveryFilter @@ -154,8 +145,11 @@ private void handleTestCaseStarted(final TestCaseStarted event) { testCase.getLocation().getLine() ); + final String testCaseUuid = testCase.getId().toString(); + final TestResult result = new TestResult() - .setUuid(getTestCaseUuid(testCase)) + .setUuid(testCaseUuid) + .setTestCaseId(getTestCaseId(testCase)) .setHistoryId(getHistoryId(testCase)) .setFullName(fullName) .setName(name) @@ -164,7 +158,7 @@ private void handleTestCaseStarted(final TestCaseStarted event) { final Scenario scenarioDefinition = testSources.getScenarioDefinition( - currentFeatureFile.get(), + testCase.getUri(), testCase.getLocation().getLine() ); @@ -183,75 +177,121 @@ private void handleTestCaseStarted(final TestCaseStarted event) { result.setDescription(description); } - final TestResultContainer resultContainer = new TestResultContainer() - .setName(String.format("%s: %s", scenarioDefinition.getKeyword(), scenarioDefinition.getName())) - .setUuid(getTestContainerUuid()) - .setChildren(Collections.singletonList(getTestCaseUuid(testCase))); - lifecycle.scheduleTestCase(result); - lifecycle.startTestContainer(getTestContainerUuid(), resultContainer); - lifecycle.startTestCase(getTestCaseUuid(testCase)); + lifecycle.startTestCase(testCaseUuid); } private void handleTestCaseFinished(final TestCaseFinished event) { + final TestCase testCase = event.getTestCase(); + final Feature feature = testSources.getFeature(testCase.getUri()); + final String uuid = testCase.getId().toString(); + final Result result = event.getResult(); + final Status status = translateTestCaseStatus(result); + final StatusDetails statusDetails = getStatusDetails(result.getError()) + .orElseGet(StatusDetails::new); + + final TagParser tagParser = new TagParser(feature, testCase); + statusDetails + .setFlaky(tagParser.isFlaky()) + .setMuted(tagParser.isMuted()) + .setKnown(tagParser.isKnown()); + + lifecycle.updateTestCase(uuid, testResult -> testResult + .setStatus(status) + .setStatusDetails(statusDetails) + ); - final String uuid = getTestCaseUuid(event.getTestCase()); - final Optional details = getStatusDetails(event.getResult().getError()); - details.ifPresent(statusDetails -> lifecycle.updateTestCase( - uuid, - testResult -> testResult.setStatusDetails(statusDetails) - )); lifecycle.stopTestCase(uuid); - lifecycle.stopTestContainer(getTestContainerUuid()); lifecycle.writeTestCase(uuid); - lifecycle.writeTestContainer(getTestContainerUuid()); } private void handleTestStepStarted(final TestStepStarted event) { - if (event.getTestStep() instanceof PickleStepTestStep) { - final PickleStepTestStep pickleStep = (PickleStepTestStep) event.getTestStep(); - final String stepKeyword = Optional.ofNullable( - testSources.getKeywordFromSource(currentFeatureFile.get(), pickleStep.getStep().getLine()) - ).orElse("UNDEFINED"); - - final StepResult stepResult = new StepResult() - .setName(String.format("%s %s", stepKeyword, pickleStep.getStep().getText())) - .setStart(System.currentTimeMillis()); - - lifecycle.startStep(getTestCaseUuid(currentTestCase.get()), getStepUuid(pickleStep), stepResult); + final TestCase testCase = event.getTestCase(); + if (event.getTestStep() instanceof HookTestStep) { + final HookTestStep hook = (HookTestStep) event.getTestStep(); - final StepArgument stepArgument = pickleStep.getStep().getArgument(); - if (stepArgument instanceof DataTableArgument) { - final DataTableArgument dataTableArgument = (DataTableArgument) stepArgument; - createDataTableAttachment(dataTableArgument); + if (isFixtureHook(hook)) { + handleStartFixtureHook(testCase, hook); + } else { + handleStartStepHook(testCase, hook); } - } else if (event.getTestStep() instanceof HookTestStep) { - initHook((HookTestStep) event.getTestStep()); + } else if (event.getTestStep() instanceof PickleStepTestStep) { + handleStartPickleStep(testCase, (PickleStepTestStep) event.getTestStep()); } } - private void initHook(final HookTestStep hook) { + private void handleStartPickleStep(final TestCase testCase, + final PickleStepTestStep pickleStep) { + final String uuid = testCase.getId().toString(); + final Step step = pickleStep.getStep(); - final FixtureResult hookResult = new FixtureResult() + final StepResult stepResult = new StepResult() + .setName(step.getKeyword() + step.getText()) + .setStart(System.currentTimeMillis()); + + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, pickleStep.getId().toString(), stepResult); + + final StepArgument stepArgument = step.getArgument(); + if (stepArgument instanceof DataTableArgument) { + final DataTableArgument dataTableArgument = (DataTableArgument) stepArgument; + createDataTableAttachment(dataTableArgument); + } + } + + private void handleStartStepHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCase.getId().toString(); + final StepResult stepResult = new StepResult() .setName(hook.getCodeLocation()) .setStart(System.currentTimeMillis()); + lifecycle.setCurrentTestCase(uuid); + lifecycle.startStep(uuid, hook.getId().toString(), stepResult); + } + + private void handleStartFixtureHook(final TestCase testCase, + final HookTestStep hook) { + final String uuid = testCase.getId().toString(); + + final UUID hookId = hook.getId(); + final String containerUuid = hookStepContainerUuid + .computeIfAbsent(hookId, unused -> UUID.randomUUID().toString()); + + lifecycle.startTestContainer(new TestResultContainer() + .setUuid(containerUuid) + .setChildren(Collections.singletonList(uuid)) + ); + + final FixtureResult hookResult = new FixtureResult() + .setName(hook.getCodeLocation()); + + final String fixtureUuid = hookId.toString(); if (hook.getHookType() == HookType.BEFORE) { - lifecycle.startPrepareFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); + lifecycle.startPrepareFixture(containerUuid, fixtureUuid, hookResult); } else { - lifecycle.startTearDownFixture(getTestContainerUuid(), getHookStepUuid(hook), hookResult); + lifecycle.startTearDownFixture(containerUuid, fixtureUuid, hookResult); } - } private void handleTestStepFinished(final TestStepFinished event) { if (event.getTestStep() instanceof HookTestStep) { - handleHookStep(event); - } else { - handlePickleStep(event); + final HookTestStep hook = (HookTestStep) event.getTestStep(); + if (isFixtureHook(hook)) { + handleStopHookStep(event.getResult(), hook); + } else { + handleStopStep(event.getTestCase(), event.getResult(), hook.getId()); + } + } else if (event.getTestStep() instanceof PickleStepTestStep) { + final PickleStepTestStep pickleStep = (PickleStepTestStep) event.getTestStep(); + handleStopStep(event.getTestCase(), event.getResult(), pickleStep.getId()); } } + private static boolean isFixtureHook(final HookTestStep hook) { + return hook.getHookType() == HookType.BEFORE || hook.getHookType() == HookType.AFTER; + } + private void handleWriteEvent(final WriteEvent event) { lifecycle.addAttachment( "Text output", @@ -265,33 +305,16 @@ private void handleEmbedEvent(final EmbedEvent event) { lifecycle.addAttachment(event.name, event.getMediaType(), null, new ByteArrayInputStream(event.getData())); } - /* - Utility Methods - */ - - private String getTestContainerUuid() { - return currentContainer.get(); - } - - private String getTestCaseUuid(final TestCase testCase) { - return scenarioUuids.computeIfAbsent(getHistoryId(testCase), it -> UUID.randomUUID().toString()); - } - - private String getStepUuid(final PickleStepTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getStep().getText() + step.getStep().getLine(); - } - - private String getHookStepUuid(final HookTestStep step) { - return currentFeature.get().getName() + getTestCaseUuid(currentTestCase.get()) - + step.getHookType().toString() + step.getCodeLocation(); - } - private String getHistoryId(final TestCase testCase) { - final String testCaseLocation = getTestCaseUri(testCase) + ":" + testCase.getLocation().getLine(); + final String testCaseLocation = getTestCaseUri(testCase) + COLON + testCase.getLocation().getLine(); return md5(testCaseLocation); } + private String getTestCaseId(final TestCase testCase) { + final String testCaseId = getTestCaseUri(testCase) + COLON + testCase.getName(); + return md5(testCaseId); + } + private String getTestCaseUri(final TestCase testCase) { final String testCaseUri = testCase.getUri().getSchemeSpecificPart(); if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) { @@ -318,8 +341,9 @@ private Status translateTestCaseStatus(final Result testCaseResult) { } private List getExamplesAsParameters( - final Scenario scenario, final TestCase localCurrentTestCase - ) { + final Scenario scenario, + final TestCase localCurrentTestCase) { + final Optional maybeExample = scenario.getExamples().stream() .filter(example -> example.getTableBody().stream() @@ -343,10 +367,21 @@ private List getExamplesAsParameters( } final TableRow row = maybeRow.get(); + final int size = row.getCells().size(); + + final List headerNames = examples.getTableHeader() + .map(TableRow::getCells) + .map(rows -> rows.stream() + .map(TableCell::getValue) + .collect(Collectors.toList()) + ) + .orElse(null); - return IntStream.range(0, examples.getTableHeader().get().getCells().size()) + return IntStream.range(0, size) .mapToObj(index -> { - final String name = examples.getTableHeader().get().getCells().get(index).getValue(); + final String name = Objects.nonNull(headerNames) + ? headerNames.get(index) + : "arg" + index; final String value = row.getCells().get(index).getValue(); return createParameter(name, value); }) @@ -375,83 +410,56 @@ private void createDataTableAttachment(final DataTableArgument dataTableArgument new ByteArrayInputStream(dataTableCsv.toString().getBytes(StandardCharsets.UTF_8))); } - private void handleHookStep(final TestStepFinished event) { - final HookTestStep hookStep = (HookTestStep) event.getTestStep(); - final String uuid = getHookStepUuid(hookStep); - final FixtureResult fixtureResult = new FixtureResult().setStatus(translateTestCaseStatus(event.getResult())); - - if (!Status.PASSED.equals(fixtureResult.getStatus())) { - final TestResult testResult = new TestResult().setStatus(translateTestCaseStatus(event.getResult())); - final StatusDetails statusDetails = getStatusDetails(event.getResult().getError()) - .orElseGet(StatusDetails::new); - - final String errorMessage = event.getResult().getError() == null - ? hookStep.getHookType().name() + " is failed." - : hookStep.getHookType().name() - + " is failed: " - + event.getResult().getError().getLocalizedMessage(); - statusDetails.setMessage(errorMessage); - - if (hookStep.getHookType() == HookType.BEFORE) { - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); - statusDetails - .setFlaky(tagParser.isFlaky()) - .setMuted(tagParser.isMuted()) - .setKnown(tagParser.isKnown()); - testResult.setStatus(Status.SKIPPED); - updateTestCaseStatus(testResult.getStatus()); - forbidTestCaseStatusChange.set(true); - } else { - testResult.setStatus(Status.BROKEN); - updateTestCaseStatus(testResult.getStatus()); - } - fixtureResult.setStatusDetails(statusDetails); + private void handleStopHookStep(final Result eventResult, + final HookTestStep hook) { + final String containerUuid = hookStepContainerUuid.get(hook.getId()); + if (Objects.isNull(containerUuid)) { + // maybe throw an exception? + return; } - lifecycle.updateFixture(uuid, result -> result.setStatus(fixtureResult.getStatus()) - .setStatusDetails(fixtureResult.getStatusDetails())); + final String uuid = hook.getId().toString(); + + final Status status = translateTestCaseStatus(eventResult); + final StatusDetails statusDetails = getStatusDetails(eventResult.getError()) + .orElseGet(StatusDetails::new); + + lifecycle.updateFixture(uuid, result -> result + .setStatus(status) + .setStatusDetails(statusDetails) + ); lifecycle.stopFixture(uuid); - } - private void handlePickleStep(final TestStepFinished event) { + lifecycle.stopTestContainer(containerUuid); + lifecycle.writeTestContainer(containerUuid); + } - final Status stepStatus = translateTestCaseStatus(event.getResult()); - final StatusDetails statusDetails; - if (event.getResult().getStatus() == io.cucumber.plugin.event.Status.UNDEFINED) { - updateTestCaseStatus(Status.PASSED); + private void handleStopStep(final TestCase testCase, + final Result eventResult, + final UUID stepId) { + final Feature feature = testSources.getFeature(testCase.getUri()); - statusDetails = - getStatusDetails(new IllegalStateException("Undefined Step. Please add step definition")) - .orElse(new StatusDetails()); - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), scenarioResult -> - scenarioResult - .setStatusDetails(statusDetails)); - } else { - statusDetails = - getStatusDetails(event.getResult().getError()) - .orElse(new StatusDetails()); - updateTestCaseStatus(stepStatus); - } + final Status stepStatus = translateTestCaseStatus(eventResult); - if (!Status.PASSED.equals(stepStatus) && stepStatus != null) { - forbidTestCaseStatusChange.set(true); - } + final StatusDetails statusDetails + = eventResult.getStatus() == io.cucumber.plugin.event.Status.UNDEFINED + ? new StatusDetails().setMessage("Undefined Step. Please add step definition") + : getStatusDetails(eventResult.getError()) + .orElse(new StatusDetails()); - final TagParser tagParser = new TagParser(currentFeature.get(), currentTestCase.get()); + final TagParser tagParser = new TagParser(feature, testCase); statusDetails .setFlaky(tagParser.isFlaky()) .setMuted(tagParser.isMuted()) .setKnown(tagParser.isKnown()); - lifecycle.updateStep(getStepUuid((PickleStepTestStep) event.getTestStep()), - stepResult -> stepResult.setStatus(stepStatus).setStatusDetails(statusDetails)); - lifecycle.stopStep(getStepUuid((PickleStepTestStep) event.getTestStep())); - } - - private void updateTestCaseStatus(final Status status) { - if (!forbidTestCaseStatusChange.get()) { - lifecycle.updateTestCase(getTestCaseUuid(currentTestCase.get()), - result -> result.setStatus(status)); - } + final String stepUuid = stepId.toString(); + lifecycle.updateStep( + stepUuid, + stepResult -> stepResult + .setStatus(stepStatus) + .setStatusDetails(statusDetails) + ); + lifecycle.stopStep(stepUuid); } } diff --git a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/LabelBuilder.java b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/LabelBuilder.java index 4889a23da..a5ffd0948 100644 --- a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/LabelBuilder.java +++ b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/LabelBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/TagParser.java b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/TagParser.java index 8ef92b7ab..8efb825a4 100644 --- a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/TagParser.java +++ b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/TagParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModel.java b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModel.java index 5ce13730f..37d2fb7ff 100644 --- a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModel.java +++ b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModel.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModelProxy.java b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModelProxy.java index 662adf763..1ceacf741 100644 --- a/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModelProxy.java +++ b/allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/testsourcemodel/TestSourcesModelProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/AllureCucumber7JvmTest.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/AllureCucumber7JvmTest.java index 13064c4f8..45da3d019 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/AllureCucumber7JvmTest.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/AllureCucumber7JvmTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ import io.cucumber.core.runtime.TimeServiceEventBus; import io.github.glytching.junit.extension.system.SystemProperty; import io.github.glytching.junit.extension.system.SystemPropertyExtension; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Step; import io.qameta.allure.model.Attachment; import io.qameta.allure.model.FixtureResult; @@ -38,10 +37,10 @@ import io.qameta.allure.model.StatusDetails; import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; +import io.qameta.allure.model.TestResultContainer; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; -import io.qameta.allure.test.AllureTestCommonsUtils; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.parallel.ResourceLock; @@ -61,6 +60,7 @@ import static io.qameta.allure.util.ResultsUtils.PACKAGE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.SUITE_LABEL_NAME; import static io.qameta.allure.util.ResultsUtils.TEST_CLASS_LABEL_NAME; +import static io.qameta.allure.util.ResultsUtils.md5; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.junit.jupiter.api.parallel.ResourceAccessMode.READ_WRITE; @@ -89,8 +89,10 @@ void shouldSetStatus() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.PASSED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Add a to b", Status.PASSED) + ); } @AllureFeatures.FailedTests @@ -284,10 +286,10 @@ void shouldAddBackgroundSteps() { .flatExtracting(TestResult::getSteps) .extracting(StepResult::getName) .containsExactly( - "Given cat is sad", - "And cat is murmur", - "When Pet the cat", - "Then Cat is happy" + "Given cat is sad", + "And cat is murmur", + "When Pet the cat", + "Then Cat is happy" ); } @@ -449,15 +451,17 @@ void shouldProcessUndefinedSteps() { final List testResults = results.getTestResults(); assertThat(testResults) - .extracting(TestResult::getStatus) - .containsExactlyInAnyOrder(Status.SKIPPED); + .extracting(TestResult::getName, TestResult::getStatus) + .containsExactlyInAnyOrder( + tuple("Step is not defined", null) + ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is undefined", null), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is undefined", null), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -475,9 +479,9 @@ void shouldProcessPendingExceptionsInSteps() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("When step is yet to be implemented", Status.SKIPPED), - tuple("Then b is 10", Status.SKIPPED) + tuple("Given a is 5", Status.PASSED), + tuple("When step is yet to be implemented", Status.SKIPPED), + tuple("Then b is 10", Status.SKIPPED) ); } @@ -496,10 +500,10 @@ void shouldSupportDryRunForSimpleFeatures() { assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 5", Status.PASSED), - tuple("And b is 10", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 5", Status.PASSED), + tuple("And b is 10", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); } @@ -510,32 +514,29 @@ void shouldSupportDryRunForHooks() { final AllureResults results = runFeature("features/hooks.feature", "--dry-run", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .startsWith( - tuple("Simple scenario with Before and After hooks", Status.PASSED) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber7jvm.samples.HookSteps.beforeHook()", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber7jvm.samples.HookSteps.afterHook()", Status.PASSED) ); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); } @@ -570,6 +571,42 @@ void shouldPersistDifferentHistoryIdComparedToTheSameTestCaseInDifferentLocation .isNotEqualTo(results2.getTestResults().get(0).getHistoryId()); } + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForScenarios() { + final AllureResults results = runFeature("features/simple.feature"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Add a to b", + md5("src/test/resources/features/simple.feature:Add a to b") + ) + ); + } + + @AllureFeatures.History + @Test + void shouldSetTestCaseIdForExamples() { + final AllureResults results = runFeature("features/examples.feature", "--threads", "2"); + + final List testResults = results.getTestResults(); + assertThat(testResults) + .extracting(TestResult::getName, TestResult::getTestCaseId) + .containsExactlyInAnyOrder( + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ), + tuple( + "Scenario with Positive Examples", + md5("src/test/resources/features/examples.feature:Scenario with Positive Examples") + ) + ); + } + @AllureFeatures.Parallel @Test void shouldProcessScenariosInParallelMode() { @@ -581,30 +618,33 @@ void shouldProcessScenariosInParallelMode() { .hasSize(3); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 1", - "And b is 3", - "When I add a to b", - "Then result is 4") + "Given a is 1", + "And b is 3", + "When I add a to b", + "Then result is 4" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 2", - "And b is 4", - "When I add a to b", - "Then result is 6") + "Given a is 2", + "And b is 4", + "When I add a to b", + "Then result is 6" ); assertThat(testResults) - .extracting(testResult -> testResult.getSteps().stream().map(StepResult::getName).collect(Collectors.toList())) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) .containsSubsequence( - Arrays.asList("Given a is 7", - "And b is 8", - "When I add a to b", - "Then result is 15") + "Given a is 7", + "And b is 8", + "When I add a to b", + "Then result is 15" ); } @@ -615,64 +655,61 @@ void shouldDisplayHooksAsStages() { final AllureResults results = runFeature("features/hooks.feature", "-t", "@WithHooks or @BeforeHookWithException or @AfterHookWithException"); - final List testResults = results.getTestResults(); - assertThat(testResults) - .extracting(TestResult::getName, TestResult::getStatus) - .containsExactlyInAnyOrder( - tuple("Simple scenario with Before and After hooks", Status.PASSED), - tuple("Simple scenario with Before hook with Exception", Status.SKIPPED), - tuple("Simple scenario with After hook with Exception", Status.BROKEN) - ); + final TestResult tr1 = results.getTestResultByName("Simple scenario with Before and After hooks"); + final TestResult tr2 = results.getTestResultByName("Simple scenario with Before hook with Exception"); + final TestResult tr3 = results.getTestResultByName("Simple scenario with After hook with Exception"); - assertThat(testResults.get(0).getSteps()) + assertThat(tr1.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - - assertThat(results.getTestResultContainers().get(0).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber7jvm.samples.HookSteps.beforeHook()", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(0).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr1)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber7jvm.samples.HookSteps.afterHook()", Status.PASSED) ); - assertThat(testResults.get(1).getSteps()) + assertThat(tr2.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.SKIPPED), - tuple("And b is 8", Status.SKIPPED), - tuple("When I add a to b", Status.SKIPPED), - tuple("Then result is 15", Status.SKIPPED) + tuple("Given a is 7", Status.SKIPPED), + tuple("And b is 8", Status.SKIPPED), + tuple("When I add a to b", Status.SKIPPED), + tuple("Then result is 15", Status.SKIPPED) ); - assertThat(results.getTestResultContainers().get(1).getBefores()) + assertThat(results.getTestResultContainersForTestResult(tr2)) + .flatExtracting(TestResultContainer::getBefores) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber7jvm.samples.HookSteps.beforeHookWithException()", Status.FAILED) ); - - assertThat(testResults.get(2).getSteps()) + assertThat(tr3.getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactlyInAnyOrder( - tuple("Given a is 7", Status.PASSED), - tuple("And b is 8", Status.PASSED), - tuple("When I add a to b", Status.PASSED), - tuple("Then result is 15", Status.PASSED) + tuple("Given a is 7", Status.PASSED), + tuple("And b is 8", Status.PASSED), + tuple("When I add a to b", Status.PASSED), + tuple("Then result is 15", Status.PASSED) ); - assertThat(results.getTestResultContainers().get(2).getAfters()) + assertThat(results.getTestResultContainersForTestResult(tr3)) + .flatExtracting(TestResultContainer::getAfters) .extracting(FixtureResult::getName, FixtureResult::getStatus) .containsExactlyInAnyOrder( tuple("io.qameta.allure.cucumber7jvm.samples.HookSteps.afterHookWithException()", Status.FAILED) @@ -689,14 +726,14 @@ void shouldHandleAmbigiousStepsExceptions() { assertThat(testResults) .extracting(TestResult::getName, TestResult::getStatus) .containsExactlyInAnyOrder( - tuple("Simple scenario with ambigious steps", Status.SKIPPED) + tuple("Simple scenario with ambigious steps", null) ); assertThat(testResults.get(0).getSteps()) .extracting(StepResult::getName, StepResult::getStatus) .containsExactly( - tuple("When ambigious step present", null), - tuple("Then something bad should happen", Status.SKIPPED) + tuple("When ambigious step present", null), + tuple("Then something bad should happen", Status.SKIPPED) ); } @@ -716,43 +753,67 @@ void shouldSupportProvidedLabels() { ); } - @SystemProperty(name = "cucumber.junit-platform.naming-strategy", value = "long") - @Step - private AllureResults runFeature(final String featureResource, - final String... moreOptions) { - - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - - final AllureLifecycle lifecycle = new AllureLifecycle(writer); - final AllureCucumber7Jvm cucumber7jvm = new AllureCucumber7Jvm(lifecycle); - final Supplier classLoader = ClassLoaders::getDefaultClassLoader; - final List opts = new ArrayList<>(Arrays.asList( - "--glue", "io.qameta.allure.cucumber7jvm.samples", - "--no-summary" - )); - opts.addAll(Arrays.asList(moreOptions)); - final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); - final RuntimeOptions options = new CommandlineOptionsParser(System.out) - .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); + @Test + void shouldSupportRuntimeApiInStepsWhenHooksAreUsed() { + final AllureResults results = runFeature("features/runtimeapi.feature"); - final EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID); - final FeatureParser parser = new FeatureParser(bus::generateId); - final FeaturePathFeatureSupplier supplier - = new FeaturePathFeatureSupplier(classLoader, options, parser); + final List testResults = results.getTestResults(); - final Runtime runtime = Runtime.builder() - .withClassLoader(classLoader) - .withRuntimeOptions(options) - .withAdditionalPlugins(cucumber7jvm) - .withFeatureSupplier(supplier) - .build(); + assertThat(testResults) + .hasSize(1) + .flatExtracting(TestResult::getSteps) + .extracting(StepResult::getName) + .containsExactly( + "When step 1", + "When step 2", + "And step 3", + "Then step 4", + "And step 5" + ); - runtime.run(); + assertThat(testResults) + .flatExtracting(TestResult::getLinks) + .extracting(Link::getName, Link::getUrl) + .containsExactly( + tuple("step1", "https://example.org/step1"), + tuple("step2", "https://example.org/step2"), + tuple("step3", "https://example.org/step3"), + tuple("step4", "https://example.org/step4"), + tuple("step5", "https://example.org/step5") + ); + } - AllureTestCommonsUtils.attach(writer); + @SystemProperty(name = "cucumber.junit-platform.naming-strategy", value = "long") + @Step + private AllureResults runFeature(final String featureResource, + final String... moreOptions) { - return writer; + return RunUtils.runTests(lifecycle -> { + final AllureCucumber7Jvm cucumber7jvm = new AllureCucumber7Jvm(lifecycle); + final Supplier classLoader = ClassLoaders::getDefaultClassLoader; + final List opts = new ArrayList<>(Arrays.asList( + "--glue", "io.qameta.allure.cucumber7jvm.samples", + "--no-summary" + )); + opts.addAll(Arrays.asList(moreOptions)); + final FeatureWithLines featureWithLines = FeatureWithLines.parse("src/test/resources/" + featureResource); + final RuntimeOptions options = new CommandlineOptionsParser(System.out) + .parse(opts.toArray(new String[]{})).addFeature(featureWithLines).build(); + + final EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID); + final FeatureParser parser = new FeatureParser(bus::generateId); + final FeaturePathFeatureSupplier supplier + = new FeaturePathFeatureSupplier(classLoader, options, parser); + + final Runtime runtime = Runtime.builder() + .withClassLoader(classLoader) + .withRuntimeOptions(options) + .withAdditionalPlugins(cucumber7jvm) + .withFeatureSupplier(supplier) + .build(); + + runtime.run(); + }); } - } diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AmbigiousSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AmbigiousSteps.java index c74d4c10d..2358228cd 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AmbigiousSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AmbigiousSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AttachmentSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AttachmentSteps.java index c0242a460..0c8d10141 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AttachmentSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/AttachmentSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BackgroundFeatureSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BackgroundFeatureSteps.java index 5442225d0..f1a6f01f5 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BackgroundFeatureSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BackgroundFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BrokenFeatureSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BrokenFeatureSteps.java index df3f7042b..206f927f7 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BrokenFeatureSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/BrokenFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/DatatableFeatureSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/DatatableFeatureSteps.java index ae937b57f..30e7e406e 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/DatatableFeatureSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/DatatableFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/HookSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/HookSteps.java index 247572252..072c7d810 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/HookSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/HookSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/PendingSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/PendingSteps.java index 060e5c1dc..c55390ed0 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/PendingSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/PendingSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/RuntimeApiSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/RuntimeApiSteps.java new file mode 100644 index 000000000..0f66fa87c --- /dev/null +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/RuntimeApiSteps.java @@ -0,0 +1,83 @@ +/* + * Copyright 2016-2024 Qameta Software Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.qameta.allure.cucumber7jvm.samples; + +import io.cucumber.java.Before; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import io.cucumber.java.en.And; +import io.qameta.allure.Allure; + +/** + * @author charlie (Dmitry Baev). + */ +public class RuntimeApiSteps { + + @Before("@beforeScenario") + public void beforeScenario(){ + // nothing + } + + @Before("@beforeFeature") + public void beforeFeature(){ + // nothing + } + + @When("^step 1$") + public void step1() { + Allure.step("step1 nested"); + Allure.link("step1", "https://example.org/step1"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step1: " + uuid); + }); + } + + @When("^step 2$") + public void step2() { + Allure.step("step2 nested"); + Allure.link("step2", "https://example.org/step2"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step2: " + uuid); + }); + } + + @And("^step 3$") + public void step3() { + Allure.step("step3 nested"); + Allure.link("step3", "https://example.org/step3"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step3: " + uuid); + }); + } + + @Then("^step 4$") + public void step4() { + Allure.step("step4 nested"); + Allure.link("step4", "https://example.org/step4"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step4: " + uuid); + }); + } + + @And("^step 5$") + public void step5() { + Allure.step("step5 nested"); + Allure.link("step5", "https://example.org/step5"); + Allure.getLifecycle().getCurrentTestCase().ifPresent(uuid -> { + System.out.println("step5: " + uuid); + }); + } +} diff --git a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/SimpleFeatureSteps.java b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/SimpleFeatureSteps.java index 69d63049b..9212f0318 100644 --- a/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/SimpleFeatureSteps.java +++ b/allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/samples/SimpleFeatureSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-cucumber7-jvm/src/test/resources/features/runtimeapi.feature b/allure-cucumber7-jvm/src/test/resources/features/runtimeapi.feature new file mode 100644 index 000000000..ec43eccb7 --- /dev/null +++ b/allure-cucumber7-jvm/src/test/resources/features/runtimeapi.feature @@ -0,0 +1,10 @@ +@beforeFeature +Feature: Should support runtime API in all steps + + @beforeScenario + Scenario: Scenario with Runtime API usage + When step 1 + When step 2 + And step 3 + Then step 4 + And step 5 diff --git a/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/ClassNames.java b/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/ClassNames.java index a6b225139..5bdaf305c 100644 --- a/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/ClassNames.java +++ b/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/ClassNames.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/JavaDocDescriptionsProcessor.java b/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/JavaDocDescriptionsProcessor.java index 32ce95707..b4487310e 100644 --- a/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/JavaDocDescriptionsProcessor.java +++ b/allure-descriptions-javadoc/src/main/java/io/qameta/allure/description/JavaDocDescriptionsProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-descriptions-javadoc/src/test/java/io/qameta/allure/description/ProcessDescriptionsTest.java b/allure-descriptions-javadoc/src/test/java/io/qameta/allure/description/ProcessDescriptionsTest.java index ff8f7dbdc..4b3b5fc90 100644 --- a/allure-descriptions-javadoc/src/test/java/io/qameta/allure/description/ProcessDescriptionsTest.java +++ b/allure-descriptions-javadoc/src/test/java/io/qameta/allure/description/ProcessDescriptionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-grpc/src/main/java/io/qameta/allure/grpc/AllureGrpc.java b/allure-grpc/src/main/java/io/qameta/allure/grpc/AllureGrpc.java index d394a16aa..1217dcf92 100644 --- a/allure-grpc/src/main/java/io/qameta/allure/grpc/AllureGrpc.java +++ b/allure-grpc/src/main/java/io/qameta/allure/grpc/AllureGrpc.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcRequestAttachment.java b/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcRequestAttachment.java index ef32e4dde..39eeb7213 100644 --- a/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcRequestAttachment.java +++ b/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcRequestAttachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcResponseAttachment.java b/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcResponseAttachment.java index 7824d9ee2..ffd2a9b33 100644 --- a/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcResponseAttachment.java +++ b/allure-grpc/src/main/java/io/qameta/allure/grpc/GrpcResponseAttachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-grpc/src/test/java/io/qameta/allure/grpc/AllureGrpcTest.java b/allure-grpc/src/test/java/io/qameta/allure/grpc/AllureGrpcTest.java index f75df916b..6c83b9f03 100644 --- a/allure-grpc/src/test/java/io/qameta/allure/grpc/AllureGrpcTest.java +++ b/allure-grpc/src/test/java/io/qameta/allure/grpc/AllureGrpcTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-hamcrest/src/main/java/io/qameta/allure/hamcrest/AllureHamcrestAssert.java b/allure-hamcrest/src/main/java/io/qameta/allure/hamcrest/AllureHamcrestAssert.java index cf836d8f1..d78020e78 100644 --- a/allure-hamcrest/src/main/java/io/qameta/allure/hamcrest/AllureHamcrestAssert.java +++ b/allure-hamcrest/src/main/java/io/qameta/allure/hamcrest/AllureHamcrestAssert.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestAssertionNameContainsReasonTest.java b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestAssertionNameContainsReasonTest.java index 6086258f9..f04ba4d74 100644 --- a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestAssertionNameContainsReasonTest.java +++ b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestAssertionNameContainsReasonTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestCollectionsMatchersTest.java b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestCollectionsMatchersTest.java index 805b593c4..a8c07b827 100644 --- a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestCollectionsMatchersTest.java +++ b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestCollectionsMatchersTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestLogicalMatchersTest.java b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestLogicalMatchersTest.java index f2c810425..5d0a376d1 100644 --- a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestLogicalMatchersTest.java +++ b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestLogicalMatchersTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestNumberMatchersTest.java b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestNumberMatchersTest.java index c6d43e44c..f5fa62efa 100644 --- a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestNumberMatchersTest.java +++ b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestNumberMatchersTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestObjectMatchersTest.java b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestObjectMatchersTest.java index 3b0170d24..44d468b1c 100644 --- a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestObjectMatchersTest.java +++ b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestObjectMatchersTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestTextMatchersTest.java b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestTextMatchersTest.java index ec401a53b..cddd89106 100644 --- a/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestTextMatchersTest.java +++ b/allure-hamcrest/src/test/java/io/qameta/allure/hamcrest/AllureHamcrestTextMatchersTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientRequest.java b/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientRequest.java index 5dc0fdd9e..fdbbc52fc 100644 --- a/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientRequest.java +++ b/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java b/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java index f75891181..1eb4bfe75 100644 --- a/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java +++ b/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java b/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java index d7e56ea95..ddc3019ed 100644 --- a/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java +++ b/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Request.java b/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Request.java index d593c4576..2e4ab5584 100644 --- a/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Request.java +++ b/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Request.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Response.java b/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Response.java index 97e6c1c86..bf5bff643 100644 --- a/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Response.java +++ b/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpClient5Response.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpEntityUtils.java b/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpEntityUtils.java index 342093031..43297a28c 100644 --- a/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpEntityUtils.java +++ b/allure-httpclient5/src/main/java/io/qameta/allure/httpclient5/AllureHttpEntityUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5DeleteTest.java b/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5DeleteTest.java index 453b57bc4..364ea253f 100644 --- a/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5DeleteTest.java +++ b/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5DeleteTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5GetTest.java b/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5GetTest.java index 4453f2e49..301e13862 100644 --- a/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5GetTest.java +++ b/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5GetTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5PostTest.java b/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5PostTest.java index 7220171dc..6b73e36dd 100644 --- a/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5PostTest.java +++ b/allure-httpclient5/src/test/java/io/qameta/allure/httpclient5/AllureHttpClient5PostTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureFeatures.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureFeatures.java index d4641dcc8..9ea66a2fb 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureFeatures.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureFeatures.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllurePredicates.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllurePredicates.java index f59a9581d..4cd1ce35d 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllurePredicates.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllurePredicates.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResults.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResults.java index d0a22173f..a836a04d7 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResults.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResults.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,9 @@ import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Objects; +import java.util.stream.Collectors; /** * @author charlie (Dmitry Baev). @@ -32,4 +35,20 @@ public interface AllureResults { Map getAttachments(); + default TestResult getTestResultByName(final String name) { + return getTestResults().stream() + .filter(tr -> Objects.equals(name, tr.getName())) + .findFirst() + .orElseThrow(() -> new NoSuchElementException( + "test result with name " + name + " is not found" + )); + } + + default List getTestResultContainersForTestResult(final TestResult testResult) { + return getTestResultContainers().stream() + .filter(c -> Objects.nonNull(c.getChildren())) + .filter(c -> c.getChildren().contains(testResult.getUuid())) + .collect(Collectors.toList()); + } + } diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResultsWriterStub.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResultsWriterStub.java index 0e560c932..cdbfcd85f 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResultsWriterStub.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResultsWriterStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureTestCommonsUtils.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureTestCommonsUtils.java index 3020f34f5..e0e65881b 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureTestCommonsUtils.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureTestCommonsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,16 +15,25 @@ */ package io.qameta.allure.test; +import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import io.qameta.allure.Allure; import io.qameta.allure.AllureConstants; +import io.qameta.allure.model.Parameter; +import io.qameta.allure.model.Stage; +import io.qameta.allure.model.Status; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.UncheckedIOException; +import java.util.Locale; -import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_DEFAULT; import static com.fasterxml.jackson.databind.MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME; /** @@ -35,8 +44,13 @@ public final class AllureTestCommonsUtils { private static final ObjectWriter WRITER = JsonMapper .builder() .configure(USE_WRAPPER_NAME_AS_PROPERTY_NAME, true) - .serializationInclusion(NON_NULL) + .serializationInclusion(NON_DEFAULT) .build() + .registerModule(new SimpleModule() + .addSerializer(Status.class, new StatusSerializer()) + .addSerializer(Stage.class, new StageSerializer()) + .addSerializer(Parameter.Mode.class, new ParameterModeSerializer()) + ) .writerWithDefaultPrettyPrinter(); private AllureTestCommonsUtils() { @@ -77,4 +91,52 @@ public static void attach(final AllureResults allureResults) { ); } + /** + * Parameter mode serializer. + */ + private static class ParameterModeSerializer extends StdSerializer { + protected ParameterModeSerializer() { + super(Parameter.Mode.class); + } + + @Override + public void serialize(final Parameter.Mode value, + final JsonGenerator gen, + final SerializerProvider provider) throws IOException { + gen.writeString(value.name().toLowerCase(Locale.ENGLISH)); + } + } + + /** + * Stage serializer. + */ + private static class StageSerializer extends StdSerializer { + protected StageSerializer() { + super(Stage.class); + } + + @Override + public void serialize(final Stage value, + final JsonGenerator gen, + final SerializerProvider provider) throws IOException { + gen.writeString(value.name().toLowerCase(Locale.ENGLISH)); + } + } + + /** + * Status serializer. + */ + private static class StatusSerializer extends StdSerializer { + protected StatusSerializer() { + super(Status.class); + } + + @Override + public void serialize(final Status value, + final JsonGenerator gen, + final SerializerProvider provider) throws IOException { + gen.writeString(value.name().toLowerCase(Locale.ENGLISH)); + } + } + } diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/RunUtils.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/RunUtils.java index 27eae0ccf..3905c64a7 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/RunUtils.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/RunUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,12 +17,15 @@ import io.qameta.allure.Allure; import io.qameta.allure.AllureLifecycle; +import io.qameta.allure.AllureResultsWriter; import io.qameta.allure.aspects.AttachmentsAspects; import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.model.TestResult; +import io.qameta.allure.util.ExceptionUtils; import java.util.UUID; import java.util.function.Consumer; +import java.util.function.Function; import java.util.stream.Stream; import static io.qameta.allure.util.ResultsUtils.getStatus; @@ -37,8 +40,21 @@ private RunUtils() { throw new IllegalStateException("do not instance"); } - public static AllureResults runWithinTestContext(final Runnable runnable) { - return runWithinTestContext( + public static AllureResults runTests( + final Allure.ThrowableContextRunnableVoid runnable) { + return runTests( + runnable, + Allure::setLifecycle, + StepsAspects::setLifecycle, + AttachmentsAspects::setLifecycle + ); + } + + public static AllureResults runTests( + final Function lifecycleFactory, + final Allure.ThrowableContextRunnableVoid runnable) { + return runTests( + lifecycleFactory, runnable, Allure::setLifecycle, StepsAspects::setLifecycle, @@ -47,18 +63,67 @@ public static AllureResults runWithinTestContext(final Runnable runnable) { } @SafeVarargs - public static AllureResults runWithinTestContext(final Runnable runnable, - final Consumer... configurers) { + public static AllureResults runTests( + final Allure.ThrowableContextRunnableVoid runnable, + final Consumer... configurers) { + return runTests(AllureLifecycle::new, runnable, configurers); + } + + @SafeVarargs + public static AllureResults runTests( + final Function lifecycleFactory, + final Allure.ThrowableContextRunnableVoid runnable, + final Consumer... configurers) { final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writer); + final AllureLifecycle lifecycle = lifecycleFactory.apply(writer); + + final AllureLifecycle defaultLifecycle = Allure.getLifecycle(); + try { + Stream.of(configurers).forEach(configurer -> configurer.accept(lifecycle)); + + runnable.run(lifecycle); + + return writer; + } catch (Throwable e) { + throw ExceptionUtils.sneakyThrow(e); + } finally { + Stream.of(configurers).forEach(configurer -> configurer.accept(defaultLifecycle)); + AllureTestCommonsUtils.attach(writer); + } + } + + public static AllureResults runWithinTestContext( + final Runnable runnable) { + return runTests(lifecycle -> withTestContext(runnable, lifecycle)); + } + + public static AllureResults runWithinTestContext( + final Function lifecycleFactory, + final Runnable runnable) { + return runTests(lifecycleFactory, lifecycle -> withTestContext(runnable, lifecycle)); + } + + @SafeVarargs + public static AllureResults runWithinTestContext( + final Runnable runnable, + final Consumer... configurers) { + return runTests(lifecycle -> withTestContext(runnable, lifecycle), configurers); + } + + @SafeVarargs + public static AllureResults runWithinTestContext( + final Function lifecycleFactory, + final Runnable runnable, + final Consumer... configurers) { + return runTests(lifecycleFactory, lifecycle -> withTestContext(runnable, lifecycle), configurers); + } + + private static void withTestContext(final Runnable runnable, final AllureLifecycle lifecycle) { final String uuid = UUID.randomUUID().toString(); final TestResult result = new TestResult().setUuid(uuid); - final AllureLifecycle cached = Allure.getLifecycle(); try { - Stream.of(configurers).forEach(configurer -> configurer.accept(lifecycle)); - lifecycle.scheduleTestCase(result); lifecycle.startTestCase(uuid); @@ -72,11 +137,7 @@ public static AllureResults runWithinTestContext(final Runnable runnable, } finally { lifecycle.stopTestCase(uuid); lifecycle.writeTestCase(uuid); - - Stream.of(configurers).forEach(configurer -> configurer.accept(cached)); } - - return writer; } } diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/TestData.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/TestData.java index 3748458f8..ce23958a4 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/TestData.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/TestData.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons-test/src/main/java/io/qameta/allure/test/ThreadLocalEnhancedRandom.java b/allure-java-commons-test/src/main/java/io/qameta/allure/test/ThreadLocalEnhancedRandom.java index d0be47326..092c183e9 100644 --- a/allure-java-commons-test/src/main/java/io/qameta/allure/test/ThreadLocalEnhancedRandom.java +++ b/allure-java-commons-test/src/main/java/io/qameta/allure/test/ThreadLocalEnhancedRandom.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Allure.java b/allure-java-commons/src/main/java/io/qameta/allure/Allure.java index 21c90d2fa..445d8b2c4 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Allure.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Allure.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -185,8 +185,7 @@ public static T step(final ThrowableContextRunnable runnable getLifecycle().updateStep(s -> s .setStatus(getStatus(throwable).orElse(Status.BROKEN)) .setStatusDetails(getStatusDetails(throwable).orElse(null))); - ExceptionUtils.sneakyThrow(throwable); - return null; + throw ExceptionUtils.sneakyThrow(throwable); } finally { getLifecycle().stopStep(uuid); } diff --git a/allure-java-commons/src/main/java/io/qameta/allure/AllureConstants.java b/allure-java-commons/src/main/java/io/qameta/allure/AllureConstants.java index 7e432af99..8b3b8cdc8 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/AllureConstants.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/AllureConstants.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/AllureId.java b/allure-java-commons/src/main/java/io/qameta/allure/AllureId.java index cd5786aac..3ca5b245a 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/AllureId.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/AllureId.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/AllureLifecycle.java b/allure-java-commons/src/main/java/io/qameta/allure/AllureLifecycle.java index 5b9e0065f..bea1d4dce 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/AllureLifecycle.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/AllureLifecycle.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriteException.java b/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriteException.java index ca3b92180..0dd0b5ef1 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriteException.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriteException.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriter.java b/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriter.java index e997fd492..9e266b383 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriter.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/AllureResultsWriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Attachment.java b/allure-java-commons/src/main/java/io/qameta/allure/Attachment.java index 848ba4f4c..b08ed83ed 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Attachment.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Attachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Description.java b/allure-java-commons/src/main/java/io/qameta/allure/Description.java index 7ee351433..3f83f6855 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Description.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Description.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Epic.java b/allure-java-commons/src/main/java/io/qameta/allure/Epic.java index c6515b41e..851c90f56 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Epic.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Epic.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Epics.java b/allure-java-commons/src/main/java/io/qameta/allure/Epics.java index 8e462ca77..2ea16dbdb 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Epics.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Epics.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Feature.java b/allure-java-commons/src/main/java/io/qameta/allure/Feature.java index b340558de..d938062bc 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Feature.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Feature.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Features.java b/allure-java-commons/src/main/java/io/qameta/allure/Features.java index 4c6795e79..8c80d6399 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Features.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Features.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/FileSystemResultsWriter.java b/allure-java-commons/src/main/java/io/qameta/allure/FileSystemResultsWriter.java index 3e361b07b..187f39dc0 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/FileSystemResultsWriter.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/FileSystemResultsWriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Flaky.java b/allure-java-commons/src/main/java/io/qameta/allure/Flaky.java index 3d6748826..f1fc21733 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Flaky.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Flaky.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Issue.java b/allure-java-commons/src/main/java/io/qameta/allure/Issue.java index f795897c7..9abe55616 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Issue.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Issue.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Issues.java b/allure-java-commons/src/main/java/io/qameta/allure/Issues.java index 2ab62c75b..c70da23de 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Issues.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Issues.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotation.java b/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotation.java index 294108077..36a28f031 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotation.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotations.java b/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotations.java index 8afd77f89..5a63ee889 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotations.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/LabelAnnotations.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Lead.java b/allure-java-commons/src/main/java/io/qameta/allure/Lead.java index 760f61bc2..30c95c176 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Lead.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Lead.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Link.java b/allure-java-commons/src/main/java/io/qameta/allure/Link.java index b0b4dacb6..d48f8b873 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Link.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Link.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotation.java b/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotation.java index e646de636..f8ef85974 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotation.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotations.java b/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotations.java index 50428d1c8..e4df3187a 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotations.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/LinkAnnotations.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Links.java b/allure-java-commons/src/main/java/io/qameta/allure/Links.java index 4e0c977d9..b85c39857 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Links.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Links.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Muted.java b/allure-java-commons/src/main/java/io/qameta/allure/Muted.java index 16ac6f222..42ab5879a 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Muted.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Muted.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Owner.java b/allure-java-commons/src/main/java/io/qameta/allure/Owner.java index d0eea5eb4..cce5b56a2 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Owner.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Owner.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Param.java b/allure-java-commons/src/main/java/io/qameta/allure/Param.java index 33e34f5bc..5c03f1f33 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Param.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Param.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Severity.java b/allure-java-commons/src/main/java/io/qameta/allure/Severity.java index 767bc0b90..d34ca0e26 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Severity.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Severity.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/SeverityLevel.java b/allure-java-commons/src/main/java/io/qameta/allure/SeverityLevel.java index eb8e3a0b6..ad7bcd152 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/SeverityLevel.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/SeverityLevel.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Step.java b/allure-java-commons/src/main/java/io/qameta/allure/Step.java index 1fec2ab71..2ddcc2e33 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Step.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Step.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Stories.java b/allure-java-commons/src/main/java/io/qameta/allure/Stories.java index e9f376d94..9e990597c 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Stories.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Stories.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/Story.java b/allure-java-commons/src/main/java/io/qameta/allure/Story.java index bf74c5ceb..929485db8 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/Story.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/Story.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/TmsLink.java b/allure-java-commons/src/main/java/io/qameta/allure/TmsLink.java index d5e839017..f4f3b68d2 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/TmsLink.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/TmsLink.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/TmsLinks.java b/allure-java-commons/src/main/java/io/qameta/allure/TmsLinks.java index 1253436b4..f364bab76 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/TmsLinks.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/TmsLinks.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/aspects/AttachmentsAspects.java b/allure-java-commons/src/main/java/io/qameta/allure/aspects/AttachmentsAspects.java index 617eae770..02b4ac000 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/aspects/AttachmentsAspects.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/aspects/AttachmentsAspects.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/aspects/StepsAspects.java b/allure-java-commons/src/main/java/io/qameta/allure/aspects/StepsAspects.java index 407c82d40..965a93814 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/aspects/StepsAspects.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/aspects/StepsAspects.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/internal/Allure2ModelJackson.java b/allure-java-commons/src/main/java/io/qameta/allure/internal/Allure2ModelJackson.java index 6613230ca..b3e490bf8 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/internal/Allure2ModelJackson.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/internal/Allure2ModelJackson.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureStorage.java b/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureStorage.java index a72614684..5ae89b1e1 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureStorage.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureStorage.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureThreadContext.java b/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureThreadContext.java index cc7236a79..bbf94fd4e 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureThreadContext.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/internal/AllureThreadContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -79,7 +79,7 @@ public void clear() { /** * Thread local context that stores information about not finished tests and steps. */ - private static class Context extends InheritableThreadLocal> { + private static final class Context extends InheritableThreadLocal> { @Override public LinkedList initialValue() { diff --git a/allure-java-commons/src/main/java/io/qameta/allure/listener/ContainerLifecycleListener.java b/allure-java-commons/src/main/java/io/qameta/allure/listener/ContainerLifecycleListener.java index 73db041ad..e8cca6af8 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/listener/ContainerLifecycleListener.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/listener/ContainerLifecycleListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/listener/FixtureLifecycleListener.java b/allure-java-commons/src/main/java/io/qameta/allure/listener/FixtureLifecycleListener.java index cb2e70558..39296505a 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/listener/FixtureLifecycleListener.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/listener/FixtureLifecycleListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleListener.java b/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleListener.java index b6930873b..b411081f2 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleListener.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleNotifier.java b/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleNotifier.java index 92f56097a..d74a3107d 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleNotifier.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/listener/LifecycleNotifier.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/listener/StepLifecycleListener.java b/allure-java-commons/src/main/java/io/qameta/allure/listener/StepLifecycleListener.java index f59b5b812..e304beab3 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/listener/StepLifecycleListener.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/listener/StepLifecycleListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/listener/TestLifecycleListener.java b/allure-java-commons/src/main/java/io/qameta/allure/listener/TestLifecycleListener.java index 12a0b1ea6..bed90719b 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/listener/TestLifecycleListener.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/listener/TestLifecycleListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/AnnotationUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/AnnotationUtils.java index b575111e0..d241a4683 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/AnnotationUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/AnnotationUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/AspectUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/AspectUtils.java index 640298f9d..ea6396924 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/AspectUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/AspectUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/ExceptionUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/ExceptionUtils.java index 4764b04f2..f644cf7e7 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/ExceptionUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/ExceptionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ private ExceptionUtils() { } @SuppressWarnings("unchecked") - public static void sneakyThrow(final Throwable throwable) throws T { + public static T sneakyThrow(final Throwable throwable) throws T { throw (T) throwable; } } diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/NamingUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/NamingUtils.java index f52209b51..ba129a460 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/NamingUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/NamingUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/ObjectUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/ObjectUtils.java index 5c7eccf0b..f20f935e8 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/ObjectUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/ObjectUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/ParameterUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/ParameterUtils.java index f0e68f7ec..2cb2687c9 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/ParameterUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/ParameterUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/PropertiesUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/PropertiesUtils.java index cd8b4d657..da96fe87b 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/PropertiesUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/PropertiesUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/ResultsUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/ResultsUtils.java index aa86319d2..8d8acd47c 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/ResultsUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/ResultsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/main/java/io/qameta/allure/util/ServiceLoaderUtils.java b/allure-java-commons/src/main/java/io/qameta/allure/util/ServiceLoaderUtils.java index 64d09f047..c6ff3c5b9 100644 --- a/allure-java-commons/src/main/java/io/qameta/allure/util/ServiceLoaderUtils.java +++ b/allure-java-commons/src/main/java/io/qameta/allure/util/ServiceLoaderUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/AllureLifecycleTest.java b/allure-java-commons/src/test/java/io/qameta/allure/AllureLifecycleTest.java index 35ea19d86..0a06dd32b 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/AllureLifecycleTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/AllureLifecycleTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,8 @@ import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; import io.qameta.allure.model.TestResultContainer; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.AllureResults; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -34,7 +35,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.UUID; +import java.util.Optional; import java.util.concurrent.Callable; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArrayList; @@ -46,7 +47,6 @@ import java.util.stream.Collectors; import static io.qameta.allure.Allure.addStreamAttachmentAsync; -import static io.qameta.allure.Allure.setLifecycle; import static io.qameta.allure.test.TestData.randomId; import static io.qameta.allure.test.TestData.randomName; import static io.qameta.allure.test.TestData.randomString; @@ -71,6 +71,23 @@ public void setUp() { lifecycle = new AllureLifecycle(writer); } + @Test + void shouldReturnCurrentTestCaseId() { + final String uuid = randomId(); + final String name = randomName(); + final TestResult result = new TestResult().setUuid(uuid).setName(name); + lifecycle.scheduleTestCase(result); + lifecycle.startTestCase(uuid); + + final String stepUuid = randomId(); + lifecycle.startStep(uuid, stepUuid, new StepResult().setName(randomName())); + + final Optional currentTestCase = lifecycle.getCurrentTestCase(); + assertThat(currentTestCase) + .isPresent() + .hasValue(uuid); + } + @Test void shouldCreateTest() { final String uuid = randomId(); @@ -296,36 +313,24 @@ void shouldCreateTestFixture() { .containsExactly(firstStepName, secondStepName); } - @SuppressWarnings("OptionalGetWithoutIsPresent") @Test void shouldAttachAsync() { final List> features = new CopyOnWriteArrayList<>(); - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - - final AllureLifecycle lifecycle = new AllureLifecycle(writer); - setLifecycle(lifecycle); - - final String uuid = UUID.randomUUID().toString(); - final TestResult result = new TestResult().setUuid(uuid); - - lifecycle.scheduleTestCase(result); - lifecycle.startTestCase(uuid); - - final String attachment1Content = randomString(100); - final String attachment2Content = randomString(100); final String attachment1Name = randomName(); final String attachment2Name = randomName(); - features.add(addStreamAttachmentAsync( - attachment1Name, "video/mp4", getStreamWithTimeout(2, attachment1Content))); - features.add(addStreamAttachmentAsync( - attachment2Name, "text/plain", getStreamWithTimeout(1, attachment2Content))); + final String attachment1Content = randomString(100); + final String attachment2Content = randomString(100); - lifecycle.stopTestCase(uuid); - lifecycle.writeTestCase(uuid); + final AllureResults writer = RunUtils.runWithinTestContext(() -> { + features.add(addStreamAttachmentAsync( + attachment1Name, "video/mp4", getStreamWithTimeout(2, attachment1Content))); + features.add(addStreamAttachmentAsync( + attachment2Name, "text/plain", getStreamWithTimeout(1, attachment2Content))); - allOf(features.toArray(new CompletableFuture[0])).join(); + allOf(features.toArray(new CompletableFuture[0])).join(); + }); final List attachments = writer.getTestResults().stream() .map(TestResult::getAttachments) @@ -351,7 +356,7 @@ void shouldAttachAsync() { final io.qameta.allure.model.Attachment attachment1 = attachments.stream() .filter(attachment -> Objects.equals(attachment.getName(), attachment1Name)) .findAny() - .get(); + .orElseThrow(); final byte[] actual1 = attachmentFiles.get(attachment1.getSource()); @@ -361,7 +366,7 @@ void shouldAttachAsync() { final Attachment attachment2 = attachments.stream() .filter(attachment -> Objects.equals(attachment.getName(), attachment2Name)) .findAny() - .get(); + .orElseThrow(); final byte[] actual2 = attachmentFiles.get(attachment2.getSource()); diff --git a/allure-java-commons/src/test/java/io/qameta/allure/AllureTest.java b/allure-java-commons/src/test/java/io/qameta/allure/AllureTest.java index 9e874187c..a4b8afa51 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/AllureTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/AllureTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/FileSystemResultsWriterTest.java b/allure-java-commons/src/test/java/io/qameta/allure/FileSystemResultsWriterTest.java index 9c0b103c6..d4bc5bda0 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/FileSystemResultsWriterTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/FileSystemResultsWriterTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/ResultsUtilsTest.java b/allure-java-commons/src/test/java/io/qameta/allure/ResultsUtilsTest.java index 44b77706b..3e70d0a03 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/ResultsUtilsTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/ResultsUtilsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/StepLifecycleListenerTest.java b/allure-java-commons/src/test/java/io/qameta/allure/StepLifecycleListenerTest.java index 5a325a5f0..0a0ba0f78 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/StepLifecycleListenerTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/StepLifecycleListenerTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,6 @@ */ package io.qameta.allure; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.listener.LifecycleNotifier; import io.qameta.allure.listener.StepLifecycleListener; import io.qameta.allure.model.Attachment; @@ -23,17 +22,13 @@ import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Test; -import java.util.UUID; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; -import static io.qameta.allure.util.ResultsUtils.getStatus; -import static io.qameta.allure.util.ResultsUtils.getStatusDetails; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; /** @@ -133,45 +128,12 @@ public void beforeStepStop(final StepResult result) { } protected AllureResults run(final StepLifecycleListener listener, final String... steps) { - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - final LifecycleNotifier notifier = new LifecycleNotifier( - emptyList(), - emptyList(), - emptyList(), - singletonList(listener) + return RunUtils.runWithinTestContext( + writer -> new AllureLifecycle( + writer, + new LifecycleNotifier(List.of(), List.of(), List.of(), List.of(listener)) + ), + () -> Stream.of(steps).forEach(step -> Allure.step(step, Status.PASSED)) ); - final AllureLifecycle lifecycle = new AllureLifecycle(writer, notifier); - - final String uuid = UUID.randomUUID().toString(); - final TestResult result = new TestResult().setUuid(uuid); - - final AllureLifecycle cached = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - - lifecycle.scheduleTestCase(result); - lifecycle.startTestCase(uuid); - - Stream.of(steps).forEach(step -> { - final String stepUuid = UUID.randomUUID().toString(); - lifecycle.startStep(stepUuid, new StepResult().setName(step).setStatus(Status.PASSED)); - lifecycle.stopStep(stepUuid); - }); - } catch (Throwable e) { - lifecycle.updateTestCase(uuid, testResult -> { - getStatus(e).ifPresent(testResult::setStatus); - getStatusDetails(e).ifPresent(testResult::setStatusDetails); - - }); - } finally { - lifecycle.stopTestCase(uuid); - lifecycle.writeTestCase(uuid); - - Allure.setLifecycle(cached); - StepsAspects.setLifecycle(cached); - } - - return writer; } } diff --git a/allure-java-commons/src/test/java/io/qameta/allure/aspects/StepsAspectsTest.java b/allure-java-commons/src/test/java/io/qameta/allure/aspects/StepsAspectsTest.java index eb2cfb8c5..dd053822e 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/aspects/StepsAspectsTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/aspects/StepsAspectsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/internal/AllureThreadContextTest.java b/allure-java-commons/src/test/java/io/qameta/allure/internal/AllureThreadContextTest.java index 722e1027f..77fefe583 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/internal/AllureThreadContextTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/internal/AllureThreadContextTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyCard.java b/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyCard.java index ff3473519..7cdf5ebe2 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyCard.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyCard.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyEmail.java b/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyEmail.java index 8231cb698..31f42ec82 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyEmail.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyEmail.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyUser.java b/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyUser.java index 60c58714b..d9476fda9 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyUser.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/testdata/DummyUser.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/util/AnnotationUtilsTest.java b/allure-java-commons/src/test/java/io/qameta/allure/util/AnnotationUtilsTest.java index b7eaa4b04..71d3b47d8 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/util/AnnotationUtilsTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/util/AnnotationUtilsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/util/NamingUtilsTest.java b/allure-java-commons/src/test/java/io/qameta/allure/util/NamingUtilsTest.java index c1fb825fa..422c825cd 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/util/NamingUtilsTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/util/NamingUtilsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-commons/src/test/java/io/qameta/allure/util/ObjectUtilsTest.java b/allure-java-commons/src/test/java/io/qameta/allure/util/ObjectUtilsTest.java index 64045ea81..218ef4a33 100644 --- a/allure-java-commons/src/test/java/io/qameta/allure/util/ObjectUtilsTest.java +++ b/allure-java-commons/src/test/java/io/qameta/allure/util/ObjectUtilsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Annotations.java b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Annotations.java index 0bb4ebe84..1232ea19a 100644 --- a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Annotations.java +++ b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Annotations.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1AttachAspects.java b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1AttachAspects.java index d3c8e21b6..b575be44e 100644 --- a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1AttachAspects.java +++ b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1AttachAspects.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1ParametersAspects.java b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1ParametersAspects.java index 7eacbabdb..c80e556aa 100644 --- a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1ParametersAspects.java +++ b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1ParametersAspects.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1StepsAspects.java b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1StepsAspects.java index c3d93787d..9fcfd8531 100644 --- a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1StepsAspects.java +++ b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1StepsAspects.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1TestCaseAspects.java b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1TestCaseAspects.java index 8e0a1ed91..3267b3bdf 100644 --- a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1TestCaseAspects.java +++ b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1TestCaseAspects.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Utils.java b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Utils.java index 48acffa35..a80c9ba36 100644 --- a/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Utils.java +++ b/allure-java-migration/src/main/java/io/qameta/allure/aspects/Allure1Utils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Attachment.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Attachment.java index 8b919da51..108904979 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Attachment.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Attachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Description.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Description.java index 694d1ad63..f3a9fcc38 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Description.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Description.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Features.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Features.java index 32ed82576..71659ddbe 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Features.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Features.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issue.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issue.java index 82e0af871..cbd576255 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issue.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issue.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issues.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issues.java index 6dc700f9d..e77ec28fc 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issues.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Issues.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Parameter.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Parameter.java index 970a73448..8642fee4a 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Parameter.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Parameter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Severity.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Severity.java index 1d0c86e75..2b8013ffc 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Severity.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Severity.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Step.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Step.java index 92f3266fb..993f11ccb 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Step.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Step.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Stories.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Stories.java index 09e4470fb..bff28bd3e 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Stories.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Stories.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/TestCaseId.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/TestCaseId.java index 3b43d7f23..3f3d010b9 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/TestCaseId.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/TestCaseId.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Title.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Title.java index cfc836e6b..b24e62303 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Title.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/annotations/Title.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/DescriptionType.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/DescriptionType.java index e0bdbe22f..8fb2988c2 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/DescriptionType.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/DescriptionType.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/SeverityLevel.java b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/SeverityLevel.java index e37bf5b71..0f0f50044 100644 --- a/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/SeverityLevel.java +++ b/allure-java-migration/src/main/java/ru/yandex/qatools/allure/model/SeverityLevel.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1AttachAspectsTest.java b/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1AttachAspectsTest.java index 47df223cf..96734ba5b 100644 --- a/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1AttachAspectsTest.java +++ b/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1AttachAspectsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1StepsAspectsTest.java b/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1StepsAspectsTest.java index 6458b5f47..f62082a0c 100644 --- a/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1StepsAspectsTest.java +++ b/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1StepsAspectsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1TestCaseAspectsTest.java b/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1TestCaseAspectsTest.java index 9f92462a7..03c0b2071 100644 --- a/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1TestCaseAspectsTest.java +++ b/allure-java-migration/src/test/java/io/qameta/allure/aspects/Allure1TestCaseAspectsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jax-rs/src/main/java/io/qameta/allure/jaxrs/AllureJaxRs.java b/allure-jax-rs/src/main/java/io/qameta/allure/jaxrs/AllureJaxRs.java index 7d28b0a1f..d7f61baa0 100644 --- a/allure-jax-rs/src/main/java/io/qameta/allure/jaxrs/AllureJaxRs.java +++ b/allure-jax-rs/src/main/java/io/qameta/allure/jaxrs/AllureJaxRs.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jax-rs/src/test/java/io/qameta/allure/httpclient/AllureJaxRsTest.java b/allure-jax-rs/src/test/java/io/qameta/allure/httpclient/AllureJaxRsTest.java index 3f3ea9e27..d0bc75158 100644 --- a/allure-jax-rs/src/test/java/io/qameta/allure/httpclient/AllureJaxRsTest.java +++ b/allure-jax-rs/src/test/java/io/qameta/allure/httpclient/AllureJaxRsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave/src/main/java/io/qameta/allure/jbehave/AllureJbehave.java b/allure-jbehave/src/main/java/io/qameta/allure/jbehave/AllureJbehave.java index b362e3e71..d1ee185b7 100644 --- a/allure-jbehave/src/main/java/io/qameta/allure/jbehave/AllureJbehave.java +++ b/allure-jbehave/src/main/java/io/qameta/allure/jbehave/AllureJbehave.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/AllureJbehaveTest.java b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/AllureJbehaveTest.java index a2f7fe9c2..1f1917b97 100644 --- a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/AllureJbehaveTest.java +++ b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/AllureJbehaveTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,8 +15,6 @@ */ package io.qameta.allure.jbehave; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Issue; import io.qameta.allure.jbehave.samples.BrokenStorySteps; import io.qameta.allure.jbehave.samples.SimpleStorySteps; @@ -27,7 +25,7 @@ import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import org.jbehave.core.configuration.MostUsefulConfiguration; import org.jbehave.core.embedder.Embedder; import org.jbehave.core.embedder.EmbedderControls; @@ -176,7 +174,7 @@ void shouldSetDescription() { final AllureResults results = runStories("stories/description.story"); final String expected = "This is description for current story.\n" - + "It should appear on each scenario in report"; + + "It should appear on each scenario in report"; assertThat(results.getTestResults()) .extracting(TestResult::getDescription) @@ -267,42 +265,34 @@ void shouldNotFailIfGivenStoriesSpecified() { } private AllureResults runStories(final String... storyResources) { - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writer); - - final Embedder embedder = new Embedder(); - embedder.useEmbedderMonitor(new NullEmbedderMonitor()); - embedder.useEmbedderControls(new EmbedderControls() - .doGenerateViewAfterStories(false) - .doFailOnStoryTimeout(false) - .doBatch(false) - .doIgnoreFailureInStories(true) - .doIgnoreFailureInView(true) - .doVerboseFailures(false) - .doVerboseFiltering(false) - ); - final AllureJbehave allureJbehave = new AllureJbehave(lifecycle); - embedder.useConfiguration(new MostUsefulConfiguration() - .useStoryLoader(new LoadFromClasspath(this.getClass())) - .useStoryReporterBuilder(new ReportlessStoryReporterBuilder(temp.toFile()) - .withReporters(allureJbehave) - ) - .useDefaultStoryReporter(new NullStoryReporter()) - ); - final InjectableStepsFactory stepsFactory = new InstanceStepsFactory( - embedder.configuration(), - new SimpleStorySteps(), - new BrokenStorySteps() - ); - embedder.useCandidateSteps(stepsFactory.createCandidateSteps()); - final AllureLifecycle cached = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); + return RunUtils.runTests(lifecycle -> { + final Embedder embedder = new Embedder(); + embedder.useEmbedderMonitor(new NullEmbedderMonitor()); + embedder.useEmbedderControls(new EmbedderControls() + .doGenerateViewAfterStories(false) + .doFailOnStoryTimeout(false) + .doBatch(false) + .doIgnoreFailureInStories(true) + .doIgnoreFailureInView(true) + .doVerboseFailures(false) + .doVerboseFiltering(false) + ); + final AllureJbehave allureJbehave = new AllureJbehave(lifecycle); + embedder.useConfiguration(new MostUsefulConfiguration() + .useStoryLoader(new LoadFromClasspath(this.getClass())) + .useStoryReporterBuilder(new ReportlessStoryReporterBuilder(temp.toFile()) + .withReporters(allureJbehave) + ) + .useDefaultStoryReporter(new NullStoryReporter()) + ); + final InjectableStepsFactory stepsFactory = new InstanceStepsFactory( + embedder.configuration(), + new SimpleStorySteps(), + new BrokenStorySteps() + ); + embedder.useCandidateSteps(stepsFactory.createCandidateSteps()); embedder.runStoriesAsPaths(Arrays.asList(storyResources)); - } finally { - Allure.setLifecycle(cached); - } - return writer; + }); } static class ReportlessStoryReporterBuilder extends StoryReporterBuilder { diff --git a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/LoggingReporter.java b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/LoggingReporter.java index 19103dfb4..dc3b7ba83 100644 --- a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/LoggingReporter.java +++ b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/LoggingReporter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/BrokenStorySteps.java b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/BrokenStorySteps.java index edc2a804e..e401c825f 100644 --- a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/BrokenStorySteps.java +++ b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/BrokenStorySteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/SimpleStorySteps.java b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/SimpleStorySteps.java index 9e7a664b0..45a93ede9 100644 --- a/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/SimpleStorySteps.java +++ b/allure-jbehave/src/test/java/io/qameta/allure/jbehave/samples/SimpleStorySteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave5/src/main/java/io/qameta/allure/jbehave5/AllureJbehave5.java b/allure-jbehave5/src/main/java/io/qameta/allure/jbehave5/AllureJbehave5.java index 3c38c214c..266fbf626 100644 --- a/allure-jbehave5/src/main/java/io/qameta/allure/jbehave5/AllureJbehave5.java +++ b/allure-jbehave5/src/main/java/io/qameta/allure/jbehave5/AllureJbehave5.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/AllureJbehave5Test.java b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/AllureJbehave5Test.java index 3b15aeaca..387f94557 100644 --- a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/AllureJbehave5Test.java +++ b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/AllureJbehave5Test.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,8 +15,6 @@ */ package io.qameta.allure.jbehave5; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Issue; import io.qameta.allure.jbehave5.samples.BrokenStorySteps; import io.qameta.allure.jbehave5.samples.SimpleStorySteps; @@ -27,7 +25,7 @@ import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import org.jbehave.core.configuration.MostUsefulConfiguration; import org.jbehave.core.embedder.Embedder; import org.jbehave.core.embedder.EmbedderControls; @@ -172,7 +170,7 @@ void shouldSetDescription() { final AllureResults results = runStories("stories/description.story"); final String expected = "This is description for current story.\n" - + "It should appear on each scenario in report"; + + "It should appear on each scenario in report"; assertThat(results.getTestResults()) .extracting(TestResult::getDescription) @@ -262,42 +260,34 @@ void shouldNotFailIfGivenStoriesSpecified() { } private AllureResults runStories(final String... storyResources) { - final AllureResultsWriterStub writer = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writer); - - final Embedder embedder = new Embedder(); - embedder.useEmbedderMonitor(new NullEmbedderMonitor()); - embedder.useEmbedderControls(new EmbedderControls() - .doGenerateViewAfterStories(false) - .doFailOnStoryTimeout(false) - .doBatch(false) - .doIgnoreFailureInStories(true) - .doIgnoreFailureInView(true) - .doVerboseFailures(false) - .doVerboseFiltering(false) - ); - final AllureJbehave5 allureJbehave5 = new AllureJbehave5(lifecycle); - embedder.useConfiguration(new MostUsefulConfiguration() - .useStoryLoader(new LoadFromClasspath(this.getClass())) - .useStoryReporterBuilder(new ReportlessStoryReporterBuilder(temp.toFile()) - .withReporters(allureJbehave5) - ) - .useDefaultStoryReporter(new NullStoryReporter()) - ); - final InjectableStepsFactory stepsFactory = new InstanceStepsFactory( - embedder.configuration(), - new SimpleStorySteps(), - new BrokenStorySteps() - ); - embedder.useStepsFactory(stepsFactory); - final AllureLifecycle cached = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); + return RunUtils.runTests(lifecycle -> { + final Embedder embedder = new Embedder(); + embedder.useEmbedderMonitor(new NullEmbedderMonitor()); + embedder.useEmbedderControls(new EmbedderControls() + .doGenerateViewAfterStories(false) + .doFailOnStoryTimeout(false) + .doBatch(false) + .doIgnoreFailureInStories(true) + .doIgnoreFailureInView(true) + .doVerboseFailures(false) + .doVerboseFiltering(false) + ); + final AllureJbehave5 allureJbehave5 = new AllureJbehave5(lifecycle); + embedder.useConfiguration(new MostUsefulConfiguration() + .useStoryLoader(new LoadFromClasspath(this.getClass())) + .useStoryReporterBuilder(new ReportlessStoryReporterBuilder(temp.toFile()) + .withReporters(allureJbehave5) + ) + .useDefaultStoryReporter(new NullStoryReporter()) + ); + final InjectableStepsFactory stepsFactory = new InstanceStepsFactory( + embedder.configuration(), + new SimpleStorySteps(), + new BrokenStorySteps() + ); + embedder.useStepsFactory(stepsFactory); embedder.runStoriesAsPaths(Arrays.asList(storyResources)); - } finally { - Allure.setLifecycle(cached); - } - return writer; + }); } static class ReportlessStoryReporterBuilder extends StoryReporterBuilder { diff --git a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/LoggingReporter.java b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/LoggingReporter.java index 44a416927..3389fe420 100644 --- a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/LoggingReporter.java +++ b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/LoggingReporter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/BrokenStorySteps.java b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/BrokenStorySteps.java index a96a97a0c..e1a0b5e2b 100644 --- a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/BrokenStorySteps.java +++ b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/BrokenStorySteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/SimpleStorySteps.java b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/SimpleStorySteps.java index 883199e9e..99aab03b3 100644 --- a/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/SimpleStorySteps.java +++ b/allure-jbehave5/src/test/java/io/qameta/allure/jbehave5/samples/SimpleStorySteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jooq/build.gradle.kts b/allure-jooq/build.gradle.kts index a0f29febe..d7aeab402 100644 --- a/allure-jooq/build.gradle.kts +++ b/allure-jooq/build.gradle.kts @@ -15,7 +15,7 @@ dependencies { testImplementation(project(":allure-java-commons-test")) testImplementation(project(":allure-junit-platform")) testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") - testRuntimeOnly("org.postgresql:postgresql:42.6.0") + testRuntimeOnly("org.postgresql:postgresql:42.7.1") } java { diff --git a/allure-jooq/src/main/java/io/qameta/allure/jooq/AllureJooq.java b/allure-jooq/src/main/java/io/qameta/allure/jooq/AllureJooq.java index 79c976ae7..3498deb2b 100644 --- a/allure-jooq/src/main/java/io/qameta/allure/jooq/AllureJooq.java +++ b/allure-jooq/src/main/java/io/qameta/allure/jooq/AllureJooq.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ /** * @author charlie (Dmitry Baev). */ +@SuppressWarnings("PMD.NonSerializableClass") public class AllureJooq implements ExecuteListener { private static final String STEP_UUID diff --git a/allure-jooq/src/test/java/io/qameta/allure/jooq/AllureJooqTest.java b/allure-jooq/src/test/java/io/qameta/allure/jooq/AllureJooqTest.java index b1804ff82..d4e6f853e 100644 --- a/allure-jooq/src/test/java/io/qameta/allure/jooq/AllureJooqTest.java +++ b/allure-jooq/src/test/java/io/qameta/allure/jooq/AllureJooqTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AbstractJsonPatchMatcher.java b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AbstractJsonPatchMatcher.java index 875adf470..6a940d4dc 100644 --- a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AbstractJsonPatchMatcher.java +++ b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AbstractJsonPatchMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AllureConfigurableJsonMatcher.java b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AllureConfigurableJsonMatcher.java index 05871c70d..07851666f 100644 --- a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AllureConfigurableJsonMatcher.java +++ b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/AllureConfigurableJsonMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffAttachment.java b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffAttachment.java index bd7e7b60c..c747b1121 100644 --- a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffAttachment.java +++ b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffAttachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffModel.java b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffModel.java index 514a0215e..3a65e6012 100644 --- a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffModel.java +++ b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/DiffModel.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchListener.java b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchListener.java index df7a7dc49..1a92c20f0 100644 --- a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchListener.java +++ b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchMatcher.java b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchMatcher.java index 34d154682..b9f53b131 100644 --- a/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchMatcher.java +++ b/allure-jsonunit/src/main/java/io/qameta/allure/jsonunit/JsonPatchMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchListenerTest.java b/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchListenerTest.java index 28f3cb80e..4b6b043ac 100644 --- a/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchListenerTest.java +++ b/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchListenerTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchMatcherTests.java b/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchMatcherTests.java index 7959ddcf9..29e85869d 100644 --- a/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchMatcherTests.java +++ b/allure-jsonunit/src/test/java/io/qameta/allure/jsonunit/JsonPatchMatcherTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatform.java b/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatform.java index 75b1c1e07..e48ee7713 100644 --- a/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatform.java +++ b/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatform.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -730,7 +730,7 @@ private String getOrCreateTest(final TestIdentifier testIdentifier) { return tests.get().getOrCreate(testIdentifier); } - private static class Uuids { + private static final class Uuids { private final Map storage = new ConcurrentHashMap<>(); private final ReadWriteLock lock = new ReentrantReadWriteLock(); diff --git a/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatformUtils.java b/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatformUtils.java index d7727fd20..14769ed22 100644 --- a/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatformUtils.java +++ b/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatformUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilter.java b/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilter.java index 8e802de7d..56525bd02 100644 --- a/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilter.java +++ b/allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTest.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTest.java index 930c35764..ceccd76b3 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTest.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,7 @@ package io.qameta.allure.junitplatform; import io.github.glytching.junit.extension.system.SystemProperty; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Issue; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.junitplatform.features.AllureIdAnnotationSupport; import io.qameta.allure.junitplatform.features.BrokenInAfterAllTests; import io.qameta.allure.junitplatform.features.BrokenInBeforeAllTests; @@ -67,7 +63,7 @@ import io.qameta.allure.model.TestResult; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.parallel.ResourceLock; @@ -841,35 +837,23 @@ void shouldProcessAllureParameterReportingEvents() { @Test @AllureFeatures.Retries void shouldSetDifferentUuidsInDifferentRuns() { - final AllureResultsWriterStub results = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(results); - - final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() - .filters(new AllurePostDiscoveryFilter(null)) - .selectors(DiscoverySelectors.selectClass(OneTest.class)) - .build(); - - final LauncherConfig config = LauncherConfig.builder() - .enableTestExecutionListenerAutoRegistration(false) - .addTestExecutionListeners(new AllureJunitPlatform(lifecycle)) - .enablePostDiscoveryFilterAutoRegistration(false) - .build(); - final Launcher launcher = LauncherFactory.create(config); - - final AllureLifecycle defaultLifecycle = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + final AllureResults results = RunUtils.runTests(lifecycle -> { + final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() + .filters(new AllurePostDiscoveryFilter(null)) + .selectors(DiscoverySelectors.selectClass(OneTest.class)) + .build(); + + final LauncherConfig config = LauncherConfig.builder() + .enableTestExecutionListenerAutoRegistration(false) + .addTestExecutionListeners(new AllureJunitPlatform(lifecycle)) + .enablePostDiscoveryFilterAutoRegistration(false) + .build(); + final Launcher launcher = LauncherFactory.create(config); // execute request twice launcher.execute(request); launcher.execute(request); - } finally { - Allure.setLifecycle(defaultLifecycle); - StepsAspects.setLifecycle(defaultLifecycle); - AttachmentsAspects.setLifecycle(defaultLifecycle); - } + }); final List testResults = results.getTestResults(); @@ -888,4 +872,5 @@ void shouldSetDifferentUuidsInDifferentRuns() { .isEqualTo(tr2.getHistoryId()); } + } diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTestUtils.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTestUtils.java index b26897f22..9cd8a8f60 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTestUtils.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,13 +15,9 @@ */ package io.qameta.allure.junitplatform; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Step; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import io.qameta.allure.testfilter.TestPlan; import org.junit.platform.engine.discovery.ClassSelector; import org.junit.platform.engine.discovery.DiscoverySelectors; @@ -49,58 +45,24 @@ public static AllureResults runClasses(final Class... classes) { @Step("Run classes {classes}") public static AllureResults runClasses(final TestPlan testPlan, final Class... classes) { - final AllureResultsWriterStub writerStub = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writerStub); + return RunUtils.runTests(lifecycle -> { + final ClassSelector[] classSelectors = Stream.of(classes) + .map(DiscoverySelectors::selectClass) + .toArray(ClassSelector[]::new); - final ClassSelector[] classSelectors = Stream.of(classes) - .map(DiscoverySelectors::selectClass) - .toArray(ClassSelector[]::new); + final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() + .filters(new AllurePostDiscoveryFilter(testPlan)) + .selectors(classSelectors) + .build(); - final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() - .filters(new AllurePostDiscoveryFilter(testPlan)) - .selectors(classSelectors) - .build(); - - final LauncherConfig config = LauncherConfig.builder() - .enableTestExecutionListenerAutoRegistration(false) - .addTestExecutionListeners(new AllureJunitPlatform(lifecycle)) - .enablePostDiscoveryFilterAutoRegistration(false) - .build(); - final Launcher launcher = LauncherFactory.create(config); - - final AllureLifecycle defaultLifecycle = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + final LauncherConfig config = LauncherConfig.builder() + .enableTestExecutionListenerAutoRegistration(false) + .addTestExecutionListeners(new AllureJunitPlatform(lifecycle)) + .enablePostDiscoveryFilterAutoRegistration(false) + .build(); + final Launcher launcher = LauncherFactory.create(config); launcher.execute(request); - return writerStub; - } finally { - Allure.setLifecycle(defaultLifecycle); - StepsAspects.setLifecycle(defaultLifecycle); - AttachmentsAspects.setLifecycle(defaultLifecycle); - } + }); } - @Step("Build test plan for {classes}") - public static org.junit.platform.launcher.TestPlan buildPlan( - final io.qameta.allure.testfilter.TestPlan testPlan, - final Class... classes) { - final ClassSelector[] classSelectors = Stream.of(classes) - .map(DiscoverySelectors::selectClass) - .toArray(ClassSelector[]::new); - - final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() - .selectors(classSelectors) - .filters(new AllurePostDiscoveryFilter(testPlan)) - .build(); - - final LauncherConfig config = LauncherConfig.builder() - .enableTestExecutionListenerAutoRegistration(false) - .enablePostDiscoveryFilterAutoRegistration(false) - .build(); - final Launcher launcher = LauncherFactory.create(config); - - return launcher.discover(request); - } } diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilterTest.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilterTest.java index 2f7dfc144..eb13add0b 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilterTest.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllurePostDiscoveryFilterTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/AllureIdAnnotationSupport.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/AllureIdAnnotationSupport.java index 2db9bcdf2..5fce824ad 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/AllureIdAnnotationSupport.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/AllureIdAnnotationSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInAfterAllTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInAfterAllTests.java index 32a766fe8..2fb9f401b 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInAfterAllTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInAfterAllTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInBeforeAllTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInBeforeAllTests.java index c9ba4f15e..f91459bad 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInBeforeAllTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenInBeforeAllTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenTests.java index e286688b3..a69c7c4f9 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/BrokenTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DescriptionJavadocTest.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DescriptionJavadocTest.java index 6a769becf..d4fa32846 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DescriptionJavadocTest.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DescriptionJavadocTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledRepeatedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledRepeatedTests.java index 88da3190b..f3e8101f7 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledRepeatedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledRepeatedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledTests.java index b6794dbe8..48cfcef98 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisabledTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisplayNameOnClassTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisplayNameOnClassTests.java index 77b7be46f..a3940fa20 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisplayNameOnClassTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DisplayNameOnClassTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DynamicTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DynamicTests.java index 74debbb95..1a8a1d779 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DynamicTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/DynamicTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FailedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FailedTests.java index 6c7a79df0..91be711a6 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FailedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FailedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterParameterizedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterParameterizedTests.java index f7bf17ad1..44867edd0 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterParameterizedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterParameterizedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterSimpleTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterSimpleTests.java index 11ee50512..dad7fcb45 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterSimpleTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/FilterSimpleTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/JupiterUniqueIdTest.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/JupiterUniqueIdTest.java index 2ff1ecf52..d3f33cafc 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/JupiterUniqueIdTest.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/JupiterUniqueIdTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/MarkerAnnotationSupport.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/MarkerAnnotationSupport.java index f2ee83da6..b8c91afbe 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/MarkerAnnotationSupport.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/MarkerAnnotationSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OneTest.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OneTest.java index 6b64f3932..9a9ea4136 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OneTest.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OneTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OwnerTest.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OwnerTest.java index e1933ab01..f59e95fad 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OwnerTest.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/OwnerTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParallelTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParallelTests.java index e580f5077..06dbe11f4 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParallelTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParallelTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTests.java index 19457b4ab..ee0606cd1 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTestsWithDisplayName.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTestsWithDisplayName.java index dfb83eff8..e3677440a 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTestsWithDisplayName.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ParameterisedTestsWithDisplayName.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/PassedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/PassedTests.java index 7a38a1fd3..4b6cb9f62 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/PassedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/PassedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/RepeatedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/RepeatedTests.java index 02797b0b8..a63a81cca 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/RepeatedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/RepeatedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ReportEntryParameter.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ReportEntryParameter.java index c7dc820d3..de199041f 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ReportEntryParameter.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/ReportEntryParameter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SeverityTest.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SeverityTest.java index af0062a66..055a34537 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SeverityTest.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SeverityTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedInBeforeAllTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedInBeforeAllTests.java index ca6cc60c1..51e856360 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedInBeforeAllTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedInBeforeAllTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedTests.java index b0f227314..17bfcafff 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/SkippedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TaggedTests.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TaggedTests.java index 8b287509f..8f544d85b 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TaggedTests.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TaggedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassDisabled.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassDisabled.java index e12bdec81..bba2c9e0e 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassDisabled.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassDisabled.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithDisplayNameAnnotation.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithDisplayNameAnnotation.java index b9ddc449a..8dcf86e56 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithDisplayNameAnnotation.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithDisplayNameAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithoutDisplayNameAnnotation.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithoutDisplayNameAnnotation.java index f018a3973..1119c59dc 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithoutDisplayNameAnnotation.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestClassWithoutDisplayNameAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLabels.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLabels.java index f4d1867a1..d2ee4ed9f 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLabels.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLabels.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLinks.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLinks.java index 9ae2ab1f5..39701deca 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLinks.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithClassLinks.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDescription.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDescription.java index 688931756..09d45396c 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDescription.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDescription.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDisplayName.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDisplayName.java index 480f345fd..77f6d1409 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDisplayName.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithDisplayName.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLabels.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLabels.java index 16ec35209..a1f8b6706 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLabels.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLabels.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLinks.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLinks.java index 020c1dfd2..7310b02bb 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLinks.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithMethodLinks.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSteps.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSteps.java index b677ac22f..1e3762d4b 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSteps.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemErr.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemErr.java index a63d21cf4..ee2c4a38a 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemErr.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemErr.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemOut.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemOut.java index 84552795b..e66f077ff 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemOut.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestWithSystemOut.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestsWithAllureId.java b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestsWithAllureId.java index 26c8380d8..2f013ff0d 100644 --- a/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestsWithAllureId.java +++ b/allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/features/TestsWithAllureId.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4FilterAspect.java b/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4FilterAspect.java index b68fe181b..166933c16 100644 --- a/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4FilterAspect.java +++ b/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4FilterAspect.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4ListenerAspect.java b/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4ListenerAspect.java index b1d52f2f5..bd351e30e 100644 --- a/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4ListenerAspect.java +++ b/allure-junit4-aspect/src/main/java/io/qameta/allure/junit4/aspect/AllureJunit4ListenerAspect.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,8 +32,8 @@ public class AllureJunit4ListenerAspect { @After("execution(org.junit.runner.notification.RunNotifier.new())") public void addListener(final JoinPoint point) { final RunNotifier notifier = (RunNotifier) point.getThis(); - notifier.removeListener(allure); - notifier.addListener(allure); + if (RunNotifier.class.equals(notifier.getClass())) { + notifier.addListener(allure); + } } - } diff --git a/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4.java b/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4.java index 8cf402579..ed594591b 100644 --- a/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4.java +++ b/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Filter.java b/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Filter.java index ea9cc77a7..f856bf269 100644 --- a/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Filter.java +++ b/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Filter.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Utils.java b/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Utils.java index 8cdb25c28..ebe87e56b 100644 --- a/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Utils.java +++ b/allure-junit4/src/main/java/io/qameta/allure/junit4/AllureJunit4Utils.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/main/java/io/qameta/allure/junit4/DisplayName.java b/allure-junit4/src/main/java/io/qameta/allure/junit4/DisplayName.java index 0b091f852..e72d01575 100644 --- a/allure-junit4/src/main/java/io/qameta/allure/junit4/DisplayName.java +++ b/allure-junit4/src/main/java/io/qameta/allure/junit4/DisplayName.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/main/java/io/qameta/allure/junit4/Tag.java b/allure-junit4/src/main/java/io/qameta/allure/junit4/Tag.java index b38023280..271dc7c5a 100644 --- a/allure-junit4/src/main/java/io/qameta/allure/junit4/Tag.java +++ b/allure-junit4/src/main/java/io/qameta/allure/junit4/Tag.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/main/java/io/qameta/allure/junit4/Tags.java b/allure-junit4/src/main/java/io/qameta/allure/junit4/Tags.java index 49bacad4b..112db3588 100644 --- a/allure-junit4/src/main/java/io/qameta/allure/junit4/Tags.java +++ b/allure-junit4/src/main/java/io/qameta/allure/junit4/Tags.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/SampleTestInDefaultPackage.java b/allure-junit4/src/test/java/SampleTestInDefaultPackage.java index a5b1dff0d..065c7d47a 100644 --- a/allure-junit4/src/test/java/SampleTestInDefaultPackage.java +++ b/allure-junit4/src/test/java/SampleTestInDefaultPackage.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/AllureJunit4Test.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/AllureJunit4Test.java index 7da9aba36..99d08a644 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/AllureJunit4Test.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/AllureJunit4Test.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,11 +15,7 @@ */ package io.qameta.allure.junit4; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Step; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.junit4.samples.AssumptionFailedTest; import io.qameta.allure.junit4.samples.BrokenTest; import io.qameta.allure.junit4.samples.BrokenWithoutMessageTest; @@ -44,7 +40,7 @@ import io.qameta.allure.model.TestResult; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import io.qameta.allure.testfilter.TestPlan; import io.qameta.allure.testfilter.TestPlanV1_0; import org.junit.jupiter.api.Test; @@ -422,26 +418,15 @@ private AllureResults runClasses(final Class... classes) { @Step("Run classes {classes}") private AllureResults runClasses(final TestPlan testPlan, final Class... classes) { - final AllureResultsWriterStub writerStub = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writerStub); - final JUnitCore core = new JUnitCore(); - core.addListener(new AllureJunit4(lifecycle)); - - final Request request = Request - .classes(classes) - .filterWith(new AllureJunit4Filter(testPlan)); - - final AllureLifecycle defaultLifecycle = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + return RunUtils.runTests(lifecycle -> { + final JUnitCore core = new JUnitCore(); + core.addListener(new AllureJunit4(lifecycle)); + + final Request request = Request + .classes(classes) + .filterWith(new AllureJunit4Filter(testPlan)); + core.run(request); - return writerStub; - } finally { - Allure.setLifecycle(defaultLifecycle); - StepsAspects.setLifecycle(defaultLifecycle); - AttachmentsAspects.setLifecycle(defaultLifecycle); - } + }); } } diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/AssumptionFailedTest.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/AssumptionFailedTest.java index 66b3874bd..ed9b654f2 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/AssumptionFailedTest.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/AssumptionFailedTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenTest.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenTest.java index 71510083c..a4a66c02a 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenTest.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenWithoutMessageTest.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenWithoutMessageTest.java index 85d15ee48..d622552ef 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenWithoutMessageTest.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/BrokenWithoutMessageTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/DescriptionsJavadoc.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/DescriptionsJavadoc.java index 467f4c513..f7f0e97d1 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/DescriptionsJavadoc.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/DescriptionsJavadoc.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FailedTest.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FailedTest.java index 8d4fd2c35..9887d7f8c 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FailedTest.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FailedTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FilterSimpleTests.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FilterSimpleTests.java index 540b06ab4..31cec99f8 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FilterSimpleTests.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/FilterSimpleTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredClassTest.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredClassTest.java index c17bceb5c..6702ec083 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredClassTest.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredClassTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredTests.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredTests.java index 18599f91e..ff16dc0f7 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredTests.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/IgnoredTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/OneTest.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/OneTest.java index ed3e37ecd..3600cc143 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/OneTest.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/OneTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TaggedTests.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TaggedTests.java index 7c2fc3911..a72c91bc8 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TaggedTests.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TaggedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestBasedOnSampleRunner.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestBasedOnSampleRunner.java index 64aa280ac..446dc661b 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestBasedOnSampleRunner.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestBasedOnSampleRunner.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithAnnotations.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithAnnotations.java index 0f843bbdf..3eb78a05a 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithAnnotations.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithAnnotations.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithSteps.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithSteps.java index f19e72e41..51f48e489 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithSteps.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithTimeout.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithTimeout.java index 15133dfb8..53640d19a 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithTimeout.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TestWithTimeout.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TheoriesTest.java b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TheoriesTest.java index 22768d2b6..e668da036 100644 --- a/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TheoriesTest.java +++ b/allure-junit4/src/test/java/io/qameta/allure/junit4/samples/TheoriesTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5-assert/src/main/java/io/qameta/allure/junit5assert/AllureJunit5Assert.java b/allure-junit5-assert/src/main/java/io/qameta/allure/junit5assert/AllureJunit5Assert.java index 375a3d19e..b483e0802 100644 --- a/allure-junit5-assert/src/main/java/io/qameta/allure/junit5assert/AllureJunit5Assert.java +++ b/allure-junit5-assert/src/main/java/io/qameta/allure/junit5assert/AllureJunit5Assert.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5-assert/src/test/java/io/qameta/allure/junit5assert/AllureJunit5AssertTest.java b/allure-junit5-assert/src/test/java/io/qameta/allure/junit5assert/AllureJunit5AssertTest.java index 44d187e5e..4848e2b90 100644 --- a/allure-junit5-assert/src/test/java/io/qameta/allure/junit5assert/AllureJunit5AssertTest.java +++ b/allure-junit5-assert/src/test/java/io/qameta/allure/junit5assert/AllureJunit5AssertTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java b/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java index f0fed32a9..6ede30ed2 100644 --- a/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java +++ b/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/AllureJunit5Test.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/AllureJunit5Test.java index 2ae6ecb78..19e62a917 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/AllureJunit5Test.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/AllureJunit5Test.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,12 +15,8 @@ */ package io.qameta.allure.junit5; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Issue; import io.qameta.allure.Step; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.junit5.features.AfterEachFixtureBrokenSupport; import io.qameta.allure.junit5.features.AllFixtureSupport; import io.qameta.allure.junit5.features.BeforeAllFixtureFailureSupport; @@ -39,7 +35,7 @@ import io.qameta.allure.model.TestResultContainer; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Test; import org.junit.platform.engine.discovery.ClassSelector; import org.junit.platform.engine.discovery.DiscoverySelectors; @@ -415,35 +411,22 @@ void shouldSupportFailureInBeforeAllFixture() { @Step("Run classes {classes}") private AllureResults runClasses(final Class... classes) { - final AllureResultsWriterStub writerStub = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writerStub); - - final ClassSelector[] classSelectors = Stream.of(classes) - .map(DiscoverySelectors::selectClass) - .toArray(ClassSelector[]::new); - - final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() - .configurationParameter("junit.jupiter.extensions.autodetection.enabled", "true") - .selectors(classSelectors) - .build(); - - final LauncherConfig config = LauncherConfig.builder() - .enableTestExecutionListenerAutoRegistration(false) - .addTestExecutionListeners(new AllureJunitPlatform(lifecycle)) - .build(); - final Launcher launcher = LauncherFactory.create(config); - - final AllureLifecycle defaultLifecycle = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + return RunUtils.runTests(lifecycle -> { + final ClassSelector[] classSelectors = Stream.of(classes) + .map(DiscoverySelectors::selectClass) + .toArray(ClassSelector[]::new); + + final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() + .configurationParameter("junit.jupiter.extensions.autodetection.enabled", "true") + .selectors(classSelectors) + .build(); + + final LauncherConfig config = LauncherConfig.builder() + .enableTestExecutionListenerAutoRegistration(false) + .addTestExecutionListeners(new AllureJunitPlatform(lifecycle)) + .build(); + final Launcher launcher = LauncherFactory.create(config); launcher.execute(request); - return writerStub; - } finally { - Allure.setLifecycle(defaultLifecycle); - StepsAspects.setLifecycle(defaultLifecycle); - AttachmentsAspects.setLifecycle(defaultLifecycle); - } + }); } } diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AfterEachFixtureBrokenSupport.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AfterEachFixtureBrokenSupport.java index eacb46a00..1f7ba67dd 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AfterEachFixtureBrokenSupport.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AfterEachFixtureBrokenSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AllFixtureSupport.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AllFixtureSupport.java index 2ef2e0550..923d4f75b 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AllFixtureSupport.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/AllFixtureSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeAllFixtureFailureSupport.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeAllFixtureFailureSupport.java index d34b07973..6cf6f09b3 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeAllFixtureFailureSupport.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeAllFixtureFailureSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeEachFixtureBrokenSupport.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeEachFixtureBrokenSupport.java index 9bd91d4c4..8084c1b56 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeEachFixtureBrokenSupport.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/BeforeEachFixtureBrokenSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/EachFixtureSupport.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/EachFixtureSupport.java index ac6005395..8231baf97 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/EachFixtureSupport.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/EachFixtureSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedBlankParameterValueTests.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedBlankParameterValueTests.java index 6a5b1eab5..ab53e4547 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedBlankParameterValueTests.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedBlankParameterValueTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedPrimitivesTests.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedPrimitivesTests.java index a257a3581..1553e2a81 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedPrimitivesTests.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedPrimitivesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedTests.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedTests.java index e1ab37cf2..3cbb9adc6 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedTests.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/ParameterisedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/SkipOtherInjectables.java b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/SkipOtherInjectables.java index 4e566370b..9209f1ad7 100644 --- a/allure-junit5/src/test/java/io/qameta/allure/junit5/features/SkipOtherInjectables.java +++ b/allure-junit5/src/test/java/io/qameta/allure/junit5/features/SkipOtherInjectables.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-karate/build.gradle.kts b/allure-karate/build.gradle.kts index 914f29c08..f300ed9fd 100644 --- a/allure-karate/build.gradle.kts +++ b/allure-karate/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { testImplementation("org.slf4j:slf4j-simple") testImplementation(project(":allure-java-commons-test")) testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") - testImplementation("org.mock-server:mockserver-netty:5.14.0") + testImplementation("org.mock-server:mockserver-netty:5.15.0") } tasks.jar { diff --git a/allure-karate/src/main/java/io/qameta/allure/karate/AllureKarate.java b/allure-karate/src/main/java/io/qameta/allure/karate/AllureKarate.java index 9629018e3..a300f0ecd 100644 --- a/allure-karate/src/main/java/io/qameta/allure/karate/AllureKarate.java +++ b/allure-karate/src/main/java/io/qameta/allure/karate/AllureKarate.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-karate/src/test/java/io/qameta/allure/karate/AllureKarateTest.java b/allure-karate/src/test/java/io/qameta/allure/karate/AllureKarateTest.java index 782e6478b..21fba0ecf 100644 --- a/allure-karate/src/test/java/io/qameta/allure/karate/AllureKarateTest.java +++ b/allure-karate/src/test/java/io/qameta/allure/karate/AllureKarateTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-karate/src/test/java/io/qameta/allure/karate/TestRunner.java b/allure-karate/src/test/java/io/qameta/allure/karate/TestRunner.java index 099ef0a25..a8300251a 100644 --- a/allure-karate/src/test/java/io/qameta/allure/karate/TestRunner.java +++ b/allure-karate/src/test/java/io/qameta/allure/karate/TestRunner.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,12 +15,8 @@ */ package io.qameta.allure.karate; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import org.mockserver.client.MockServerClient; import org.mockserver.model.HttpRequest; import org.mockserver.model.HttpResponse; @@ -59,36 +55,26 @@ AllureResults runApi(final String... featurePath) { } AllureResults run(final String... path) { - final AllureResultsWriterStub writerStub = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writerStub); - final AllureKarate allureKarate = new AllureKarate(lifecycle); + return RunUtils.runTests(lifecycle -> { + final AllureKarate allureKarate = new AllureKarate(lifecycle); - final AllureLifecycle defaultLifecycle = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); - - com.intuit.karate.Runner.builder() - .path(path) - .hook(allureKarate) - .backupReportDir(false) - .outputJunitXml(false) - .outputCucumberJson(false) - .outputHtmlReport(false) - .parallel(1); - - return writerStub; - } finally { - Allure.setLifecycle(defaultLifecycle); - StepsAspects.setLifecycle(defaultLifecycle); - AttachmentsAspects.setLifecycle(defaultLifecycle); - if (server != null && server.isRunning()) { - server.stop(); - } - if (client != null && !client.hasStopped()) { - client.stop(); + try { + com.intuit.karate.Runner.builder() + .path(path) + .hook(allureKarate) + .backupReportDir(false) + .outputJunitXml(false) + .outputCucumberJson(false) + .outputHtmlReport(false) + .parallel(1); + } finally { + if (server != null && server.isRunning()) { + server.stop(); + } + if (client != null && !client.hasStopped()) { + client.stop(); + } } - } + }); } } diff --git a/allure-model/src/main/java/io/qameta/allure/model/Attachment.java b/allure-model/src/main/java/io/qameta/allure/model/Attachment.java index 750bc7239..dc5b36e7c 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/Attachment.java +++ b/allure-model/src/main/java/io/qameta/allure/model/Attachment.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/ExecutableItem.java b/allure-model/src/main/java/io/qameta/allure/model/ExecutableItem.java index b73cfee17..714a30b17 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/ExecutableItem.java +++ b/allure-model/src/main/java/io/qameta/allure/model/ExecutableItem.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/FixtureResult.java b/allure-model/src/main/java/io/qameta/allure/model/FixtureResult.java index 7c2e12427..20e7b3cdc 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/FixtureResult.java +++ b/allure-model/src/main/java/io/qameta/allure/model/FixtureResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/Label.java b/allure-model/src/main/java/io/qameta/allure/model/Label.java index d8b400379..af9c52595 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/Label.java +++ b/allure-model/src/main/java/io/qameta/allure/model/Label.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/Link.java b/allure-model/src/main/java/io/qameta/allure/model/Link.java index a5de7c71d..7009aee99 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/Link.java +++ b/allure-model/src/main/java/io/qameta/allure/model/Link.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/Parameter.java b/allure-model/src/main/java/io/qameta/allure/model/Parameter.java index b41727380..6fbb0fb00 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/Parameter.java +++ b/allure-model/src/main/java/io/qameta/allure/model/Parameter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/Stage.java b/allure-model/src/main/java/io/qameta/allure/model/Stage.java index 14b0b199b..697478122 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/Stage.java +++ b/allure-model/src/main/java/io/qameta/allure/model/Stage.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/Status.java b/allure-model/src/main/java/io/qameta/allure/model/Status.java index 4f6c73d55..15c275bd2 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/Status.java +++ b/allure-model/src/main/java/io/qameta/allure/model/Status.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/StatusDetails.java b/allure-model/src/main/java/io/qameta/allure/model/StatusDetails.java index 940ffd9d1..92e5449e5 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/StatusDetails.java +++ b/allure-model/src/main/java/io/qameta/allure/model/StatusDetails.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/StepResult.java b/allure-model/src/main/java/io/qameta/allure/model/StepResult.java index 04855631a..92de00ecf 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/StepResult.java +++ b/allure-model/src/main/java/io/qameta/allure/model/StepResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/TestResult.java b/allure-model/src/main/java/io/qameta/allure/model/TestResult.java index fdbd569db..f6eb0f1f1 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/TestResult.java +++ b/allure-model/src/main/java/io/qameta/allure/model/TestResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/TestResultContainer.java b/allure-model/src/main/java/io/qameta/allure/model/TestResultContainer.java index db4f430cb..b83500026 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/TestResultContainer.java +++ b/allure-model/src/main/java/io/qameta/allure/model/TestResultContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/WithAttachments.java b/allure-model/src/main/java/io/qameta/allure/model/WithAttachments.java index 970ba3262..772228218 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/WithAttachments.java +++ b/allure-model/src/main/java/io/qameta/allure/model/WithAttachments.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/WithLinks.java b/allure-model/src/main/java/io/qameta/allure/model/WithLinks.java index 35d93ae89..63d640788 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/WithLinks.java +++ b/allure-model/src/main/java/io/qameta/allure/model/WithLinks.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/WithParameters.java b/allure-model/src/main/java/io/qameta/allure/model/WithParameters.java index 59634c8fd..4b043d412 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/WithParameters.java +++ b/allure-model/src/main/java/io/qameta/allure/model/WithParameters.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/WithStatus.java b/allure-model/src/main/java/io/qameta/allure/model/WithStatus.java index 14ce4ecd8..8fdd95234 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/WithStatus.java +++ b/allure-model/src/main/java/io/qameta/allure/model/WithStatus.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/WithStatusDetails.java b/allure-model/src/main/java/io/qameta/allure/model/WithStatusDetails.java index 409886584..08400c748 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/WithStatusDetails.java +++ b/allure-model/src/main/java/io/qameta/allure/model/WithStatusDetails.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-model/src/main/java/io/qameta/allure/model/WithSteps.java b/allure-model/src/main/java/io/qameta/allure/model/WithSteps.java index 11952fa58..c225a6c27 100644 --- a/allure-model/src/main/java/io/qameta/allure/model/WithSteps.java +++ b/allure-model/src/main/java/io/qameta/allure/model/WithSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-okhttp/src/main/java/io/qameta/allure/okhttp/AllureOkHttp.java b/allure-okhttp/src/main/java/io/qameta/allure/okhttp/AllureOkHttp.java index 781927cf5..4826eb0ea 100644 --- a/allure-okhttp/src/main/java/io/qameta/allure/okhttp/AllureOkHttp.java +++ b/allure-okhttp/src/main/java/io/qameta/allure/okhttp/AllureOkHttp.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-okhttp/src/test/java/io/qameta/allure/okhttp/AllureOkHttp3Test.java b/allure-okhttp/src/test/java/io/qameta/allure/okhttp/AllureOkHttp3Test.java index 15e39c6fe..4a6c9dc3f 100644 --- a/allure-okhttp/src/test/java/io/qameta/allure/okhttp/AllureOkHttp3Test.java +++ b/allure-okhttp/src/test/java/io/qameta/allure/okhttp/AllureOkHttp3Test.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-okhttp3/src/main/java/io/qameta/allure/okhttp3/AllureOkHttp3.java b/allure-okhttp3/src/main/java/io/qameta/allure/okhttp3/AllureOkHttp3.java index e47a956bd..bb784fb00 100644 --- a/allure-okhttp3/src/main/java/io/qameta/allure/okhttp3/AllureOkHttp3.java +++ b/allure-okhttp3/src/main/java/io/qameta/allure/okhttp3/AllureOkHttp3.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-okhttp3/src/test/java/io/qameta/allure/okhttp3/AllureOkHttp3Test.java b/allure-okhttp3/src/test/java/io/qameta/allure/okhttp3/AllureOkHttp3Test.java index 3d0adc6c1..b2a8630f4 100644 --- a/allure-okhttp3/src/test/java/io/qameta/allure/okhttp3/AllureOkHttp3Test.java +++ b/allure-okhttp3/src/test/java/io/qameta/allure/okhttp3/AllureOkHttp3Test.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-reader/src/main/java/io/qameta/allure/reader/AllureEnumDeserializer.java b/allure-reader/src/main/java/io/qameta/allure/reader/AllureEnumDeserializer.java index f7ed171cb..9a9861826 100644 --- a/allure-reader/src/main/java/io/qameta/allure/reader/AllureEnumDeserializer.java +++ b/allure-reader/src/main/java/io/qameta/allure/reader/AllureEnumDeserializer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-reader/src/main/java/io/qameta/allure/reader/AllureObjectMapperFactory.java b/allure-reader/src/main/java/io/qameta/allure/reader/AllureObjectMapperFactory.java index ad91d2899..88fe9eccf 100644 --- a/allure-reader/src/main/java/io/qameta/allure/reader/AllureObjectMapperFactory.java +++ b/allure-reader/src/main/java/io/qameta/allure/reader/AllureObjectMapperFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-reader/src/main/java/io/qameta/allure/reader/ParameterModeDeserializer.java b/allure-reader/src/main/java/io/qameta/allure/reader/ParameterModeDeserializer.java index a83ba7c65..f048e72e1 100644 --- a/allure-reader/src/main/java/io/qameta/allure/reader/ParameterModeDeserializer.java +++ b/allure-reader/src/main/java/io/qameta/allure/reader/ParameterModeDeserializer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-reader/src/main/java/io/qameta/allure/reader/StageDeserializer.java b/allure-reader/src/main/java/io/qameta/allure/reader/StageDeserializer.java index 47858a16c..8b6ddb62a 100644 --- a/allure-reader/src/main/java/io/qameta/allure/reader/StageDeserializer.java +++ b/allure-reader/src/main/java/io/qameta/allure/reader/StageDeserializer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-reader/src/main/java/io/qameta/allure/reader/StatusDeserializer.java b/allure-reader/src/main/java/io/qameta/allure/reader/StatusDeserializer.java index 2500e65ca..f7824aa0e 100644 --- a/allure-reader/src/main/java/io/qameta/allure/reader/StatusDeserializer.java +++ b/allure-reader/src/main/java/io/qameta/allure/reader/StatusDeserializer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java b/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java index a916012fe..49b4c203b 100644 --- a/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java +++ b/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -98,6 +98,10 @@ public Response filter(final FilterableRequestSpecification requestSpec, requestAttachmentBuilder.setBody(prettifier.getPrettifiedBodyIfPossible(requestSpec)); } + if (Objects.nonNull(requestSpec.getFormParams())) { + requestAttachmentBuilder.setFormParams(requestSpec.getFormParams()); + } + final HttpRequestAttachment requestAttachment = requestAttachmentBuilder.build(); new DefaultAttachmentProcessor().addAttachment( diff --git a/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java b/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java index d3121ed0f..1a58504c9 100644 --- a/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java +++ b/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import io.qameta.allure.model.TestResult; import io.qameta.allure.test.AllureResults; import io.restassured.RestAssured; +import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; @@ -143,9 +144,12 @@ protected final AllureResults executeWithStub(ResponseDefinitionBuilder response server.start(); WireMock.configureFor(server.port()); - WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/hello")).willReturn(responseBuilder)); + WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/hello?Allure=Form")).willReturn(responseBuilder)); try { - RestAssured.when().get(server.url("/hello")).then().statusCode(statusCode); + RestAssured.given() + .contentType(ContentType.URLENC) + .formParams("Allure", "Form") + .get(server.url("/hello")).then().statusCode(statusCode); } finally { server.stop(); RestAssured.replaceFiltersWith(ImmutableList.of()); diff --git a/allure-scalatest/build.gradle.kts b/allure-scalatest/build.gradle.kts index 382bbfbf5..910d28ad2 100644 --- a/allure-scalatest/build.gradle.kts +++ b/allure-scalatest/build.gradle.kts @@ -22,7 +22,7 @@ if (hasProperty("scalaVersion")) { } val baseScalaVersion = selectedScalaVersion.substring(0, selectedScalaVersion.lastIndexOf(".")) -project.base.archivesBaseName = "allure-scalatest_$baseScalaVersion" +project.base.archivesName.set("allure-scalatest_$baseScalaVersion") for (sv in availableScalaVersions) { val taskSuffix = sv.replace('.', '_') diff --git a/allure-scalatest/src/main/scala/io/qameta/allure/scalatest/AllureScalatest.scala b/allure-scalatest/src/main/scala/io/qameta/allure/scalatest/AllureScalatest.scala index defd7019c..a1b84719e 100644 --- a/allure-scalatest/src/main/scala/io/qameta/allure/scalatest/AllureScalatest.scala +++ b/allure-scalatest/src/main/scala/io/qameta/allure/scalatest/AllureScalatest.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/AllureScalatestTest.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/AllureScalatestTest.scala index 085e617a4..03f172a3d 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/AllureScalatestTest.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/AllureScalatestTest.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AllureApiSpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AllureApiSpec.scala index 1b0e55df2..77cb1fdc5 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AllureApiSpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AllureApiSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AnnotationsOnClassSpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AnnotationsOnClassSpec.scala index 85e283061..9e7b6460c 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AnnotationsOnClassSpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/AnnotationsOnClassSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/BrokenSpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/BrokenSpec.scala index 11e41d4d7..351fddf4a 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/BrokenSpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/BrokenSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/CancelledSpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/CancelledSpec.scala index 66b84ea75..b13b174bd 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/CancelledSpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/CancelledSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/FailedSpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/FailedSpec.scala index 26e2d1ce7..29f996fef 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/FailedSpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/FailedSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/IgnoredSpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/IgnoredSpec.scala index 8cba30608..9a13d712d 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/IgnoredSpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/IgnoredSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SeveritySpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SeveritySpec.scala index d363790c0..39011d68b 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SeveritySpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SeveritySpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SimpleSpec.scala b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SimpleSpec.scala index e94fcd842..31bfcb563 100644 --- a/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SimpleSpec.scala +++ b/allure-scalatest/src/test/scala/io/qameta/allure/scalatest/testdata/SimpleSpec.scala @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-selenide/src/main/java/io/qameta/allure/selenide/AllureSelenide.java b/allure-selenide/src/main/java/io/qameta/allure/selenide/AllureSelenide.java index 53aceea47..ca06a32b4 100644 --- a/allure-selenide/src/main/java/io/qameta/allure/selenide/AllureSelenide.java +++ b/allure-selenide/src/main/java/io/qameta/allure/selenide/AllureSelenide.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-selenide/src/main/java/io/qameta/allure/selenide/LogType.java b/allure-selenide/src/main/java/io/qameta/allure/selenide/LogType.java index 9857debe2..97995efc5 100644 --- a/allure-selenide/src/main/java/io/qameta/allure/selenide/LogType.java +++ b/allure-selenide/src/main/java/io/qameta/allure/selenide/LogType.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-selenide/src/test/java/io/qameta/allure/selenide/AllureSelenideTest.java b/allure-selenide/src/test/java/io/qameta/allure/selenide/AllureSelenideTest.java index 4aaabffd7..889fd8ff5 100644 --- a/allure-selenide/src/test/java/io/qameta/allure/selenide/AllureSelenideTest.java +++ b/allure-selenide/src/test/java/io/qameta/allure/selenide/AllureSelenideTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-servlet-api/src/main/java/io/qameta/allure/servletapi/HttpServletAttachmentBuilder.java b/allure-servlet-api/src/main/java/io/qameta/allure/servletapi/HttpServletAttachmentBuilder.java index b3a547053..5822a102a 100644 --- a/allure-servlet-api/src/main/java/io/qameta/allure/servletapi/HttpServletAttachmentBuilder.java +++ b/allure-servlet-api/src/main/java/io/qameta/allure/servletapi/HttpServletAttachmentBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/main/java/io/qameta/allure/spock/AllureSpock.java b/allure-spock/src/main/java/io/qameta/allure/spock/AllureSpock.java index 4157abd74..6ef5a51dd 100644 --- a/allure-spock/src/main/java/io/qameta/allure/spock/AllureSpock.java +++ b/allure-spock/src/main/java/io/qameta/allure/spock/AllureSpock.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/AllureSpockTest.java b/allure-spock/src/test/groovy/io/qameta/allure/spock/AllureSpockTest.java index 4b9e005ca..f7bc5af8b 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/AllureSpockTest.java +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/AllureSpockTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,10 +15,6 @@ */ package io.qameta.allure.spock; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.model.Label; import io.qameta.allure.model.Link; import io.qameta.allure.model.Parameter; @@ -37,7 +33,7 @@ import io.qameta.allure.spock.samples.TestWithCustomAnnotations; import io.qameta.allure.spock.samples.TestWithSteps; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import org.junit.jupiter.api.Test; import org.junit.runner.notification.RunNotifier; import org.spockframework.runtime.JUnitDescriptionGenerator; @@ -225,32 +221,16 @@ void shouldSupportDataDrivenTests() { } protected AllureResults run(final Class clazz) { - final AllureResultsWriterStub results = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(results); + return RunUtils.runTests(lifecycle -> { + final RunNotifier notifier = new RunNotifier(); + final SpecInfo spec = new SpecInfoBuilder(clazz).build(); + spec.addListener(new AllureSpock(lifecycle)); - final RunNotifier notifier = new RunNotifier(); - final SpecInfo spec = new SpecInfoBuilder(clazz).build(); - spec.addListener(new AllureSpock(lifecycle)); - - new JUnitDescriptionGenerator(spec).describeSpecMethods(); - new JUnitDescriptionGenerator(spec).describeSpec(); - - final AllureLifecycle cached = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + new JUnitDescriptionGenerator(spec).describeSpecMethods(); + new JUnitDescriptionGenerator(spec).describeSpec(); RunContext.get().createSpecRunner(spec, notifier).run(); - } catch (Exception e) { - throw new RuntimeException("could not execute sample", e); - } finally { - Allure.setLifecycle(cached); - StepsAspects.setLifecycle(cached); - AttachmentsAspects.setLifecycle(cached); - } - - return results; + }); } private static Predicate mutedPredicate() { diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/BrokenTest.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/BrokenTest.groovy index f3b7b5d33..908722f4a 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/BrokenTest.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/BrokenTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/DataDrivenTest.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/DataDrivenTest.groovy index 4b5512c81..e07a9db3a 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/DataDrivenTest.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/DataDrivenTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/FailedTest.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/FailedTest.groovy index 913120c53..00bf73451 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/FailedTest.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/FailedTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/JiraIssue.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/JiraIssue.groovy index ec3afda57..ad8c2234c 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/JiraIssue.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/JiraIssue.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/OneTest.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/OneTest.groovy index 055a01137..28f18540e 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/OneTest.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/OneTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/ParametersTest.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/ParametersTest.groovy index 3f357adbd..506c514ba 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/ParametersTest.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/ParametersTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotations.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotations.groovy index 95e80a03c..d7b086890 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotations.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotations.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotationsOnClass.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotationsOnClass.groovy index 5b7f691a6..c6eda8825 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotationsOnClass.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithAnnotationsOnClass.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithCustomAnnotations.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithCustomAnnotations.groovy index 1995b0575..32efd0e2a 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithCustomAnnotations.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithCustomAnnotations.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithSteps.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithSteps.groovy index 438e4a162..1e019b408 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithSteps.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/TestWithSteps.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/XrayId.groovy b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/XrayId.groovy index cd91a219f..2055e1d73 100644 --- a/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/XrayId.groovy +++ b/allure-spock/src/test/groovy/io/qameta/allure/spock/samples/XrayId.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/main/java/io/qameta/allure/spock2/AllureSpock2.java b/allure-spock2/src/main/java/io/qameta/allure/spock2/AllureSpock2.java index 9c973b7de..c0ae16674 100644 --- a/allure-spock2/src/main/java/io/qameta/allure/spock2/AllureSpock2.java +++ b/allure-spock2/src/main/java/io/qameta/allure/spock2/AllureSpock2.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -411,7 +411,7 @@ public void intercept(final IMethodInvocation invocation) throws Throwable { .setStatus(getStatus(throwable).orElse(Status.BROKEN)) .setStatusDetails(getStatusDetails(throwable).orElse(null)) ); - ExceptionUtils.sneakyThrow(throwable); + throw ExceptionUtils.sneakyThrow(throwable); } finally { getLifecycle().stopFixture(fixtureUuid); } diff --git a/allure-spock2/src/main/java/io/qameta/allure/spock2/compiler/AllureStatementsLabelsToStepsTransformation.java b/allure-spock2/src/main/java/io/qameta/allure/spock2/compiler/AllureStatementsLabelsToStepsTransformation.java index e97e15594..4db9dc0fe 100644 --- a/allure-spock2/src/main/java/io/qameta/allure/spock2/compiler/AllureStatementsLabelsToStepsTransformation.java +++ b/allure-spock2/src/main/java/io/qameta/allure/spock2/compiler/AllureStatementsLabelsToStepsTransformation.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -59,7 +59,7 @@ public void visit(final ASTNode[] nodes, final SourceUnit sourceUnit) { /** * Use of nested class defers linking until after groovy version check. */ - private static class Impl { + private static final class Impl { private static final AstNodeCache NODE_CACHE = new AstNodeCache(); private void visit(final SourceUnit sourceUnit) { @@ -100,7 +100,7 @@ private void processSpec(final SourceUnit sourceUnit, /** * Adds Allure steps for statements with labels. */ - private static class MethodVisitor implements GroovyClassVisitor { + private static final class MethodVisitor implements GroovyClassVisitor { private static final ClassNode ALLURE = ClassHelper.makeWithoutCaching(Allure.class); diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/AllureSpock2Test.java b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/AllureSpock2Test.java index 38fa96dc1..c5c55f79a 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/AllureSpock2Test.java +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/AllureSpock2Test.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,11 +15,7 @@ */ package io.qameta.allure.spock2; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Step; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.model.ExecutableItem; import io.qameta.allure.model.FixtureResult; import io.qameta.allure.model.Label; @@ -48,7 +44,7 @@ import io.qameta.allure.spock2.samples.TestsWithIdForFilter; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import io.qameta.allure.testfilter.TestPlan; import io.qameta.allure.testfilter.TestPlanV1_0; import org.apache.commons.lang3.tuple.Pair; @@ -607,46 +603,33 @@ public static AllureResults runClasses(final Class... classes) { @Step("Run classes {classes}") public static AllureResults runClasses(final TestPlan testPlan, final Class... classes) { - final AllureResultsWriterStub writerStub = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(writerStub); - - final ClassSelector[] classSelectors = Stream.of(classes) - .map(DiscoverySelectors::selectClass) - .toArray(ClassSelector[]::new); - - final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() - .selectors(classSelectors) - .build(); - - final RunContext context = RunContext.get(); - final GlobalExtensionRegistry extensionRegistry = ReflectionUtils - .tryToReadFieldValue(RunContext.class, "globalExtensionRegistry", context) - .andThenTry(GlobalExtensionRegistry.class::cast) - .toOptional() - .orElseThrow(() -> new AssertionError("could not access globalExtensionRegistry field of RunContext")); - extensionRegistry.getGlobalExtensions().add(new AllureSpock2(lifecycle, testPlan)); - - final LauncherConfig config = LauncherConfig.builder() - .enableTestEngineAutoRegistration(false) - .addTestEngines(new SpockEngine()) - .enableTestExecutionListenerAutoRegistration(false) - .enablePostDiscoveryFilterAutoRegistration(false) - .build(); - - final Launcher launcher = LauncherFactory.create(config); - - final AllureLifecycle defaultLifecycle = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + return RunUtils.runTests(lifecycle -> { + final ClassSelector[] classSelectors = Stream.of(classes) + .map(DiscoverySelectors::selectClass) + .toArray(ClassSelector[]::new); + + final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() + .selectors(classSelectors) + .build(); + + final RunContext context = RunContext.get(); + final GlobalExtensionRegistry extensionRegistry = ReflectionUtils + .tryToReadFieldValue(RunContext.class, "globalExtensionRegistry", context) + .andThenTry(GlobalExtensionRegistry.class::cast) + .toOptional() + .orElseThrow(() -> new AssertionError("could not access globalExtensionRegistry field of RunContext")); + extensionRegistry.getGlobalExtensions().add(new AllureSpock2(lifecycle, testPlan)); + + final LauncherConfig config = LauncherConfig.builder() + .enableTestEngineAutoRegistration(false) + .addTestEngines(new SpockEngine()) + .enableTestExecutionListenerAutoRegistration(false) + .enablePostDiscoveryFilterAutoRegistration(false) + .build(); + + final Launcher launcher = LauncherFactory.create(config); launcher.execute(request); - return writerStub; - } finally { - Allure.setLifecycle(defaultLifecycle); - StepsAspects.setLifecycle(defaultLifecycle); - AttachmentsAspects.setLifecycle(defaultLifecycle); - } + }); } private String printSteps(final ExecutableItem item) { diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/BrokenTest.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/BrokenTest.groovy index ec7f8c110..722cdc975 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/BrokenTest.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/BrokenTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/DataDrivenTest.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/DataDrivenTest.groovy index 572f7489a..8a7a62afd 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/DataDrivenTest.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/DataDrivenTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FailedTest.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FailedTest.groovy index e0e1cb8f6..b690390b2 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FailedTest.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FailedTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FixturesTest.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FixturesTest.groovy index f0b747b35..581241776 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FixturesTest.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/FixturesTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/HelloSpockSpec.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/HelloSpockSpec.groovy index b8ab906df..890d8aca1 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/HelloSpockSpec.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/HelloSpockSpec.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/JiraIssue.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/JiraIssue.groovy index a35128212..3ae0b7f34 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/JiraIssue.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/JiraIssue.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/OneTest.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/OneTest.groovy index debc96f55..27e7e70dd 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/OneTest.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/OneTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/ParametersTest.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/ParametersTest.groovy index 252f16ec1..d5b4f5beb 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/ParametersTest.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/ParametersTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecFixtures.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecFixtures.groovy index 7e4c8c0b0..3884e6fed 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecFixtures.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecFixtures.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecInheritanceSpec.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecInheritanceSpec.groovy index d0b598387..41a1ef57f 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecInheritanceSpec.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpecInheritanceSpec.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpockTags.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpockTags.groovy index 7bcf50ff2..25940b3c1 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpockTags.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/SpockTags.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/StepsAndBlocks.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/StepsAndBlocks.groovy index 47dff03e0..2aed57c68 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/StepsAndBlocks.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/StepsAndBlocks.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotations.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotations.groovy index d5065cafd..8f1a4b46e 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotations.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotations.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotationsOnClass.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotationsOnClass.groovy index 169711214..58347d7b2 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotationsOnClass.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithAnnotationsOnClass.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithCustomAnnotations.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithCustomAnnotations.groovy index 78e290cdf..a535ba9c4 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithCustomAnnotations.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithCustomAnnotations.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithSteps.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithSteps.groovy index ac6029158..c80c9e4ab 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithSteps.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestWithSteps.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestsWithIdForFilter.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestsWithIdForFilter.groovy index b05be8128..64ae85712 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestsWithIdForFilter.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/TestsWithIdForFilter.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2023 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/XrayId.groovy b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/XrayId.groovy index ab73089df..ac88117c5 100644 --- a/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/XrayId.groovy +++ b/allure-spock2/src/test/groovy/io/qameta/allure/spock2/samples/XrayId.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spring-web/src/main/java/io/qameta/allure/springweb/AllureRestTemplate.java b/allure-spring-web/src/main/java/io/qameta/allure/springweb/AllureRestTemplate.java index 012ceb974..9f1daf988 100644 --- a/allure-spring-web/src/main/java/io/qameta/allure/springweb/AllureRestTemplate.java +++ b/allure-spring-web/src/main/java/io/qameta/allure/springweb/AllureRestTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-spring-web/src/test/java/io/qameta/allure/springweb/AllureRestTemplateTest.java b/allure-spring-web/src/test/java/io/qameta/allure/springweb/AllureRestTemplateTest.java index 8da4532dc..3911b640f 100644 --- a/allure-spring-web/src/test/java/io/qameta/allure/springweb/AllureRestTemplateTest.java +++ b/allure-spring-web/src/test/java/io/qameta/allure/springweb/AllureRestTemplateTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/FileTestPlanSupplier.java b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/FileTestPlanSupplier.java index 901b685da..5587bbf3c 100644 --- a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/FileTestPlanSupplier.java +++ b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/FileTestPlanSupplier.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlan.java b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlan.java index a0c5b7c21..64bad2ebd 100644 --- a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlan.java +++ b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlan.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanSupplier.java b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanSupplier.java index b3a2c27a7..bbd53e1cd 100644 --- a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanSupplier.java +++ b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanSupplier.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanUnknown.java b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanUnknown.java index 937a7c74a..fd4720302 100644 --- a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanUnknown.java +++ b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanUnknown.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanV1_0.java b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanV1_0.java index 72d79e816..c282ce882 100644 --- a/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanV1_0.java +++ b/allure-test-filter/src/main/java/io/qameta/allure/testfilter/TestPlanV1_0.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java index fecc30ecb..ebbc0a63e 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNgTestFilter.java b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNgTestFilter.java index 376a00e60..886f3e55e 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNgTestFilter.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNgTestFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/Tag.java b/allure-testng/src/main/java/io/qameta/allure/testng/Tag.java index 3336c1e51..b6ddaec1b 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/Tag.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/Tag.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/Tags.java b/allure-testng/src/main/java/io/qameta/allure/testng/Tags.java index 7c78a40f5..2d1590102 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/Tags.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/Tags.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/TestInstanceParameter.java b/allure-testng/src/main/java/io/qameta/allure/testng/TestInstanceParameter.java index 7fcafee50..62de34c33 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/TestInstanceParameter.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/TestInstanceParameter.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/config/AllureTestNgConfig.java b/allure-testng/src/main/java/io/qameta/allure/testng/config/AllureTestNgConfig.java index f35fdea72..e68c09879 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/config/AllureTestNgConfig.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/config/AllureTestNgConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java index ed5cb1c79..7af9c5303 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,12 +15,8 @@ */ package io.qameta.allure.testng; -import io.qameta.allure.Allure; -import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Issue; import io.qameta.allure.Step; -import io.qameta.allure.aspects.AttachmentsAspects; -import io.qameta.allure.aspects.StepsAspects; import io.qameta.allure.model.Attachment; import io.qameta.allure.model.FixtureResult; import io.qameta.allure.model.Label; @@ -35,7 +31,7 @@ import io.qameta.allure.model.WithSteps; import io.qameta.allure.test.AllureFeatures; import io.qameta.allure.test.AllureResults; -import io.qameta.allure.test.AllureResultsWriterStub; +import io.qameta.allure.test.RunUtils; import io.qameta.allure.testfilter.TestPlan; import io.qameta.allure.testfilter.TestPlanV1_0; import io.qameta.allure.testng.config.AllureTestNgConfig; @@ -180,7 +176,7 @@ public void testWithTimeout(final XmlSuite.ParallelMode mode, final int threadCo .hasSize(2) .as("Unexpectedly passed status or stage of tests") .allMatch(testResult -> testResult.getStatus().equals(Status.PASSED) && - testResult.getStage().equals(Stage.FINISHED)) + testResult.getStage().equals(Stage.FINISHED)) .extracting(TestResult::getName) .as("Unexpectedly passed name of tests") .containsOnlyElementsOf(asList( @@ -1106,7 +1102,7 @@ public void shouldDisplayDisabledTests() { public void shouldNotDisplayDisabledTests() { AllureTestNgConfig allureTestNgConfig = AllureTestNgConfig.loadConfigProperties(); allureTestNgConfig.setHideDisabledTests(true); - final AllureResults results = runTestNgSuites(allureTestNgConfig,"suites/gh-369.xml"); + final AllureResults results = runTestNgSuites(allureTestNgConfig, "suites/gh-369.xml"); assertThat(results.getTestResults()) .extracting(TestResult::getName, TestResult::getStatus) .containsOnly(tuple("enabled", Status.PASSED)); @@ -1253,7 +1249,8 @@ private AllureResults runTestNgSuites(AllureTestNgConfig config, final String... } private AllureResults runTestNgSuites(final Consumer configurer, - final String... suites) {; + final String... suites) { + ; return runTestNgSuites(configurer, AllureTestNgConfig.loadConfigProperties(), suites); } @@ -1272,29 +1269,17 @@ private AllureResults runTestNgSuites(final Consumer configurer, .as("Cannot find all suite xml files") .hasSameSizeAs(suiteFiles); - final AllureResultsWriterStub results = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(results); - final AllureTestNg adapter = new AllureTestNg(lifecycle, - new AllureTestNgTestFilter(), - config); - final TestNG testNg = new TestNG(false); - testNg.addListener((ITestNGListener) adapter); - testNg.setTestSuites(suiteFiles); - - configurer.accept(testNg); + return RunUtils.runTests(lifecycle -> { + final AllureTestNg adapter = new AllureTestNg(lifecycle, + new AllureTestNgTestFilter(), + config); + final TestNG testNg = new TestNG(false); + testNg.addListener((ITestNGListener) adapter); + testNg.setTestSuites(suiteFiles); - final AllureLifecycle cached = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + configurer.accept(testNg); testNg.run(); - } finally { - Allure.setLifecycle(cached); - StepsAspects.setLifecycle(cached); - AttachmentsAspects.setLifecycle(cached); - } - return results; + }); } protected Consumer parallel(final XmlSuite.ParallelMode mode, @@ -1329,13 +1314,13 @@ private Predicate hasLinks() { @Step("Find flaky") private Predicate flakyPredicate() { return testResult -> Objects.nonNull(testResult.getStatusDetails()) - && testResult.getStatusDetails().isFlaky(); + && testResult.getStatusDetails().isFlaky(); } @Step("Find muted") private Predicate mutedPredicate() { return testResult -> Objects.nonNull(testResult.getStatusDetails()) - && testResult.getStatusDetails().isMuted(); + && testResult.getStatusDetails().isMuted(); } @Step("Get uuids by container name") @@ -1517,28 +1502,15 @@ public void correctIdIncorrectSelector() { ); } - public AllureResultsWriterStub runTestPlan(TestPlan plan, final Class... testClasses) { - final AllureResultsWriterStub results = new AllureResultsWriterStub(); - final AllureLifecycle lifecycle = new AllureLifecycle(results); - final AllureTestNg adapter = new AllureTestNg(lifecycle, new AllureTestNgTestFilter(plan)); - TestNG testNG = new TestNG(false); - testNG.addListener((ITestNGListener) adapter); - testNG.setTestClasses(testClasses); - testNG.setOutputDirectory("build/test-output"); - - - final AllureLifecycle cached = Allure.getLifecycle(); - try { - Allure.setLifecycle(lifecycle); - StepsAspects.setLifecycle(lifecycle); - AttachmentsAspects.setLifecycle(lifecycle); + public AllureResults runTestPlan(final TestPlan plan, final Class... testClasses) { + return RunUtils.runTests(lifecycle -> { + final AllureTestNg adapter = new AllureTestNg(lifecycle, new AllureTestNgTestFilter(plan)); + final TestNG testNG = new TestNG(false); + testNG.addListener((ITestNGListener) adapter); + testNG.setTestClasses(testClasses); + testNG.setOutputDirectory("build/test-output"); testNG.run(); - return results; - } finally { - Allure.setLifecycle(cached); - StepsAspects.setLifecycle(cached); - AttachmentsAspects.setLifecycle(cached); - } + }); } private Integer getOrderParameter(final TestResult result) { diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/AfterFixturesCombination.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/AfterFixturesCombination.java index 19e5b5df2..563680c60 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/AfterFixturesCombination.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/AfterFixturesCombination.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/AllFeatures.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/AllFeatures.java index 7399eac70..f24a42c19 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/AllFeatures.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/AllFeatures.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/AttachmentsTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/AttachmentsTest.java index 71f88dc7d..a816b75d7 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/AttachmentsTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/AttachmentsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTest.java index e90bca720..62485655a 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestA.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestA.java index e2fee0852..460d1b0c9 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestA.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestA.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestB.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestB.java index 1d71e10e7..a99c791bb 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestB.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BaseTestB.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTests.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTests.java index e37b6c1c3..23e4b8949 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTests.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTestsInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTestsInherited.java index cdcdf49b9..9aa261359 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTestsInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BddAnnotationsTestsInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeFixturesCombination.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeFixturesCombination.java index 24efb054b..0122ae8df 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeFixturesCombination.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeFixturesCombination.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeMethods.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeMethods.java index b0b8c6b37..802a5a309 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeMethods.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/BeforeMethods.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures1.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures1.java index c500d2873..258a738fd 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures1.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures1.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures2.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures2.java index dd4984ba3..a58f47ace 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures2.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures2.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures3.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures3.java index 7df51b414..76195b36f 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures3.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixtures3.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInParent.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInParent.java index fc3b8262b..a620ffbba 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInParent.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInParent.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInherited.java index da723cfd2..196aad966 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ClassFixturesInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ConfigurationFailure.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ConfigurationFailure.java index 5775f0ac3..d258efa0b 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ConfigurationFailure.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ConfigurationFailure.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/CyrillicDescriptions.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/CyrillicDescriptions.java index a13f441be..475ffb5bd 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/CyrillicDescriptions.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/CyrillicDescriptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DataProviderWithArray.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DataProviderWithArray.java index bd9fc9a9c..994e32565 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DataProviderWithArray.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DataProviderWithArray.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsAnotherTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsAnotherTest.java index 3e8ab149f..cb5f9f3df 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsAnotherTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsAnotherTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsTest.java index 3772bce0d..c16eab81a 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DisabledTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DisabledTest.java index 82e1c751d..b01b16f4f 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/DisabledTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DisabledTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FactoryOnConstructorTests.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FactoryOnConstructorTests.java index 8d9fdfc24..4f2af21c4 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FactoryOnConstructorTests.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FactoryOnConstructorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterMethod.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterMethod.java index 649fea153..5297b3d69 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterMethod.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterSuite.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterSuite.java index c794347a3..09ed05877 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterSuite.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterSuite.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterTest.java index 9fd4a952c..417b2fbfc 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedAfterTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java index f28c7a7d8..05d8853fb 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java index 85b1326ae..fdba2be7f 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java index f0f10afef..4226d81f8 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java index 0e57ae2d3..bd498a19a 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedFlakyTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedFlakyTest.java index a11acb9ab..7bf87987e 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedFlakyTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedFlakyTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedSetUp.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedSetUp.java index 4d3524532..578b4f807 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedSetUp.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedSetUp.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedTestPassedBeforeFixture.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedTestPassedBeforeFixture.java index 1dedbe5ee..d5a24421c 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedTestPassedBeforeFixture.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedTestPassedBeforeFixture.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FixtureWithDescription.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FixtureWithDescription.java index 37ef45fbc..94e0922d9 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FixtureWithDescription.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FixtureWithDescription.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethods.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethods.java index 293d00a23..5441c5940 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethods.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethods.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethodsInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethodsInherited.java index b1d50c574..970dd55af 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethodsInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyMethodsInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClass.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClass.java index 20cd5155c..317c0603b 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClass.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClass.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClassInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClassInherited.java index 80ea6f84a..65b002350 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClassInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FlakyTestClassInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/HistoryIdForTestWithDataProvider.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/HistoryIdForTestWithDataProvider.java index c2297a372..e21a0ac06 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/HistoryIdForTestWithDataProvider.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/HistoryIdForTestWithDataProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/JustTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/JustTest.java index cb383f502..98f2f142d 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/JustTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/JustTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTests.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTests.java index f98541dfb..b964fbb46 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTests.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTestsInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTestsInherited.java index 351a5b5dd..c63d7b821 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTestsInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/LinksOnTestsInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethods.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethods.java index 2f960863f..fd0f30bfa 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethods.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethods.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethodsInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethodsInherited.java index f079e1a71..078f3b0a4 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethodsInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedMethodsInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClass.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClass.java index eb149798c..0edc9b78f 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClass.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClass.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClassInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClassInherited.java index cb9c3a304..741cb2924 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClassInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/MutedTestClassInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/NestedSteps.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/NestedSteps.java index 25f6f0df1..f12af9f78 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/NestedSteps.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/NestedSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/NullParamTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/NullParamTest.java index 211522528..bb1482c06 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/NullParamTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/NullParamTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTest.java index f0d534ed3..36cbed218 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTestInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTestInherited.java index 64780d44d..26a18b612 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTestInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerClassTestInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTest.java index a6fb4e849..8c5b56bc7 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTestInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTestInherited.java index 198586ca0..1b6e7251e 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTestInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/OwnerMethodTestInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelDataProviderSample.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelDataProviderSample.java index 28d4cd5ca..5a98b901b 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelDataProviderSample.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelDataProviderSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelMethods.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelMethods.java index de1adde10..3adfa59eb 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelMethods.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParallelMethods.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParameterizedTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParameterizedTest.java index 567b6dae7..385689b14 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParameterizedTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/ParameterizedTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerClassFixtures.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerClassFixtures.java index 701663c7f..49c67d25c 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerClassFixtures.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerClassFixtures.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerMethodFixtures.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerMethodFixtures.java index c8a859938..ec0515dbf 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerMethodFixtures.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerMethodFixtures.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerSuiteFixtures.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerSuiteFixtures.java index f3d5adced..51c1a6c1a 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerSuiteFixtures.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerSuiteFixtures.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerTestFixtures.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerTestFixtures.java index f77ed3f79..da09bb7fd 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerTestFixtures.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PerTestFixtures.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PriorityTests.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PriorityTests.java index 43997cbdf..b61c15088 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/PriorityTests.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/PriorityTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/RetryTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/RetryTest.java index f24a30ca5..94f28efc4 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/RetryTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/RetryTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTest.java index fd8e25385..3f8468389 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTestInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTestInherited.java index 2f59dc291..968fbe9ff 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTestInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityClassTestInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTest.java index b7e262097..fe2671834 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTestInherited.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTestInherited.java index 2cb9f4349..87d1ddffd 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTestInherited.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SeverityMethodTestInherited.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SkippedSuite.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SkippedSuite.java index 8dbb03e05..45d36923c 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SkippedSuite.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SkippedSuite.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SuiteParameterTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SuiteParameterTest.java index 69d676785..d1ab7946d 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/SuiteParameterTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/SuiteParameterTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagClassTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagClassTest.java index 4c6d07bfa..f9fa0f65a 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagClassTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagClassTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagMethodTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagMethodTest.java index aabb2ed36..0aae5a0aa 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagMethodTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TagMethodTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestTagFixtures.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestTagFixtures.java index c9242d7e2..af3aeb2f4 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestTagFixtures.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestTagFixtures.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithParameters.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithParameters.java index f23e504e4..bd08a9ba2 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithParameters.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithParameters.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithTimeout.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithTimeout.java index 02447df3c..548d2780c 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithTimeout.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestWithTimeout.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithIdForFilter.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithIdForFilter.java index 70bcdcde4..aa401db70 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithIdForFilter.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithIdForFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithSteps.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithSteps.java index 157a9981e..25faca37c 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithSteps.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/VarargsParameters.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/VarargsParameters.java index b2f363422..f620badc1 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/VarargsParameters.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/VarargsParameters.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/build.gradle.kts b/build.gradle.kts index 277888eee..69a89cf1b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,4 @@ -val linkHomepage by extra("https://qameta.io/allure") -val linkCi by extra("https://ci.qameta.in/job/allure-java_deploy/") -val linkScmUrl by extra("https://github.com/allure-framework/allure-java") -val linkScmConnection by extra("scm:git:git://github.com/allure-framework/allure-java.git") -val linkScmDevConnection by extra("scm:git:ssh://git@github.com:allure-framework/allure-java.git") +import com.github.spotbugs.snom.SpotBugsTask val gradleScriptDir by extra("${rootProject.projectDir}/gradle") val qualityConfigsDir by extra("$gradleScriptDir/quality-configs") @@ -11,7 +7,7 @@ val spotlessDtr by extra("$qualityConfigsDir/spotless") val libs = subprojects.filterNot { it.name in "allure-bom" } tasks.withType(Wrapper::class) { - gradleVersion = "7.5.1" + gradleVersion = "8.5" } plugins { @@ -19,12 +15,14 @@ plugins { `java-library` `maven-publish` signing + checkstyle + pmd + id("com.github.spotbugs") id("com.diffplug.spotless") id("io.github.gradle-nexus.publish-plugin") id("io.qameta.allure-adapter") apply false id("io.qameta.allure-report") id("io.spring.dependency-management") - id("ru.vyarus.quality") } java { @@ -131,13 +129,15 @@ configure(subprojects) { configure(libs) { val project = this + apply(plugin = "checkstyle") + apply(plugin = "pmd") + apply(plugin = "com.github.spotbugs") apply(plugin = "com.diffplug.spotless") apply(plugin = "io.qameta.allure-report") apply(plugin = "io.qameta.allure-adapter") apply(plugin = "io.spring.dependency-management") apply(plugin = "java") apply(plugin = "java-library") - apply(plugin = "ru.vyarus.quality") val orgSlf4jVersion = "1.7.36" val assertJVersion = "1.9.9.1" @@ -148,17 +148,17 @@ configure(libs) { mavenBom("org.junit:junit-bom:5.9.2") } dependencies { - dependency("com.github.spotbugs:spotbugs:4.7.3") - dependency("com.github.tomakehurst:wiremock:2.27.2") + dependency("com.github.spotbugs:spotbugs:4.8.3") + dependency("com.github.tomakehurst:wiremock:3.0.1") dependency("com.google.inject:guice:5.1.0") dependency("com.google.testing.compile:compile-testing:0.19") - dependency("com.puppycrawl.tools:checkstyle:9.3") + dependency("com.puppycrawl.tools:checkstyle:10.13.0") dependency("com.squareup.retrofit2:retrofit:2.9.0") dependency("commons-io:commons-io:2.11.0") dependency("io.github.benas:random-beans:3.9.0") dependency("io.github.glytching:junit-extensions:2.6.0") dependency("javax.annotation:javax.annotation-api:1.3.2") - dependency("net.sourceforge.pmd:pmd-java:6.46.0") + dependency("net.sourceforge.pmd:pmd-java:6.55.0") dependency("org.apache.commons:commons-lang3:3.12.0") dependency("org.apache.httpcomponents:httpclient:4.5.13") dependency("org.apache.httpcomponents.client5:httpclient5:5.2.1") @@ -170,7 +170,7 @@ configure(libs) { dependency("org.hamcrest:hamcrest:2.2") dependency("org.jboss.resteasy:resteasy-client:6.2.1.Final") dependency("org.mock-server:mockserver-netty:5.15.0") - dependency("org.mockito:mockito-core:5.3.0") + dependency("org.mockito:mockito-core:5.10.0") dependency("org.slf4j:slf4j-api:${orgSlf4jVersion}") dependency("org.slf4j:slf4j-nop:${orgSlf4jVersion}") dependency("org.slf4j:slf4j-simple:${orgSlf4jVersion}") @@ -266,16 +266,24 @@ configure(libs) { } } - quality { - configDir = qualityConfigsDir - checkstyleVersion = dependencyManagement.managedVersions["com.puppycrawl.tools:checkstyle"] - pmdVersion = dependencyManagement.managedVersions["net.sourceforge.pmd:pmd-java"] - spotbugsVersion = dependencyManagement.managedVersions["com.github.spotbugs:spotbugs"] - spotbugs = true - pmd = true - checkstyle = true - htmlReports = false - enabled = !project.hasProperty("disableQuality") + val enableQuality = true + fun excludeGeneratedSources(source: FileTree): FileTree = (source - fileTree("build/generated-sources")).asFileTree + + checkstyle { + toolVersion = dependencyManagement.managedVersions["com.puppycrawl.tools:checkstyle"]!! + configDirectory = rootProject.layout.projectDirectory.dir("gradle/quality-configs/checkstyle") + } + + pmd { + toolVersion = dependencyManagement.managedVersions["net.sourceforge.pmd:pmd-java"]!! + ruleSets = listOf() + ruleSetFiles = rootProject.files("gradle/quality-configs/pmd/pmd.xml") + } + + spotbugs { + toolVersion = dependencyManagement.managedVersions["com.github.spotbugs:spotbugs"]!! + excludeFilter = rootProject.file("gradle/quality-configs/spotbugs/exclude.xml") + afterEvaluate { val spotbugs = configurations.findByName("spotbugs") if (spotbugs != null) { @@ -287,11 +295,36 @@ configure(libs) { } } + tasks.withType(Checkstyle::class) { + source = excludeGeneratedSources(source) + enabled = enableQuality + } + + tasks.withType(Pmd::class) { + source = excludeGeneratedSources(source) + enabled = enableQuality + } + + tasks.withType(SpotBugsTask::class) { + enabled = enableQuality + } + + tasks.checkstyleTest { + enabled = false + } + + tasks.pmdTest { + enabled = false + } + + tasks.spotbugsTest { + enabled = false + } + spotless { java { target("src/**/*.java") removeUnusedImports() - @Suppress("INACCESSIBLE_TYPE") licenseHeaderFile("$spotlessDtr/header.java", "(package|import|open|module|//startfile)") endWithNewline() replaceRegex("one blank line after package line", "(package .+;)\n+import", "$1\n\nimport") @@ -299,7 +332,6 @@ configure(libs) { } scala { target("src/**/*.scala") - @Suppress("INACCESSIBLE_TYPE") licenseHeaderFile("$spotlessDtr/header.java", "(package|//startfile)") endWithNewline() replaceRegex("one blank line after package line", "(package .+;)\n+import", "$1\n\nimport") @@ -307,7 +339,6 @@ configure(libs) { } groovy { target("src/**/*.groovy") - @Suppress("INACCESSIBLE_TYPE") licenseHeaderFile("$spotlessDtr/header.java", "(package|//startfile) ") endWithNewline() replaceRegex("one blank line after package line", "(package .+;)\n+import", "$1\n\nimport") diff --git a/gradle.properties b/gradle.properties index 9898f04de..da7d49fc5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=2.25.0 +version=2.26.0 org.gradle.daemon=true org.gradle.parallel=true diff --git a/gradle/quality-configs/pmd/pmd.xml b/gradle/quality-configs/pmd/pmd.xml index 3d45d9f69..7a26c293e 100644 --- a/gradle/quality-configs/pmd/pmd.xml +++ b/gradle/quality-configs/pmd/pmd.xml @@ -111,7 +111,7 @@ - + @@ -123,6 +123,7 @@ + @@ -134,7 +135,7 @@ - + diff --git a/gradle/quality-configs/spotless/header.java b/gradle/quality-configs/spotless/header.java index e42de8108..a91c27d5a 100644 --- a/gradle/quality-configs/spotless/header.java +++ b/gradle/quality-configs/spotless/header.java @@ -1,5 +1,5 @@ /* - * Copyright $YEAR Qameta Software OÜ + * Copyright 2016-2024 Qameta Software Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -12,4 +12,4 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ \ No newline at end of file + */ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2..249e5832f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661ee..a59520664 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 744e882ed..a69d9cb6c 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MSYS* | MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,101 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index ac1b06f93..53a6b238d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/settings.gradle.kts b/settings.gradle.kts index a1c4358dd..487d5b0ad 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -48,7 +48,7 @@ pluginManagement { } plugins { id("com.diffplug.spotless") version "6.11.0" - id("com.github.johnrengelman.shadow") version "7.1.2" + id("com.github.johnrengelman.shadow") version "8.1.1" id("com.gradle.enterprise") version "3.12.5" id("io.github.gradle-nexus.publish-plugin") version "1.1.0" id("io.qameta.allure-adapter") version "2.11.2" @@ -56,8 +56,8 @@ pluginManagement { id("io.qameta.allure-download") version "2.11.2" id("io.qameta.allure-report") version "2.11.2" id("io.spring.dependency-management") version "1.1.0" - id("ru.vyarus.quality") version "4.7.0" id("com.google.protobuf") version "0.9.1" + id("com.github.spotbugs") version "6.0.6" kotlin("jvm") version "1.7.10" } }