use of org.gradle.api.internal.tasks.testing.TestClassProcessor in project gradle by gradle.
the class DefaultTestExecuter method execute.
@Override
public void execute(final Test testTask, TestResultProcessor testResultProcessor) {
final TestFramework testFramework = testTask.getTestFramework();
final WorkerTestClassProcessorFactory testInstanceFactory = testFramework.getProcessorFactory();
final BuildOperationWorkerRegistry.Operation currentOperation = buildOperationWorkerRegistry.getCurrent();
final Set<File> classpath = ImmutableSet.copyOf(testTask.getClasspath());
final Factory<TestClassProcessor> forkingProcessorFactory = new Factory<TestClassProcessor>() {
public TestClassProcessor create() {
return new ForkingTestClassProcessor(workerFactory, testInstanceFactory, testTask, classpath, testFramework.getWorkerConfigurationAction(), moduleRegistry, currentOperation);
}
};
Factory<TestClassProcessor> reforkingProcessorFactory = new Factory<TestClassProcessor>() {
public TestClassProcessor create() {
return new RestartEveryNTestClassProcessor(forkingProcessorFactory, testTask.getForkEvery());
}
};
TestClassProcessor processor = new MaxNParallelTestClassProcessor(getMaxParallelForks(testTask), reforkingProcessorFactory, actorFactory);
final FileTree testClassFiles = testTask.getCandidateClassFiles();
Runnable detector;
if (testTask.isScanForTestClasses()) {
TestFrameworkDetector testFrameworkDetector = testTask.getTestFramework().getDetector();
testFrameworkDetector.setTestClassesDirectory(testTask.getTestClassesDir());
testFrameworkDetector.setTestClasspath(classpath);
detector = new DefaultTestClassScanner(testClassFiles, testFrameworkDetector, processor);
} else {
detector = new DefaultTestClassScanner(testClassFiles, null, processor);
}
final Object testTaskOperationId = buildOperationExecutor.getCurrentOperation().getParentId();
new TestMainAction(detector, processor, testResultProcessor, new TrueTimeProvider(), testTaskOperationId, testTask.getPath(), "Gradle Test Run " + testTask.getIdentityPath()).run();
}
use of org.gradle.api.internal.tasks.testing.TestClassProcessor in project gradle by gradle.
the class TestWorker method startReceivingTests.
private void startReceivingTests(WorkerProcessContext workerProcessContext, ServiceRegistry testServices) {
TestClassProcessor targetProcessor = factory.create(testServices);
IdGenerator<Object> idGenerator = testServices.get(IdGenerator.class);
targetProcessor = new WorkerTestClassProcessor(targetProcessor, idGenerator.generateId(), workerProcessContext.getDisplayName(), testServices.get(TimeProvider.class));
ContextClassLoaderProxy<TestClassProcessor> proxy = new ContextClassLoaderProxy<TestClassProcessor>(TestClassProcessor.class, targetProcessor, workerProcessContext.getApplicationClassLoader());
processor = proxy.getSource();
ObjectConnection serverConnection = workerProcessContext.getServerConnection();
serverConnection.useParameterSerializers(TestEventSerializer.create());
this.resultProcessor = serverConnection.addOutgoing(TestResultProcessor.class);
serverConnection.addIncoming(RemoteTestClassProcessor.class, this);
serverConnection.connect();
}
use of org.gradle.api.internal.tasks.testing.TestClassProcessor in project gradle by gradle.
the class MaxNParallelTestClassProcessor method processTestClass.
@Override
public void processTestClass(TestClassRunInfo testClass) {
TestClassProcessor processor;
if (processors.size() < maxProcessors) {
processor = factory.create();
Actor actor = actorFactory.createActor(processor);
processor = actor.getProxy(TestClassProcessor.class);
actors.add(actor);
processors.add(processor);
processor.startProcessing(resultProcessor);
} else {
processor = processors.get(pos);
pos = (pos + 1) % processors.size();
}
processor.processTestClass(testClass);
}
Aggregations