diff --git a/allure-descriptions-javadoc/src/main/java/io/qameta/allure/descriptions/DescriptionsProcessor.java b/allure-descriptions-javadoc/src/main/java/io/qameta/allure/descriptions/DescriptionsProcessor.java index 3e195869a..1ca9f5234 100644 --- a/allure-descriptions-javadoc/src/main/java/io/qameta/allure/descriptions/DescriptionsProcessor.java +++ b/allure-descriptions-javadoc/src/main/java/io/qameta/allure/descriptions/DescriptionsProcessor.java @@ -57,7 +57,7 @@ public boolean process(final Set annotations, final Round .map(param -> param.asType().toString()).collect(Collectors.toList()); final String name = el.getSimpleName().toString(); - final String hash = generateMethodSignatureHash(name, typeParams); + final String hash = generateMethodSignatureHash(el.getEnclosingElement().toString(), name, typeParams); try { final FileObject file = filer.createResource(StandardLocation.CLASS_OUTPUT, "allureDescriptions", hash); diff --git a/allure-descriptions-javadoc/src/test/java/io/qameta/allure/descriptions/test/ProcessDescriptionsTest.java b/allure-descriptions-javadoc/src/test/java/io/qameta/allure/descriptions/test/ProcessDescriptionsTest.java index 715418816..92fedb49b 100644 --- a/allure-descriptions-javadoc/src/test/java/io/qameta/allure/descriptions/test/ProcessDescriptionsTest.java +++ b/allure-descriptions-javadoc/src/test/java/io/qameta/allure/descriptions/test/ProcessDescriptionsTest.java @@ -21,7 +21,7 @@ public class ProcessDescriptionsTest { @Test public void captureDescriptionTest() { - final String expectedMethodSignatureHash = "-tDqkuCipddkDhc3utZvVw=="; + final String expectedMethodSignatureHash = "3bfd90093a92af33104abb88bc989a90"; JavaFileObject source = JavaFileObjects.forSourceLines( "io.qameta.allure.descriptions.test.DescriptionSample", 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 c7d2f297a..ac13df795 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 @@ -201,8 +201,11 @@ public static String getLinkTypePatternPropertyName(final String type) { return String.format("allure.link.%s.pattern", type); } - public static String generateMethodSignatureHash(final String methodName, final List parameterTypes) { + public static String generateMethodSignatureHash(final String className, + final String methodName, + final List parameterTypes) { final MessageDigest md = getMd5Digest(); + md.update(className.getBytes(StandardCharsets.UTF_8)); md.update(methodName.getBytes(StandardCharsets.UTF_8)); parameterTypes.stream() .map(string -> string.getBytes(StandardCharsets.UTF_8)) @@ -263,7 +266,10 @@ public static void processDescription(final ClassLoader classLoader, .map(Class::getTypeName) .collect(Collectors.toList()); - final String signatureHash = generateMethodSignatureHash(name, parameterTypes); + final String signatureHash = generateMethodSignatureHash( + method.getDeclaringClass().getName(), + name, + parameterTypes); readResource(classLoader, ALLURE_DESCRIPTIONS_PACKAGE + signatureHash) .map(desc -> separateLines() ? desc.replace("\n", "
") : desc) 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 c479294e7..92f9b9994 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 @@ -182,6 +182,30 @@ public void descriptionsBefores() { .containsOnly(beforeClassDescription, beforeMethodDescription); } + @Feature("Descriptions") + @Test(description = "Javadoc descriptions of befores with the same names") + public void javadocDescriptionsOfBeforesWithTheSameNames() { + runTestNgSuites("suites/descriptions-test-two-classes.xml"); + List testContainers = results.getTestContainers(); + + checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsTest.setUpMethod", "Before method description"); + checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsTest", "Before class description"); + + checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsAnotherTest.setUpMethod", "Before method description from DescriptionsAnotherTest"); + checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsAnotherTest", "Before class description from DescriptionsAnotherTest"); + } + + @Feature("Descriptions") + @Test(description = "Javadoc descriptions of tests with the same names") + public void javadocDescriptionsOfTestsWithTheSameNames() { + runTestNgSuites("suites/descriptions-test-two-classes.xml"); + List testResults = results.getTestResults(); + + checkTestJavadocDescriptions(testResults, "io.qameta.allure.testng.samples.DescriptionsTest.test", "Sample test description"); + + checkTestJavadocDescriptions(testResults, "io.qameta.allure.testng.samples.DescriptionsAnotherTest.test", "Sample test description from DescriptionsAnotherTest"); + } + @Feature("Failed tests") @Story("Failed") @Test(description = "Test failing by assertion") @@ -980,4 +1004,26 @@ private static void assertBeforeFixtures(String containerName, List containers, String methodReference, String expectedDescriptionHtml) { + assertThat(containers).as("Test containers has not been written") + .isNotEmpty() + .filteredOn(container -> !container.getBefores().isEmpty()) + .filteredOn(container -> container.getName().equals(methodReference)) + .extracting(container -> container.getBefores().get(0).getDescriptionHtml().trim()) + .as("Javadoc descriptions of befores have been processed incorrectly") + .containsOnly(expectedDescriptionHtml); + } + + @Step("Check that javadoc descriptions of tests refer to correct test methods") + private static void checkTestJavadocDescriptions(List results, String methodReference, String expectedDescriptionHtml) { + assertThat(results).as("Test results has not been written") + .isNotEmpty() + .filteredOn(result -> result.getFullName().equals(methodReference)) + .extracting(result -> result.getDescriptionHtml().trim()) + .as("Javadoc descriptions of befores have been processed incorrectly") + .containsOnly(expectedDescriptionHtml); + } + } 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 new file mode 100644 index 000000000..0a79bd472 --- /dev/null +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/DescriptionsAnotherTest.java @@ -0,0 +1,60 @@ +package io.qameta.allure.testng.samples; + +import io.qameta.allure.Description; +import io.qameta.allure.Step; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +/** + * @author Sergey Potanin sspotanin@gmail.com + */ +public class DescriptionsAnotherTest { + + /** + * Before class description from DescriptionsAnotherTest + */ + @BeforeClass + @Description(useJavaDoc = true) + public void setUpClass() { + + } + + /** + * Before method description from DescriptionsAnotherTest + */ + @BeforeMethod + @Description(useJavaDoc = true) + public void setUpMethod() { + + } + + /** + * Sample test description from DescriptionsAnotherTest + */ + @Description(useJavaDoc = true) + @Test + public void test() { + step(); + } + + /** + * Sample test description from DescriptionsAnotherTest + * - next line + * - another line + */ + @Description(useJavaDoc = true) + @Test + public void testSeparated() { + step(); + } + + /** + * Sample step description from DescriptionsAnotherTest + */ + @Description(useJavaDoc = true) + @Step("Step one") + private void step() { + } + +} diff --git a/allure-testng/src/test/resources/suites/descriptions-test-two-classes.xml b/allure-testng/src/test/resources/suites/descriptions-test-two-classes.xml new file mode 100644 index 000000000..a4ff104f6 --- /dev/null +++ b/allure-testng/src/test/resources/suites/descriptions-test-two-classes.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file