1
package org.testng.internal;
3
import org.testng.ITestClass;
4
import org.testng.ITestContext;
5
import org.testng.ITestNGMethod;
6
import org.testng.ITestResult;
7
import org.testng.xml.XmlSuite;
9
import java.util.ArrayList;
10
import java.util.List;
12
import java.util.concurrent.Callable;
14
public class TestMethodWithDataProviderMethodWorker implements Callable<List<ITestResult>> {
16
private ITestNGMethod m_testMethod;
17
private Object[] m_parameterValues;
18
private Object[] m_instances;
19
private XmlSuite m_xmlSuite;
20
private Map<String, String> m_parameters;
21
private ITestClass m_testClass;
22
private ITestNGMethod[] m_beforeMethods;
23
private ITestNGMethod[] m_afterMethods;
24
private ConfigurationGroupMethods m_groupMethods;
25
private Invoker m_invoker;
26
private ExpectedExceptionsHolder m_expectedExceptionHolder;
27
private ITestContext m_testContext;
28
private int m_parameterIndex;
29
private boolean m_skipFailedInvocationCounts;
30
private int m_invocationCount;
31
private ITestResultNotifier m_notifier;
33
private List<ITestResult> m_testResults = new ArrayList<ITestResult>();
34
private int m_failureCount;
36
public TestMethodWithDataProviderMethodWorker(Invoker invoker, ITestNGMethod testMethod,
38
Object[] parameterValues, Object[] instances, XmlSuite suite,
39
Map<String, String> parameters, ITestClass testClass,
40
ITestNGMethod[] beforeMethods, ITestNGMethod[] afterMethods,
41
ConfigurationGroupMethods groupMethods, ExpectedExceptionsHolder expectedExceptionHolder,
42
ITestContext testContext, boolean skipFailedInvocationCounts,
43
int invocationCount, int failureCount, ITestResultNotifier notifier) {
45
m_testMethod = testMethod;
46
m_parameterIndex = parameterIndex;
47
m_parameterValues = parameterValues;
48
m_instances = instances;
50
m_parameters = parameters;
51
m_testClass = testClass;
52
m_beforeMethods = beforeMethods;
53
m_afterMethods = afterMethods;
54
m_groupMethods = groupMethods;
55
m_expectedExceptionHolder = expectedExceptionHolder;
56
m_skipFailedInvocationCounts = skipFailedInvocationCounts;
57
m_testContext = testContext;
58
m_invocationCount = invocationCount;
59
m_failureCount = failureCount;
60
m_notifier = notifier;
63
public long getMaxTimeOut() {
67
public List<ITestResult> call() {
68
List<ITestResult> tmpResults = new ArrayList<ITestResult>();
69
long start = System.currentTimeMillis();
72
tmpResults.addAll(m_invoker.invokeTestMethod(m_instances,
83
List<Object> failedInstances = new ArrayList<Object>();
85
m_failureCount = m_invoker.handleInvocationResults(m_testMethod, tmpResults,
86
failedInstances, m_failureCount, m_expectedExceptionHolder, true,
87
false /* don't collect results */);
88
if (failedInstances.isEmpty()) {
89
m_testResults.addAll(tmpResults);
91
for (int i = 0; i < failedInstances.size(); i++) {
92
List<ITestResult> retryResults = new ArrayList<ITestResult>();
95
m_invoker.retryFailed(failedInstances.toArray(),
96
i, m_testMethod, m_xmlSuite, m_testClass, m_beforeMethods,
97
m_afterMethods, m_groupMethods, retryResults,
98
m_failureCount, m_expectedExceptionHolder,
99
m_testContext, m_parameters, m_parameterIndex);
100
m_testResults.addAll(retryResults);
105
// If we have a failure, skip all the
106
// other invocationCounts
109
// If not specified globally, use the attribute
112
if (! m_skipFailedInvocationCounts) {
113
m_skipFailedInvocationCounts = m_testMethod.skipFailedInvocations();
115
if (m_failureCount > 0 && m_skipFailedInvocationCounts) {
116
while (m_invocationCount-- > 0) {
118
new TestResult(m_testMethod.getTestClass(),
123
System.currentTimeMillis());
124
r.setStatus(TestResult.SKIP);
125
m_testResults.add(r);
126
m_invoker.runTestListeners(r);
127
m_notifier.addSkippedTest(m_testMethod, r);
133
return m_testResults;
136
public List<ITestResult> getTestResults() {
137
return m_testResults;
140
public int getInvocationCount() {
141
return m_invocationCount;
144
public int getFailureCount() {
145
return m_failureCount;