All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.testng.internal.invokers.MethodRunner Maven / Gradle / Ivy
package org.testng.internal.invokers;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.collections.CollectionUtils;
import org.testng.collections.Lists;
import org.testng.internal.Parameters;
import org.testng.internal.PoolService;
import org.testng.internal.invokers.ITestInvoker.FailureContext;
import org.testng.internal.invokers.TestMethodArguments.Builder;
import org.testng.xml.XmlSuite;
public class MethodRunner implements IMethodRunner {
@Override
public List runInSequence(
TestMethodArguments arguments,
ITestInvoker testInvoker,
ITestContext context,
AtomicInteger invocationCount,
FailureContext failure,
Iterator allParamValues,
boolean skipFailedInvocationCounts) {
List result = Lists.newArrayList();
int parametersIndex = 0;
Iterable allParameterValues = CollectionUtils.asIterable(allParamValues);
for (Object[] next : allParameterValues) {
if (next == null) {
// skipped value
parametersIndex++;
continue;
}
Object[] parameterValues =
Parameters.injectParameters(
next, arguments.getTestMethod().getConstructorOrMethod().getMethod(), context);
List tmpResults = Lists.newArrayList();
int tmpResultsIndex = -1;
TestMethodArguments tmArguments =
new Builder()
.usingArguments(arguments)
.withParameterValues(parameterValues)
.withParametersIndex(parametersIndex)
.build();
try {
ITestResult tmpResult =
testInvoker.invokeTestMethod(tmArguments, context.getSuite().getXmlSuite(), failure);
tmpResults.add(tmpResult);
tmpResultsIndex++;
} finally {
boolean lastSuccess = false;
if (tmpResultsIndex >= 0) {
lastSuccess = (tmpResults.get(tmpResultsIndex).getStatus() == ITestResult.SUCCESS);
}
if (failure.instances.isEmpty() || lastSuccess) {
result.addAll(tmpResults);
} else {
List retryResults = Lists.newArrayList();
failure = testInvoker.retryFailed(tmArguments, retryResults, failure.count, context);
result.addAll(retryResults);
}
// If we have a failure, skip all the
// other invocationCounts
if (failure.count > 0
&& (skipFailedInvocationCounts
|| tmArguments.getTestMethod().skipFailedInvocations())) {
while (invocationCount.getAndDecrement() > 0) {
ITestResult r =
testInvoker.registerSkippedTestResult(
tmArguments.getTestMethod(), System.currentTimeMillis(), null);
result.add(r);
InvokedMethod invokedMethod = new InvokedMethod(System.currentTimeMillis(), r);
testInvoker.invokeListenersForSkippedTestResult(r, invokedMethod);
}
}
} // end finally
parametersIndex++;
}
return result;
}
@Override
public List runInParallel(
TestMethodArguments arguments,
ITestInvoker testInvoker,
ITestContext context,
AtomicInteger invocationCount,
FailureContext failure,
Iterator allParamValues,
boolean skipFailedInvocationCounts) {
XmlSuite suite = context.getSuite().getXmlSuite();
List result = Lists.newArrayList();
List workers = Lists.newArrayList();
int parametersIndex = 0;
Iterable allParameterValues = CollectionUtils.asIterable(allParamValues);
for (Object[] next : allParameterValues) {
if (next == null) {
// skipped value
parametersIndex += 1;
continue;
}
Object[] parameterValues =
Parameters.injectParameters(
next, arguments.getTestMethod().getConstructorOrMethod().getMethod(), context);
TestMethodWithDataProviderMethodWorker w =
new TestMethodWithDataProviderMethodWorker(
testInvoker,
arguments.getTestMethod(),
parametersIndex,
parameterValues,
arguments.getInstance(),
arguments.getParameters(),
arguments.getTestClass(),
arguments.getBeforeMethods(),
arguments.getAfterMethods(),
arguments.getGroupMethods(),
context,
skipFailedInvocationCounts,
invocationCount.get(),
failure.count,
testInvoker.getNotifier());
workers.add(w);
// testng387: increment the param index in the bag.
parametersIndex += 1;
}
PoolService> ps = new PoolService<>(suite.getDataProviderThreadCount());
List> r = ps.submitTasksAndWait(workers);
for (List l2 : r) {
result.addAll(l2);
}
return result;
}
}