Skip to content

Commit 451ac05

Browse files
committed
externalize test creation, allows exposing the current test globally
1 parent af4b440 commit 451ac05

File tree

3 files changed

+167
-161
lines changed

3 files changed

+167
-161
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.aventstack.extentreports.service;
2+
3+
import java.util.Arrays;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
import java.util.Optional;
7+
8+
import org.testng.ITestResult;
9+
10+
import com.aventstack.extentreports.ExtentTest;
11+
import com.aventstack.extentreports.model.Test;
12+
import com.aventstack.extentreports.testng.listener.commons.ExtentTestCommons;
13+
14+
public class ExtentTestManager {
15+
16+
private static Map<String, ExtentTest> classTestMap = new HashMap<>();
17+
private static ThreadLocal<ExtentTest> methodTest = new ThreadLocal<>();
18+
private static ThreadLocal<ExtentTest> dataProviderTest = new ThreadLocal<>();
19+
20+
public static synchronized ExtentTest getTest() {
21+
return methodTest.get();
22+
}
23+
24+
public static synchronized ExtentTest getTest(ITestResult result) {
25+
ExtentTest t = result.getParameters() != null && result.getParameters().length > 0 ? dataProviderTest.get()
26+
: methodTest.get();
27+
return t;
28+
}
29+
30+
public static synchronized ExtentTest createMethod(ITestResult result, Boolean createAsChild) {
31+
if (!createAsChild)
32+
return createMethod(result);
33+
34+
String className = result.getInstance().getClass().getSimpleName();
35+
String methodName = result.getMethod().getMethodName();
36+
ExtentTest classTest;
37+
38+
if (classTestMap.containsKey(className)) {
39+
classTest = classTestMap.get(className);
40+
} else {
41+
classTest = ExtentService.getInstance().createTest(className);
42+
classTestMap.put(className, classTest);
43+
}
44+
45+
Optional<Test> test = classTest.getModel().getNodeContext().getAll().stream()
46+
.filter(x -> x.getName().equals(methodName)).findFirst();
47+
48+
if (result.getParameters().length > 0) {
49+
if (!test.isPresent()) {
50+
createTest(result, classTest);
51+
}
52+
String paramName = Arrays.asList(result.getParameters()).toString();
53+
ExtentTest paramTest = methodTest.get().createNode(paramName);
54+
dataProviderTest.set(paramTest);
55+
} else {
56+
dataProviderTest.set(null);
57+
createTest(result, classTest);
58+
}
59+
60+
return methodTest.get();
61+
}
62+
63+
public static synchronized ExtentTest createMethod(ITestResult result) {
64+
String methodName = result.getMethod().getMethodName();
65+
if (result.getParameters().length > 0) {
66+
if (methodTest.get() != null && methodTest.get().getModel().getName().equals(methodName)) {
67+
} else {
68+
createTest(result, null);
69+
}
70+
String paramName = Arrays.asList(result.getParameters()).toString();
71+
ExtentTest paramTest = methodTest.get().createNode(paramName);
72+
dataProviderTest.set(paramTest);
73+
} else {
74+
createTest(result, null);
75+
}
76+
return methodTest.get();
77+
}
78+
79+
private static synchronized ExtentTest createTest(ITestResult result, ExtentTest classTest) {
80+
String methodName = result.getMethod().getMethodName();
81+
ExtentTest test;
82+
if (classTest != null) {
83+
test = classTest.createNode(methodName, result.getMethod().getDescription());
84+
} else {
85+
test = ExtentService.getInstance().createTest(methodName, result.getMethod().getDescription());
86+
}
87+
methodTest.set(test);
88+
String[] groups = result.getMethod().getGroups();
89+
ExtentTestCommons.assignGroups(test, groups);
90+
return test;
91+
}
92+
93+
}
Lines changed: 37 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,47 @@
11
package com.aventstack.extentreports.testng.listener;
22

3-
import java.util.Arrays;
4-
53
import org.testng.ITestContext;
64
import org.testng.ITestListener;
75
import org.testng.ITestResult;
86

97
import com.aventstack.extentreports.AnalysisStrategy;
10-
import com.aventstack.extentreports.ExtentTest;
118
import com.aventstack.extentreports.service.ExtentService;
12-
import com.aventstack.extentreports.testng.listener.commons.ExtentTestCommons;
13-
14-
public class ExtentITestListenerAdapter
15-
implements ITestListener {
16-
17-
private static ThreadLocal<ExtentTest> methodTest = new ThreadLocal<ExtentTest>();
18-
private static ThreadLocal<ExtentTest> dataProviderTest = new ThreadLocal<>();
19-
20-
@Override
21-
public synchronized void onStart(ITestContext context) {
22-
ExtentService.getInstance().setAnalysisStrategy(AnalysisStrategy.TEST);
23-
}
24-
25-
@Override
26-
public synchronized void onFinish(ITestContext context) {
27-
ExtentService.getInstance().flush();
28-
}
29-
30-
@Override
31-
public synchronized void onTestStart(ITestResult result) {
32-
String methodName = result.getMethod().getMethodName();
33-
if (result.getParameters().length>0) {
34-
if (methodTest.get() != null && methodTest.get().getModel().getName().equals(methodName)) { }
35-
else {
36-
createTest(result);
37-
}
38-
String paramName = Arrays.asList(result.getParameters()).toString();
39-
ExtentTest paramTest = methodTest.get().createNode(paramName);
40-
dataProviderTest.set(paramTest);
41-
} else {
42-
createTest(result);
43-
}
44-
}
45-
46-
private void createTest(ITestResult result) {
47-
String methodName = result.getMethod().getMethodName();
48-
ExtentTest test = ExtentService.getInstance().createTest(methodName, result.getMethod().getDescription());
49-
methodTest.set(test);
50-
51-
String[] groups = result.getMethod().getGroups();
52-
ExtentTestCommons.assignGroups(test, groups);
53-
}
54-
55-
@Override
56-
public synchronized void onTestSuccess(ITestResult result) {
57-
getTest(result).pass("Test passed");
58-
}
59-
60-
private ExtentTest getTest(ITestResult result) {
61-
ExtentTest t = result.getParameters() != null && result.getParameters().length>0
62-
? dataProviderTest.get()
63-
: methodTest.get();
64-
return t;
65-
}
66-
67-
@Override
68-
public synchronized void onTestFailure(ITestResult result) {
69-
getTest(result).fail(result.getThrowable());
70-
}
71-
72-
@Override
73-
public synchronized void onTestSkipped(ITestResult result) {
74-
getTest(result).skip(result.getThrowable());
75-
}
76-
77-
@Override
78-
public synchronized void onTestFailedButWithinSuccessPercentage(ITestResult result) { }
9+
import com.aventstack.extentreports.service.ExtentTestManager;
10+
11+
public class ExtentITestListenerAdapter implements ITestListener {
12+
13+
@Override
14+
public synchronized void onStart(ITestContext context) {
15+
ExtentService.getInstance().setAnalysisStrategy(AnalysisStrategy.TEST);
16+
}
17+
18+
@Override
19+
public synchronized void onFinish(ITestContext context) {
20+
ExtentService.getInstance().flush();
21+
}
22+
23+
@Override
24+
public synchronized void onTestStart(ITestResult result) {
25+
ExtentTestManager.createMethod(result);
26+
}
27+
28+
@Override
29+
public synchronized void onTestSuccess(ITestResult result) {
30+
ExtentTestManager.getTest(result).pass("Test passed");
31+
}
32+
33+
@Override
34+
public synchronized void onTestFailure(ITestResult result) {
35+
ExtentTestManager.getTest(result).fail(result.getThrowable());
36+
}
37+
38+
@Override
39+
public synchronized void onTestSkipped(ITestResult result) {
40+
ExtentTestManager.getTest(result).skip(result.getThrowable());
41+
}
42+
43+
@Override
44+
public synchronized void onTestFailedButWithinSuccessPercentage(ITestResult result) {
45+
}
7946

8047
}
Lines changed: 37 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,47 @@
11
package com.aventstack.extentreports.testng.listener;
22

3-
import java.util.Arrays;
4-
import java.util.HashMap;
5-
import java.util.Map;
6-
import java.util.Optional;
7-
83
import org.testng.ITestContext;
94
import org.testng.ITestListener;
105
import org.testng.ITestResult;
116

127
import com.aventstack.extentreports.AnalysisStrategy;
13-
import com.aventstack.extentreports.ExtentTest;
14-
import com.aventstack.extentreports.model.Test;
158
import com.aventstack.extentreports.service.ExtentService;
16-
import com.aventstack.extentreports.testng.listener.commons.ExtentTestCommons;
17-
18-
public class ExtentITestListenerClassAdapter
19-
implements ITestListener {
20-
21-
private static Map<String, ExtentTest> classTestMap = new HashMap<>();
22-
private static ThreadLocal<ExtentTest> methodTest = new ThreadLocal<>();
23-
private static ThreadLocal<ExtentTest> dataProviderTest = new ThreadLocal<>();
24-
25-
@Override
26-
public synchronized void onStart(ITestContext context) {
27-
ExtentService.getInstance().setAnalysisStrategy(AnalysisStrategy.CLASS);
28-
}
29-
30-
@Override
31-
public synchronized void onFinish(ITestContext context) {
32-
ExtentService.getInstance().flush();
33-
}
34-
35-
@Override
36-
public synchronized void onTestStart(ITestResult result) {
37-
String className = result.getInstance().getClass().getSimpleName();
38-
String methodName = result.getMethod().getMethodName();
39-
ExtentTest classTest;
40-
41-
if (classTestMap.containsKey(className)) {
42-
classTest = classTestMap.get(className);
43-
} else {
44-
classTest = ExtentService.getInstance().createTest(className);
45-
classTestMap.put(className, classTest);
46-
}
47-
48-
Optional<Test> test = classTest.getModel()
49-
.getNodeContext().getAll()
50-
.stream()
51-
.filter(x -> x.getName().equals(methodName))
52-
.findFirst();
53-
54-
if (result.getParameters().length>0) {
55-
if (!test.isPresent()) {
56-
createNode(classTest, result);
57-
}
58-
String paramName = Arrays.asList(result.getParameters()).toString();
59-
ExtentTest paramTest = methodTest.get().createNode(paramName);
60-
dataProviderTest.set(paramTest);
61-
} else {
62-
dataProviderTest.set(null);
63-
createNode(classTest, result);
64-
}
65-
}
66-
67-
private void createNode(ExtentTest classTest, ITestResult result) {
68-
String methodName = result.getMethod().getMethodName();
69-
ExtentTest child = classTest.createNode(methodName, result.getMethod().getDescription());
70-
methodTest.set(child);
71-
72-
String[] groups = result.getMethod().getGroups();
73-
ExtentTestCommons.assignGroups(child, groups);
74-
}
75-
76-
@Override
77-
public synchronized void onTestSuccess(ITestResult result) {
78-
getTest(result).pass("Test passed");
79-
}
80-
81-
private ExtentTest getTest(ITestResult result) {
82-
ExtentTest t = result.getParameters() != null && result.getParameters().length>0
83-
? dataProviderTest.get()
84-
: methodTest.get();
85-
return t;
86-
}
87-
88-
@Override
89-
public synchronized void onTestFailure(ITestResult result) {
90-
getTest(result).fail(result.getThrowable());
91-
}
92-
93-
@Override
94-
public synchronized void onTestSkipped(ITestResult result) {
95-
getTest(result).skip(result.getThrowable());
96-
}
97-
98-
@Override
99-
public synchronized void onTestFailedButWithinSuccessPercentage(ITestResult result) { }
9+
import com.aventstack.extentreports.service.ExtentTestManager;
10+
11+
public class ExtentITestListenerClassAdapter implements ITestListener {
12+
13+
@Override
14+
public synchronized void onStart(ITestContext context) {
15+
ExtentService.getInstance().setAnalysisStrategy(AnalysisStrategy.CLASS);
16+
}
17+
18+
@Override
19+
public synchronized void onFinish(ITestContext context) {
20+
ExtentService.getInstance().flush();
21+
}
22+
23+
@Override
24+
public synchronized void onTestStart(ITestResult result) {
25+
ExtentTestManager.createMethod(result, true);
26+
}
27+
28+
@Override
29+
public synchronized void onTestSuccess(ITestResult result) {
30+
ExtentTestManager.getTest(result).pass("Test passed");
31+
}
32+
33+
@Override
34+
public synchronized void onTestFailure(ITestResult result) {
35+
ExtentTestManager.getTest(result).fail(result.getThrowable());
36+
}
37+
38+
@Override
39+
public synchronized void onTestSkipped(ITestResult result) {
40+
ExtentTestManager.getTest(result).skip(result.getThrowable());
41+
}
42+
43+
@Override
44+
public synchronized void onTestFailedButWithinSuccessPercentage(ITestResult result) {
45+
}
10046

10147
}

0 commit comments

Comments
 (0)