fixtureBaseDir = $fixtureBaseDir; } /** * Handler for 'startTest' event * * @param \PHPUnit_Framework_TestCase $test * @return void */ public function startTest(\PHPUnit_Framework_TestCase $test) { $this->registerComponents($test); } /** * Handler for 'endTest' event * * @param \PHPUnit_Framework_TestCase $test * @return void * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function endTest(\PHPUnit_Framework_TestCase $test) { $this->restoreComponents(); } /** * Register fixture components * * @param \PHPUnit_Framework_TestCase $test */ private function registerComponents(\PHPUnit_Framework_TestCase $test) { $annotations = $test->getAnnotations(); $componentAnnotations = []; if (isset($annotations['class'][self::ANNOTATION_NAME])) { $componentAnnotations = array_merge($componentAnnotations, $annotations['class'][self::ANNOTATION_NAME]); } if (isset($annotations['method'][self::ANNOTATION_NAME])) { $componentAnnotations = array_merge($componentAnnotations, $annotations['method'][self::ANNOTATION_NAME]); } if (empty($componentAnnotations)) { return; } $componentAnnotations = array_unique($componentAnnotations); $reflection = new \ReflectionClass(self::REGISTRAR_CLASS); $paths = $reflection->getProperty(self::PATHS_FIELD); $paths->setAccessible(true); $this->origComponents = $paths->getValue(); $paths->setAccessible(false); foreach ($componentAnnotations as $fixturePath) { $fixturesDir = $this->fixtureBaseDir . '/' . $fixturePath; if (!file_exists($fixturesDir)) { throw new \InvalidArgumentException( self::ANNOTATION_NAME . " fixture '$fixturePath' does not exist" ); } $iterator = new RegexIterator( new RecursiveIteratorIterator( new RecursiveDirectoryIterator($fixturesDir, \FilesystemIterator::SKIP_DOTS) ), '/^.+\/registration\.php$/' ); /** * @var \SplFileInfo $registrationFile */ foreach ($iterator as $registrationFile) { require $registrationFile->getRealPath(); } } } /** * Restore registered components list to the original */ private function restoreComponents() { if (null !== $this->origComponents) { $reflection = new \ReflectionClass(self::REGISTRAR_CLASS); $paths = $reflection->getProperty(self::PATHS_FIELD); $paths->setAccessible(true); $paths->setValue($this->origComponents); $paths->setAccessible(false); $this->origComponents = null; } } }