File: //usr/local/wp/vendor/behat/behat/src/Behat/Testwork/ApplicationFactory.php
<?php
/*
* This file is part of the Behat Testwork.
* (c) Konstantin Kudryashov <ever.zet@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Behat\Testwork;
use Behat\Testwork\Cli\Application;
use Behat\Testwork\ServiceContainer\Configuration\ConfigurationLoader;
use Behat\Testwork\ServiceContainer\Extension;
use Behat\Testwork\ServiceContainer\ExtensionManager;
/**
* Defines the way application is created.
*
* Extend and implement this class to create an entry point for your framework.
*
* @author Konstantin Kudryashov <ever.zet@gmail.com>
*/
abstract class ApplicationFactory
{
/**
* Returns application name.
*
* @return string
*/
abstract protected function getName();
/**
* Returns current application version.
*
* @return string
*/
abstract protected function getVersion();
/**
* Returns list of extensions enabled by default.
*
* @return Extension[]
*/
abstract protected function getDefaultExtensions();
/**
* Returns the name of configuration environment variable.
*
* @return string
*/
abstract protected function getEnvironmentVariableName();
/**
* Returns user config path.
*
* @return null|string
*/
abstract protected function getConfigPath();
/**
* Creates application instance.
*
* @return Application
*/
public function createApplication()
{
$configurationLoader = $this->createConfigurationLoader();
$extensionManager = $this->createExtensionManager();
return new Application($this->getName(), $this->getVersion(), $configurationLoader, $extensionManager);
}
/**
* Creates configuration loader.
*
* @return ConfigurationLoader
*/
protected function createConfigurationLoader()
{
return new ConfigurationLoader($this->getEnvironmentVariableName(), $this->getConfigPath());
}
/**
* Creates extension manager.
*
* @return ExtensionManager
*/
protected function createExtensionManager()
{
return new ExtensionManager($this->getDefaultExtensions());
}
}