private function buildTestSuite($suiteConfig, TestName $parent = null) { if (is_string($suiteConfig)) { return $this->linkConfiguration($suiteConfig, $parent); } $suiteGenerators = ['file' => function ($file) use($parent) { return new FileTestSuite($this->getTestSuiteFactory(), $this->getFilter(), $this->fullPath(), $file, $parent); }, 'class' => function ($class) use($parent) { return $this->getTestSuiteFactory()->getTestSuite($class, $this->getFilter(), $parent); }, 'name' => function ($name) use($parent, $suiteConfig) { $suite = new GenericTestSuite($name, $parent); foreach ($this->getIn($suiteConfig, 'suites', []) as $child) { $suite->add($this->buildTestSuite($child, $suite->getName())); } return $suite; }]; foreach ($suiteGenerators as $key => $generate) { if (array_key_exists($key, $suiteConfig)) { return $generate($suiteConfig[$key]); } } throw new \Exception('Invalid suite configuration'); }