private function runVariant(ExecutorInterface $executor, RunnerContext $context, SubjectMetadata $subjectMetadata, Variant $variant)
{
$executorConfig = $this->executorRegistry->getConfig($context->getExecutor());
$this->logger->variantStart($variant);
$rejectCount = [];
try {
foreach ($variant->getIterations() as $iteration) {
$rejectCount[spl_object_hash($iteration)] = 0;
$this->runIteration($executor, $executorConfig, $iteration, $subjectMetadata);
}
} catch (\Exception $e) {
$variant->setException($e);
$this->logger->variantEnd($variant);
if ($context->getStopOnError()) {
throw new StopOnErrorException();
}
return;
}
$variant->computeStats();
$this->logger->variantEnd($variant);
while ($variant->getRejectCount() > 0) {
$this->logger->retryStart($variant->getRejectCount());
$this->logger->variantStart($variant);
foreach ($variant->getRejects() as $reject) {
$rejectCount[spl_object_hash($reject)]++;
$this->runIteration($executor, $executorConfig, $reject, $subjectMetadata);
}
$variant->computeStats();
$this->logger->variantEnd($variant);
$reject->setResult(new RejectionCountResult($rejectCount[spl_object_hash($reject)]));
}
}