From d3224cc060035d8e93593b2f8a95d88c61eb7192 Mon Sep 17 00:00:00 2001 From: Dmitry Baev Date: Tue, 8 Nov 2022 16:14:17 +0400 Subject: [PATCH 1/5] use java 17 for build with release target 8 --- build.gradle.kts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 28e57bf1e..c351a1be4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -28,8 +28,9 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } } @@ -182,6 +183,7 @@ configure(libs) { tasks { compileJava { options.encoding = "UTF-8" + options.release.set(8) } compileTestJava { From 857280c6587695ce55a205f3557788c8c60feb22 Mon Sep 17 00:00:00 2001 From: Dmitry Baev Date: Tue, 8 Nov 2022 17:02:21 +0400 Subject: [PATCH 2/5] fix build --- .github/release.yml | 3 +++ .github/workflows/build.yml | 2 +- .github/workflows/labels-verify.yml | 17 +++++++++++++---- .github/workflows/publish.yml | 4 ++-- .../allure/reader/AllureEnumDeserializer.java | 4 ++-- .../reader/ParameterModeDeserializer.java | 4 ++-- .../qameta/allure/reader/StageDeserializer.java | 4 ++-- .../allure/reader/StatusDeserializer.java | 4 ++-- build.gradle.kts | 12 ++++++++---- gradle.properties | 2 +- 10 files changed, 36 insertions(+), 20 deletions(-) diff --git a/.github/release.yml b/.github/release.yml index c382d697b..7c30a5979 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -14,6 +14,9 @@ changelog: - title: '⬆️ Dependency Updates' labels: - 'type:dependencies' + - title: '📖 Documentation improvements' + labels: + - 'type:documentation' - title: '⛔️ Security' labels: - 'type:security' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1393bc49b..a0be430e7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: strategy: fail-fast: false matrix: - java-version: [ '8.0.x', '11.0.x' ] + java-version: [ '17.0.x' ] steps: - uses: actions/checkout@v3.2.0 diff --git a/.github/workflows/labels-verify.yml b/.github/workflows/labels-verify.yml index c9980ead9..0c18ecb77 100644 --- a/.github/workflows/labels-verify.yml +++ b/.github/workflows/labels-verify.yml @@ -1,13 +1,22 @@ name: "Verify type labels" on: - pull_request: - types: [ labeled, unlabeled ] + pull_request_target: + types: [opened, labeled, unlabeled, synchronize] jobs: triage: runs-on: ubuntu-latest steps: - - uses: baev/match-label-action@master + - uses: baev/action-label-verify@main with: - allowed: 'type:bug,type:new feature,type:improvement,type:dependencies,type:internal,type:invalid' + repo-token: ${{ secrets.GITHUB_TOKEN }} + allowed: | + type:bug + type:dependencies + type:improvement + type:internal + type:invalid + type:new feature + type:security + type:documentation diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d0d9cdff6..a02def86b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,11 +10,11 @@ jobs: steps: - uses: actions/checkout@v3.2.0 - - name: Set up JDK 1.8 + - name: "Set up JDK 17.0.x" uses: actions/setup-java@v3 with: distribution: 'zulu' - java-version: 8.0.x + java-version: '17.0.x' - name: Set up GPG run: echo -n "${GPG_PRIVATE_KEY}" | base64 --decode > ${GITHUB_WORKSPACE}/${GPG_KEY_ID}.gpg 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 6508d198e..f7ed171cb 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 @@ -26,8 +26,8 @@ /** * @param the enum's type * @author charlie (Dmitry Baev). - * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS} - * and {@link com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL} + * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature#ACCEPT_CASE_INSENSITIVE_ENUMS} + * and {@link com.fasterxml.jackson.databind.DeserializationFeature#READ_UNKNOWN_ENUM_VALUES_AS_NULL} */ @Deprecated /* package-private */ abstract class AllureEnumDeserializer> extends StdDeserializer { 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 197a6c6d1..a83ba7c65 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 @@ -19,8 +19,8 @@ /** * @author charlie (Dmitry Baev). - * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS} - * and {@link com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL} + * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature#ACCEPT_CASE_INSENSITIVE_ENUMS} + * and {@link com.fasterxml.jackson.databind.DeserializationFeature#READ_UNKNOWN_ENUM_VALUES_AS_NULL} */ @Deprecated public class ParameterModeDeserializer extends AllureEnumDeserializer { 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 0bea2076c..47858a16c 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 @@ -19,8 +19,8 @@ /** * @author charlie (Dmitry Baev). - * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS} - * and {@link com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL} + * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature#ACCEPT_CASE_INSENSITIVE_ENUMS} + * and {@link com.fasterxml.jackson.databind.DeserializationFeature#READ_UNKNOWN_ENUM_VALUES_AS_NULL} */ @Deprecated public class StageDeserializer extends AllureEnumDeserializer { 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 eb499add8..2500e65ca 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 @@ -19,8 +19,8 @@ /** * @author charlie (Dmitry Baev). - * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS} - * and {@link com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL} + * @deprecated in favor of {@link com.fasterxml.jackson.databind.MapperFeature#ACCEPT_CASE_INSENSITIVE_ENUMS} + * and {@link com.fasterxml.jackson.databind.DeserializationFeature#READ_UNKNOWN_ENUM_VALUES_AS_NULL} */ @Deprecated public class StatusDeserializer extends AllureEnumDeserializer { diff --git a/build.gradle.kts b/build.gradle.kts index c351a1be4..0b3b74b2b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -182,12 +182,14 @@ configure(libs) { tasks { compileJava { - options.encoding = "UTF-8" - options.release.set(8) + if (JavaVersion.current().isJava8) { + java.targetCompatibility = JavaVersion.VERSION_1_8 + } else { + options.release.set(8) + } } compileTestJava { - options.encoding = "UTF-8" options.compilerArgs.add("-parameters") } @@ -305,7 +307,9 @@ configure(libs) { } tasks.withType(Javadoc::class) { - (options as StandardJavadocDocletOptions).addStringOption("Xdoclint:none", "-quiet") + (options as StandardJavadocDocletOptions).apply { + addStringOption("Xdoclint:none", "-quiet") + } } publishing.publications.named("maven") { diff --git a/gradle.properties b/gradle.properties index 1aa563c4c..ce0935d94 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ version=2.21-SNAPSHOT org.gradle.daemon=true org.gradle.parallel=true org.gradle.warning.mode=none -org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m +org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m test.maxHeapSize=512m test.maxParallelForks=4 From 3847640843fcef47cb770e78582eb97540e053c7 Mon Sep 17 00:00:00 2001 From: Dmitry Baev Date: Mon, 12 Dec 2022 17:53:27 +0700 Subject: [PATCH 3/5] fix tests --- .../awaitility/AllureAwaitilityListener.java | 19 ++- .../ConditionListenersPositiveTest.java | 118 ++++++++++-------- 2 files changed, 74 insertions(+), 63 deletions(-) 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 86f1b1ae5..8a3f468b2 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 @@ -177,16 +177,15 @@ public void conditionEvaluated(final EvaluatedCondition condition) { final long remainingTime = unit.convert(condition.getRemainingTimeInMS(), MILLISECONDS); final String unitAsString = unit.toString().toLowerCase(); - final String message; - if (condition.isSatisfied()) { - message = - String.format(onSatisfiedStepTextPattern, description, elapsedTime, unitAsString, remainingTime, - unitAsString, new TemporalDuration(condition.getPollInterval())); - } else { - message = - String.format(onAwaitStepTextPattern, description, elapsedTime, unitAsString, remainingTime, - unitAsString, new TemporalDuration(condition.getPollInterval())); - } + final String message = String.format( + condition.isSatisfied() ? onSatisfiedStepTextPattern : onAwaitStepTextPattern, + description, + elapsedTime, + unitAsString, + remainingTime, + unitAsString, + new TemporalDuration(condition.getPollInterval()) + ); getLifecycle().updateStep(awaitilityCondition -> { final String lastAwaitStepUUID = UUID.randomUUID().toString(); 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 0ff23ee28..8df4c10c6 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 @@ -16,23 +16,26 @@ package io.qameta.allure.awaitility; import io.qameta.allure.model.Status; +import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; +import org.junit.jupiter.api.DynamicNode; +import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestFactory; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Stream; import static io.qameta.allure.test.RunUtils.runWithinTestContext; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; import static org.hamcrest.Matchers.is; -import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.DynamicTest.dynamicTest; -@TestInstance(TestInstance.Lifecycle.PER_METHOD) class ConditionListenersPositiveTest { /** @@ -45,8 +48,8 @@ class ConditionListenersPositiveTest { *
  • 2. Top level step has passed status
  • *
  • 3. Top level step has default name
  • */ - @Test - void globalSettingsAwaitWoAliasCheckTopLevelPassedStep() { + @TestFactory + Stream globalSettingsAwaitWoAliasCheckTopLevelPassedStep() { final List testResult = runWithinTestContext(() -> { final AtomicInteger atomicInteger = new AtomicInteger(0); await().with() @@ -57,19 +60,20 @@ void globalSettingsAwaitWoAliasCheckTopLevelPassedStep() { }, AllureAwaitilityListener::setLifecycle ).getTestResults(); - assertAll( - () -> assertEquals( - 1, testResult.get(0).getSteps().size(), - "Exactly 1 top level step for 1 awaitility condition" + + return Stream.of( + DynamicTest.dynamicTest("Exactly 1 top level step for 1 awaitility condition", () -> + assertThat(testResult.get(0).getSteps()) + .hasSize(1) ), - () -> assertEquals( - Status.PASSED, testResult.get(0).getSteps().get(0).getStatus(), - "Top level step has passed status" + DynamicTest.dynamicTest("Top level step has passed status", () -> + assertThat(testResult.get(0).getSteps()) + .allMatch(step -> Status.PASSED.equals(step.getStatus())) ), - () -> assertEquals( - "Awaitility: Starting evaluation", - testResult.get(0).getSteps().get(0).getName(), - "Top level step has default name because await() wo alias" + DynamicTest.dynamicTest("Top level step has default name because await() wo alias", () -> + assertThat(testResult.get(0).getSteps()) + .extracting(StepResult::getName) + .containsExactly("Awaitility: Starting evaluation") ) ); } @@ -111,8 +115,8 @@ void globalSettingsAwaitWithAliasCheckTopLevelPassedStep() { *
  • 2. All second-level steps should have passed status for successful condition evaluation
  • *
  • 3. All second-level steps should have information about polling intervals and evaluation
  • */ - @Test - void globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { + @TestFactory + Stream globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { final List testResult = runWithinTestContext(() -> { final AtomicInteger atomicInteger = new AtomicInteger(0); await().with() @@ -123,43 +127,51 @@ void globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { }, AllureAwaitilityListener::setLifecycle ).getTestResults(); - assertAll( - () -> assertEquals( - 4, testResult.get(0).getSteps().get(0).getSteps().size(), - "Exactly 4 second level steps for 4 polling iterations" + + return Stream.of( + dynamicTest("Exactly 4 second level steps for 4 polling iterations", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps()) + .hasSize(4) ), - () -> assertEquals( - 4, (int) testResult.get(0).getSteps().get(0).getSteps().stream() - .filter(x -> x.getStatus().equals(Status.PASSED)).count(), - "All second level steps has passed statuses" + dynamicTest("All second level steps has passed statuses", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps()) + .allMatch(x -> x.getStatus().equals(Status.PASSED)) ), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("expected <3> but was <0>") - .contains("elapsed time") - .contains("remaining time") - .contains("last poll interval was"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("expected <3> but was <1>") - .contains("elapsed time") - .contains("remaining time") - .contains("last poll interval was"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(2).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("expected <3> but was <2>") - .contains("elapsed time") - .contains("remaining time") - .contains("last poll interval was"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(3).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("reached its end value of <3> after") - .contains("remaining time") - .contains("last poll interval was") + dynamicTest("Second level step 1 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName()) + .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") + .contains("that uses java.util.concurrent.atomic.AtomicInteger:") + .contains("expected <3> but was <0>") + .contains("elapsed time") + .contains("remaining time") + .contains("last poll interval was") + ), + dynamicTest("Second level step 2 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName()) + .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") + .contains("that uses java.util.concurrent.atomic.AtomicInteger:") + .contains("expected <3> but was <1>") + .contains("elapsed time") + .contains("remaining time") + .contains("last poll interval was") + ), + dynamicTest("Second level step 3 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(2).getName()) + .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") + .contains("that uses java.util.concurrent.atomic.AtomicInteger:") + .contains("expected <3> but was <2>") + .contains("elapsed time") + .contains("remaining time") + .contains("last poll interval was") + ), + dynamicTest("Second level step 4 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(3).getName()) + .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") + .contains("that uses java.util.concurrent.atomic.AtomicInteger:") + .contains("reached its end value of <3> after") + .contains("remaining time") + .contains("last poll interval was") + ) ); } From d48ec86b4792cca4629cb4bfd8dcb3e47787564e Mon Sep 17 00:00:00 2001 From: Dmitry Baev Date: Tue, 13 Dec 2022 15:52:08 +0700 Subject: [PATCH 4/5] fix tests --- .../ConditionListenersPositiveTest.java | 4 - .../GlobalSettingsNegativeTest.java | 52 ++++---- .../GlobalSettingsPositiveTest.java | 120 +++++++++++------- 3 files changed, 100 insertions(+), 76 deletions(-) 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 8df4c10c6..e62e0314f 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 @@ -140,7 +140,6 @@ Stream globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { dynamicTest("Second level step 1 name", () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName()) .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") .contains("expected <3> but was <0>") .contains("elapsed time") .contains("remaining time") @@ -149,7 +148,6 @@ Stream globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { dynamicTest("Second level step 2 name", () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName()) .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") .contains("expected <3> but was <1>") .contains("elapsed time") .contains("remaining time") @@ -158,7 +156,6 @@ Stream globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { dynamicTest("Second level step 3 name", () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(2).getName()) .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") .contains("expected <3> but was <2>") .contains("elapsed time") .contains("remaining time") @@ -167,7 +164,6 @@ Stream globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { dynamicTest("Second level step 4 name", () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(3).getName()) .contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") .contains("reached its end value of <3> after") .contains("remaining time") .contains("last poll interval was") 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 6561331cc..4b27b17e6 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 @@ -20,20 +20,23 @@ import org.awaitility.Awaitility; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DynamicNode; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestFactory; import org.junit.jupiter.api.TestInstance; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Stream; import static io.qameta.allure.test.RunUtils.runWithinTestContext; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; import static org.hamcrest.Matchers.is; -import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.DynamicTest.dynamicTest; @TestInstance(TestInstance.Lifecycle.PER_METHOD) class GlobalSettingsNegativeTest { @@ -83,8 +86,8 @@ void globalSettingsAwaitWoAliasCheckTopLevelBrokenStep() { *
  • 2. All second-level steps should have passed or broken status for successful and timeout evaluations
  • *
  • 3. All second-level steps should have information about polling intervals and evaluation
  • */ - @Test - void globalSettingsCheckAwaitWoAliasSecondLevelTimeoutStep() { + @TestFactory + Stream globalSettingsCheckAwaitWoAliasSecondLevelTimeoutStep() { final List testResult = runWithinTestContext(() -> { final AtomicInteger atomicInteger = new AtomicInteger(0); await().with() @@ -94,26 +97,29 @@ void globalSettingsCheckAwaitWoAliasSecondLevelTimeoutStep() { }, AllureAwaitilityListener::setLifecycle ).getTestResults(); - assertAll( - () -> assertEquals( - 2, testResult.get(0).getSteps().get(0).getSteps().size(), - "Exactly 2 second level steps for 2 polling iterations" - ), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsNegativeTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("expected <3> but was <0>") - .contains("elapsed time") - .contains("remaining time") - .contains("last poll interval was"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getStatus()) - .isEqualTo(Status.PASSED), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName()) - .contains("Condition timeout.") - .contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsNegativeTest") - .contains("expected <3> but was <0> within 1 seconds"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getStatus()) - .isEqualTo(Status.BROKEN) + + return Stream.of( + dynamicTest("Second level steps count", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps()) + .as("Exactly 2 second level steps for 2 polling iterations") + .hasSize(2)), + dynamicTest("Second level step 1 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName()) + .contains("io.qameta.allure.awaitility.GlobalSettingsNegativeTest") + .contains("expected <3> but was <0>") + .contains("elapsed time") + .contains("remaining time") + .contains("last poll interval was")), + dynamicTest("Second level step 1 status", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getStatus()) + .isEqualTo(Status.PASSED)), + dynamicTest("Second level step 2 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName()) + .contains("Condition timeout.") + .contains("io.qameta.allure.awaitility.GlobalSettingsNegativeTest")), + dynamicTest("Second level step 2 status", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getStatus()) + .isEqualTo(Status.BROKEN)) ); } 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 d4e3fd666..da5f84137 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 @@ -16,10 +16,12 @@ package io.qameta.allure.awaitility; import io.qameta.allure.model.Status; +import io.qameta.allure.model.StepResult; import io.qameta.allure.model.TestResult; import org.awaitility.Awaitility; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DynamicNode; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -27,13 +29,14 @@ import java.time.temporal.ChronoUnit; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Stream; import static io.qameta.allure.test.RunUtils.runWithinTestContext; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; import static org.hamcrest.Matchers.is; -import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.DynamicTest.dynamicTest; @TestInstance(TestInstance.Lifecycle.PER_METHOD) class GlobalSettingsPositiveTest { @@ -59,7 +62,7 @@ void setup() { *
  • 3. Top level step has default name
  • */ @Test - void globalSettingsAwaitWoAliasCheckTopLevelPassedStep() { + Stream globalSettingsAwaitWoAliasCheckTopLevelPassedStep() { final List testResult = runWithinTestContext(() -> { final AtomicInteger atomicInteger = new AtomicInteger(0); await().with() @@ -69,19 +72,25 @@ void globalSettingsAwaitWoAliasCheckTopLevelPassedStep() { }, AllureAwaitilityListener::setLifecycle ).getTestResults(); - assertAll( - () -> assertEquals( - 1, testResult.get(0).getSteps().size(), - "Exactly 1 top level step for 1 awaitility condition" + + return Stream.of( + dynamicTest("Steps count", () -> + assertThat(testResult.get(0).getSteps()) + .as("Exactly 1 top level step for 1 awaitility condition") + .hasSize(1) ), - () -> assertEquals( - Status.PASSED, testResult.get(0).getSteps().get(0).getStatus(), - "Top level step has passed status" + dynamicTest("Top level step status", () -> + assertEquals( + Status.PASSED, testResult.get(0).getSteps().get(0).getStatus(), + "Top level step has passed status" + ) ), - () -> assertEquals( - "Awaitility: Starting evaluation", - testResult.get(0).getSteps().get(0).getName(), - "Top level step has default name because await() wo alias" + dynamicTest("Top level step name", () -> + assertEquals( + "Awaitility: Starting evaluation", + testResult.get(0).getSteps().get(0).getName(), + "Top level step has default name because await() wo alias" + ) ) ); } @@ -123,7 +132,7 @@ void globalSettingsAwaitWithAliasCheckTopLevelPassedStep() { *
  • 3. All second-level steps should have information about polling intervals and evaluation
  • */ @Test - void globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { + Stream globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { final List testResult = runWithinTestContext(() -> { final AtomicInteger atomicInteger = new AtomicInteger(0); await().with() @@ -133,43 +142,56 @@ void globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() { }, AllureAwaitilityListener::setLifecycle ).getTestResults(); - assertAll( - () -> assertEquals( - 4, testResult.get(0).getSteps().get(0).getSteps().size(), - "Exactly 4 second level steps for 4 polling iterations" + + return Stream.of( + dynamicTest("Second level steps count", () -> + assertEquals( + 4, testResult.get(0).getSteps().get(0).getSteps().size(), + "Exactly 4 second level steps for 4 polling iterations" + ) + ), + dynamicTest("Second level steps all passed", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps()) + .extracting(StepResult::getStatus) + .containsExactlyInAnyOrder( + Status.PASSED, + Status.PASSED, + Status.PASSED, + Status.PASSED + ) ), - () -> assertEquals( - 4, (int) testResult.get(0).getSteps().get(0).getSteps().stream() - .filter(x -> x.getStatus().equals(Status.PASSED)).count(), - "All second level steps has passed statuses" + dynamicTest("Second level step 1 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName()) + .contains("io.qameta.allure.awaitility.GlobalSettingsPositiveTest") + .contains("expected <3> but was <0>") + .contains("elapsed time") + .contains("remaining time") + .contains("last poll interval was") ), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("expected <3> but was <0>") - .contains("elapsed time") - .contains("remaining time") - .contains("last poll interval was"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("expected <3> but was <1>") - .contains("elapsed time") - .contains("remaining time") - .contains("last poll interval was"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(2).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("expected <3> but was <2>") - .contains("elapsed time") - .contains("remaining time") - .contains("last poll interval was"), - () -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(3).getName()) - .contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsPositiveTest") - .contains("that uses java.util.concurrent.atomic.AtomicInteger:") - .contains("reached its end value of <3> after") - .contains("remaining time") - .contains("last poll interval was") + dynamicTest("Second level step 2 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName()) + .contains("io.qameta.allure.awaitility.GlobalSettingsPositiveTest") + .contains("expected <3> but was <1>") + .contains("elapsed time") + .contains("remaining time") + .contains("last poll interval was") + ), + dynamicTest("Second level step 3 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(2).getName()) + .contains("io.qameta.allure.awaitility.GlobalSettingsPositiveTest") + .contains("expected <3> but was <2>") + .contains("elapsed time") + .contains("remaining time") + .contains("last poll interval was") + ), + dynamicTest("Second level step 4 name", () -> + assertThat(testResult.get(0).getSteps().get(0).getSteps().get(3).getName()) + .contains("io.qameta.allure.awaitility.GlobalSettingsPositiveTest") + .contains("java.util.concurrent.atomic.AtomicInteger:") + .contains("reached its end value of <3> after") + .contains("remaining time") + .contains("last poll interval was") + ) ); } From d90113df76d2926da16a36f58a78330608e222fb Mon Sep 17 00:00:00 2001 From: Dmitry Baev Date: Wed, 14 Dec 2022 11:28:18 +0700 Subject: [PATCH 5/5] fix build --- build.gradle.kts | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0b3b74b2b..d5439ce7d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -195,11 +195,13 @@ configure(libs) { jar { manifest { - attributes(mapOf( + attributes( + mapOf( "Specification-Title" to project.name, "Implementation-Title" to project.name, "Implementation-Version" to project.version - )) + ) + ) } } @@ -213,6 +215,20 @@ configure(libs) { } maxHeapSize = project.property("test.maxHeapSize").toString() maxParallelForks = Integer.parseInt(project.property("test.maxParallelForks") as String) + jvmArgs = listOf( + "--add-opens", + "java.base/java.lang=ALL-UNNAMED", + "--add-opens", + "java.base/java.lang.invoke=ALL-UNNAMED", + "--add-opens", + "java.base/java.util=ALL-UNNAMED", + "--add-opens", + "java.base/java.text=ALL-UNNAMED", + "--add-opens", + "java.base/java.lang.reflect=ALL-UNNAMED", + "--add-opens", + "java.desktop/java.awt.font=ALL-UNNAMED" + ) } processTestResources { @@ -288,12 +304,12 @@ configure(libs) { } format("misc") { target( - "*.gradle", - "*.gitignore", - "README.md", - "CONTRIBUTING.md", - "config/**/*.xml", - "src/**/*.xml" + "*.gradle", + "*.gitignore", + "README.md", + "CONTRIBUTING.md", + "config/**/*.xml", + "src/**/*.xml" ) trimTrailingWhitespace() endWithNewline()