Skip to content

Commit c3f918d

Browse files
sspotaninArtem Eroshenko
authored andcommitted
fixed javadoc description processing for methods with the same names (via allure-framework#233)
1 parent 4e5d20d commit c3f918d

File tree

6 files changed

+130
-4
lines changed

6 files changed

+130
-4
lines changed

allure-descriptions-javadoc/src/main/java/io/qameta/allure/descriptions/DescriptionsProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public boolean process(final Set<? extends TypeElement> annotations, final Round
5757
.map(param -> param.asType().toString()).collect(Collectors.toList());
5858
final String name = el.getSimpleName().toString();
5959

60-
final String hash = generateMethodSignatureHash(name, typeParams);
60+
final String hash = generateMethodSignatureHash(el.getEnclosingElement().toString(), name, typeParams);
6161
try {
6262
final FileObject file = filer.createResource(StandardLocation.CLASS_OUTPUT,
6363
"allureDescriptions", hash);

allure-descriptions-javadoc/src/test/java/io/qameta/allure/descriptions/test/ProcessDescriptionsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class ProcessDescriptionsTest {
2121

2222
@Test
2323
public void captureDescriptionTest() {
24-
final String expectedMethodSignatureHash = "-tDqkuCipddkDhc3utZvVw==";
24+
final String expectedMethodSignatureHash = "3bfd90093a92af33104abb88bc989a90";
2525

2626
JavaFileObject source = JavaFileObjects.forSourceLines(
2727
"io.qameta.allure.descriptions.test.DescriptionSample",

allure-java-commons/src/main/java/io/qameta/allure/util/ResultsUtils.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,11 @@ public static String getLinkTypePatternPropertyName(final String type) {
201201
return String.format("allure.link.%s.pattern", type);
202202
}
203203

204-
public static String generateMethodSignatureHash(final String methodName, final List<String> parameterTypes) {
204+
public static String generateMethodSignatureHash(final String className,
205+
final String methodName,
206+
final List<String> parameterTypes) {
205207
final MessageDigest md = getMd5Digest();
208+
md.update(className.getBytes(StandardCharsets.UTF_8));
206209
md.update(methodName.getBytes(StandardCharsets.UTF_8));
207210
parameterTypes.stream()
208211
.map(string -> string.getBytes(StandardCharsets.UTF_8))
@@ -263,7 +266,10 @@ public static void processDescription(final ClassLoader classLoader,
263266
.map(Class::getTypeName)
264267
.collect(Collectors.toList());
265268

266-
final String signatureHash = generateMethodSignatureHash(name, parameterTypes);
269+
final String signatureHash = generateMethodSignatureHash(
270+
method.getDeclaringClass().getName(),
271+
name,
272+
parameterTypes);
267273

268274
readResource(classLoader, ALLURE_DESCRIPTIONS_PACKAGE + signatureHash)
269275
.map(desc -> separateLines() ? desc.replace("\n", "<br />") : desc)

allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,30 @@ public void descriptionsBefores() {
182182
.containsOnly(beforeClassDescription, beforeMethodDescription);
183183
}
184184

185+
@Feature("Descriptions")
186+
@Test(description = "Javadoc descriptions of befores with the same names")
187+
public void javadocDescriptionsOfBeforesWithTheSameNames() {
188+
runTestNgSuites("suites/descriptions-test-two-classes.xml");
189+
List<TestResultContainer> testContainers = results.getTestContainers();
190+
191+
checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsTest.setUpMethod", "Before method description");
192+
checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsTest", "Before class description");
193+
194+
checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsAnotherTest.setUpMethod", "Before method description from DescriptionsAnotherTest");
195+
checkBeforeJavadocDescriptions(testContainers, "io.qameta.allure.testng.samples.DescriptionsAnotherTest", "Before class description from DescriptionsAnotherTest");
196+
}
197+
198+
@Feature("Descriptions")
199+
@Test(description = "Javadoc descriptions of tests with the same names")
200+
public void javadocDescriptionsOfTestsWithTheSameNames() {
201+
runTestNgSuites("suites/descriptions-test-two-classes.xml");
202+
List<TestResult> testResults = results.getTestResults();
203+
204+
checkTestJavadocDescriptions(testResults, "io.qameta.allure.testng.samples.DescriptionsTest.test", "Sample test description");
205+
206+
checkTestJavadocDescriptions(testResults, "io.qameta.allure.testng.samples.DescriptionsAnotherTest.test", "Sample test description from DescriptionsAnotherTest");
207+
}
208+
185209
@Feature("Failed tests")
186210
@Story("Failed")
187211
@Test(description = "Test failing by assertion")
@@ -980,4 +1004,26 @@ private static void assertBeforeFixtures(String containerName, List<TestResultCo
9801004
.flatExtracting(FixtureResult::getName)
9811005
.containsExactly(befores);
9821006
}
1007+
1008+
@Step("Check that before fixtures javadoc descriptions refer to correct fixture methods")
1009+
private static void checkBeforeJavadocDescriptions(List<TestResultContainer> containers, String methodReference, String expectedDescriptionHtml) {
1010+
assertThat(containers).as("Test containers has not been written")
1011+
.isNotEmpty()
1012+
.filteredOn(container -> !container.getBefores().isEmpty())
1013+
.filteredOn(container -> container.getName().equals(methodReference))
1014+
.extracting(container -> container.getBefores().get(0).getDescriptionHtml().trim())
1015+
.as("Javadoc descriptions of befores have been processed incorrectly")
1016+
.containsOnly(expectedDescriptionHtml);
1017+
}
1018+
1019+
@Step("Check that javadoc descriptions of tests refer to correct test methods")
1020+
private static void checkTestJavadocDescriptions(List<TestResult> results, String methodReference, String expectedDescriptionHtml) {
1021+
assertThat(results).as("Test results has not been written")
1022+
.isNotEmpty()
1023+
.filteredOn(result -> result.getFullName().equals(methodReference))
1024+
.extracting(result -> result.getDescriptionHtml().trim())
1025+
.as("Javadoc descriptions of befores have been processed incorrectly")
1026+
.containsOnly(expectedDescriptionHtml);
1027+
}
1028+
9831029
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package io.qameta.allure.testng.samples;
2+
3+
import io.qameta.allure.Description;
4+
import io.qameta.allure.Step;
5+
import org.testng.annotations.BeforeClass;
6+
import org.testng.annotations.BeforeMethod;
7+
import org.testng.annotations.Test;
8+
9+
/**
10+
* @author Sergey Potanin [email protected]
11+
*/
12+
public class DescriptionsAnotherTest {
13+
14+
/**
15+
* Before class description from DescriptionsAnotherTest
16+
*/
17+
@BeforeClass
18+
@Description(useJavaDoc = true)
19+
public void setUpClass() {
20+
21+
}
22+
23+
/**
24+
* Before method description from DescriptionsAnotherTest
25+
*/
26+
@BeforeMethod
27+
@Description(useJavaDoc = true)
28+
public void setUpMethod() {
29+
30+
}
31+
32+
/**
33+
* Sample test description from DescriptionsAnotherTest
34+
*/
35+
@Description(useJavaDoc = true)
36+
@Test
37+
public void test() {
38+
step();
39+
}
40+
41+
/**
42+
* Sample test description from DescriptionsAnotherTest
43+
* - next line
44+
* - another line
45+
*/
46+
@Description(useJavaDoc = true)
47+
@Test
48+
public void testSeparated() {
49+
step();
50+
}
51+
52+
/**
53+
* Sample step description from DescriptionsAnotherTest
54+
*/
55+
@Description(useJavaDoc = true)
56+
@Step("Step one")
57+
private void step() {
58+
}
59+
60+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
3+
4+
<suite name="Descriptions suite">
5+
<test name="Descriptions test">
6+
<classes>
7+
<class name="io.qameta.allure.testng.samples.DescriptionsTest"/>
8+
<class name="io.qameta.allure.testng.samples.DescriptionsAnotherTest"/>
9+
</classes>
10+
</test>
11+
<listeners>
12+
<listener class-name="io.qameta.allure.testng.AllureTestNg"/>
13+
</listeners>
14+
</suite>

0 commit comments

Comments
 (0)