diff --git a/allure-assertj/src/main/java/io/qameta/allure/assertj/AssertJValueRenderer.java b/allure-assertj/src/main/java/io/qameta/allure/assertj/AssertJValueRenderer.java index 3e33ae78..49f9ba6a 100644 --- a/allure-assertj/src/main/java/io/qameta/allure/assertj/AssertJValueRenderer.java +++ b/allure-assertj/src/main/java/io/qameta/allure/assertj/AssertJValueRenderer.java @@ -529,6 +529,9 @@ private boolean isSimple(final Object value) { } private boolean isLambda(final Object value) { + if (value == null) { + return false; + } final Class type = value.getClass(); return type.isSynthetic() || type.getName().contains("$$Lambda$"); } 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 6013efb8..377e7a6b 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 @@ -172,6 +172,56 @@ void shouldRenderTuplesAsValues() { .isEmpty(); } + @AllureFeatures.Steps + @Test + void shouldRenderNullValuesInContainsExactlyInAnyOrder() { + final AllureResults results = runWithinTestContext(() -> { + assertThat(Arrays.asList(null, "a", "b")) + .containsExactlyInAnyOrder(null, "a", "b"); + }, AllureAspectJ::setLifecycle); + + final TestResult result = assertOnlyOneResult(results); + assertThat(result.getSteps()) + .extracting(StepResult::getName) + .containsExactly("assert [null, \"a\", \"b\"]"); + assertThat(result.getSteps()) + .flatExtracting(StepResult::getSteps) + .extracting(StepResult::getName) + .containsExactly("contains exactly in any order [null, \"a\", \"b\"]"); + assertThat(result.getSteps()) + .flatExtracting(StepResult::getSteps) + .flatExtracting(StepResult::getParameters) + .isEmpty(); + } + + @AllureFeatures.Steps + @Test + void shouldRenderNullValuesAfterExtractingAndKeepLambdaVarargs() { + final TestResult model = new TestResult(); + + final AllureResults results = runWithinTestContext(() -> { + assertThat(model) + .extracting(TestResult::getDescription, TestResult::getDescriptionHtml) + .containsExactly(null, null); + }, AllureAspectJ::setLifecycle); + + final TestResult result = assertOnlyOneResult(results); + assertThat(result.getSteps()) + .extracting(StepResult::getName) + .containsExactly("assert TestResult"); + assertThat(result.getSteps()) + .flatExtracting(StepResult::getSteps) + .extracting(StepResult::getName) + .containsExactly( + "extracts [, ] -> [null, null]", + "contains exactly [null, null]" + ); + assertThat(result.getSteps()) + .flatExtracting(StepResult::getSteps) + .flatExtracting(StepResult::getParameters) + .isEmpty(); + } + @AllureFeatures.Steps @Test void shouldRenderFieldOrPropertyValueAssertions() {