public function compile() { foreach (PluginRepository::findAll() as $plugin) { $containerBuilder = new UnfreezableContainerBuilder(); $containerBuilder->registerExtension(new GeneralExtension()); $extensionClass = new \ReflectionClass('Stagehand\\TestRunner\\DependencyInjection\\Extension\\' . $plugin->getPluginID() . 'Extension'); if (!$extensionClass->isInterface() && !$extensionClass->isAbstract() && $extensionClass->isSubclassOf('Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface')) { $containerBuilder->registerExtension($extensionClass->newInstance()); } foreach ($containerBuilder->getExtensions() as $extension) { /* @var $extension \Symfony\Component\DependencyInjection\Extension\ExtensionInterface */ $containerBuilder->loadFromExtension($extension->getAlias(), array()); } $containerBuilder->addCompilerPass(new ReplaceDefinitionByPluginDefinitionPass($plugin)); $containerBuilder->getCompilerPassConfig()->setOptimizationPasses(array_filter($containerBuilder->getCompilerPassConfig()->getOptimizationPasses(), function (CompilerPassInterface $compilerPass) { return !$compilerPass instanceof ResolveParameterPlaceHoldersPass; })); ErrorReporting::invokeWith(error_reporting() & ~E_USER_DEPRECATED, function () use($containerBuilder) { $containerBuilder->compile(); }); $phpDumper = new PhpDumper($containerBuilder); $containerClass = $plugin->getPluginID() . 'Container'; $containerClassSource = $phpDumper->dump(array('class' => $containerClass)); $containerClassSource = preg_replace('/^<\\?php/', '<?php' . PHP_EOL . 'namespace ' . self::COMPILED_CONTAINER_NAMESPACE . ';' . PHP_EOL, $containerClassSource); file_put_contents(__DIR__ . '/../' . $containerClass . '.php', $containerClassSource); } }
public static function earlyInitialize() { $classLoader = new UniversalClassLoader(); $classLoader->registerNamespace('Stagehand\\TestRunner', array(__DIR__ . '/../../..', __DIR__ . '/../../../../examples')); $classLoader->registerPrefix('Stagehand_TestRunner_', __DIR__ . '/../../../../examples'); $classLoader->register(); self::$applicationContext = new TestApplicationContext(); self::$applicationContext->setComponentFactory(new TestComponentFactory()); self::$applicationContext->setEnvironment(new self()); self::$applicationContext->setPlugin(PluginRepository::findByPluginID(PHPUnitPlugin::getPluginID())); ApplicationContext::setInstance(self::$applicationContext); $container = new Container(); $transformation = new Transformation($container); $transformation->transformToContainerParameters(); ApplicationContext::getInstance()->getComponentFactory()->setContainer($container); }
/** * @return array * @throws \Stagehand\TestRunner\DependencyInjection\Extension\FrameworkUnavailableException */ public static function findAll() { $plugins = PluginRepository::findAll(); if (count($plugins) == 0) { throw new FrameworkUnavailableException('Stagehand_TestRunner is unavailable since no plugins are found in this installation.'); } $extensions = array(new GeneralExtension()); foreach ($plugins as $plugin) { /* @var $plugin \Stagehand\TestRunner\Core\Plugin\IPlugin */ $extensionClass = new \ReflectionClass(__NAMESPACE__ . '\\' . $plugin->getPluginID() . 'Extension'); if (!$extensionClass->isInterface() && !$extensionClass->isAbstract() && $extensionClass->isSubclassOf('Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface')) { $extensions[] = $extensionClass->newInstance(); } } return $extensions; }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!class_exists(Compiler::COMPILED_CONTAINER_NAMESPACE . '\\PHPUnitContainer')) { $output->writeln('<error>Please run the following command before running the ' . $this->getName() . ' command:</error>' . PHP_EOL . PHP_EOL . ' <info>testrunner compile</info>'); return 1; } $container = $this->createContainer(); ApplicationContext::getInstance()->getComponentFactory()->setContainer($container); ApplicationContext::getInstance()->setComponent('environment', ApplicationContext::getInstance()->getEnvironment()); ApplicationContext::getInstance()->setComponent('input', $input); ApplicationContext::getInstance()->setComponent('output', $output); ApplicationContext::getInstance()->setComponent('plugin', PluginRepository::findByPluginID(PHPUnitPlugin::getPluginID())); ApplicationContext::getInstance()->createComponent('preparer')->prepare(); $collector = ApplicationContext::getInstance()->createComponent('collector'); $collector->setRecursive(true); define('PHPUnit_MAIN_METHOD', __METHOD__); $command = new \Stagehand\TestRunner\CLI\TestRunnerApplication\Command\PHPUnitPassthroughCommand\Command($collector, ApplicationContext::getInstance()->createComponent('test_target_repository')); if ($input->getOption('phpunit-help')) { return $command->run(array_merge($this->removeTestRunnerArguments($_SERVER['argv'], array('--phpunit-help')), array('--help')), false); } return $command->run($this->removeTestRunnerArguments($_SERVER['argv']), false); }
public function compile() { foreach (PluginRepository::findAll() as $plugin) { $containerBuilder = new UnfreezableContainerBuilder(); $containerBuilder->registerExtension(new GeneralExtension()); $extensionClass = new \ReflectionClass('Stagehand\\TestRunner\\DependencyInjection\\Extension\\' . $plugin->getPluginID() . 'Extension'); if (!$extensionClass->isInterface() && !$extensionClass->isAbstract() && $extensionClass->isSubclassOf('Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface')) { $containerBuilder->registerExtension($extensionClass->newInstance()); } foreach ($containerBuilder->getExtensions() as $extension) { /* @var $extension \Symfony\Component\DependencyInjection\Extension\ExtensionInterface */ $containerBuilder->loadFromExtension($extension->getAlias(), array()); } $containerBuilder->addCompilerPass(new ReplaceDefinitionByPluginDefinitionPass($plugin)); $containerBuilder->getCompilerPassConfig()->setOptimizationPasses(array_filter($containerBuilder->getCompilerPassConfig()->getOptimizationPasses(), function (CompilerPassInterface $compilerPass) { return !$compilerPass instanceof ResolveParameterPlaceHoldersPass; })); $containerClass = $plugin->getPluginID() . 'Container'; $compiler = new \Stagehand\ComponentFactory\Compiler($containerBuilder, $containerClass, self::COMPILED_CONTAINER_NAMESPACE); $containerSource = $compiler->compile(); file_put_contents(__DIR__ . '/../' . $containerClass . '.php', $containerSource); } }
protected function getPlugin() { return PluginRepository::findByPluginID(CakePHPPlugin::getPluginID()); }
protected function getPlugin() { return PluginRepository::findByPluginID(SimpleTestPlugin::getPluginID()); }
public function transformToContainerParameters() { if (!is_null($this->configurationFile)) { foreach (Yaml::parse($this->configurationFile) as $configurationID => $configurationPart) { if (!is_null($configurationPart)) { if (!array_key_exists($configurationID, $this->configuration)) { $this->configuration[$configurationID] = array(); } array_unshift($this->configuration[$configurationID], $configurationPart); } } } foreach ($this->configuration as $configurationID => $configurationParts) { $configurations = array(); foreach ($configurationParts as $configurationPart) { $configurations[] = $configurationPart; } if ($configurationID == GeneralConfiguration::getConfigurationID()) { $transformerID = 'General'; } else { $plugin = PluginRepository::findByPluginID($configurationID); $transformerID = $plugin->getPluginID(); } $transformerClass = __NAMESPACE__ . '\\' . $transformerID . 'Transformer'; $transformer = new $transformerClass($configurations, $this->container); /* @var $transformer \Stagehand\TestRunner\DependencyInjection\Transformation\Transformer */ $transformer->transform(); } if (is_null($this->container->getParameter('test_file_pattern'))) { $this->container->setParameter('test_file_pattern', ApplicationContext::getInstance()->getPlugin()->getTestFilePattern()); } }
/** * @return \Stagehand\TestRunner\Core\Plugin\Plugin */ protected function getPlugin() { return PluginRepository::findByPluginID($this->getPluginID()); }