| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- <?php
- namespace Codeception;
- use Codeception\Configuration as Config;
- use Codeception\Event\SuiteEvent;
- use Codeception\Exception\ModuleRequireException;
- use Codeception\Lib\Console\Output;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
- /**
- * A base class for all Codeception Extensions and GroupObjects
- *
- * Available Properties:
- *
- * * config: current extension configuration
- * * options: passed running options
- *
- */
- abstract class Extension implements EventSubscriberInterface
- {
- protected $config = [];
- protected $options;
- protected $output;
- protected $globalConfig;
- private $modules = [];
- public function __construct($config, $options)
- {
- $this->config = array_merge($this->config, $config);
- $this->options = $options;
- $this->output = new Output($options);
- $this->_initialize();
- }
- public static function getSubscribedEvents()
- {
- if (!isset(static::$events)) {
- return [Events::SUITE_INIT => 'receiveModuleContainer'];
- }
- if (isset(static::$events[Events::SUITE_INIT])) {
- if (!is_array(static::$events[Events::SUITE_INIT])) {
- static::$events[Events::SUITE_INIT] = [[static::$events[Events::SUITE_INIT]]];
- }
- static::$events[Events::SUITE_INIT][] = ['receiveModuleContainer'];
- } else {
- static::$events[Events::SUITE_INIT] = 'receiveModuleContainer';
- }
- return static::$events;
- }
- public function receiveModuleContainer(SuiteEvent $e)
- {
- $this->modules = $e->getSuite()->getModules();
- }
- /**
- * Pass config variables that should be injected into global config.
- *
- * @param array $config
- */
- public function _reconfigure($config = [])
- {
- if (is_array($config)) {
- Config::append($config);
- }
- }
- /**
- * You can do all preparations here. No need to override constructor.
- * Also you can skip calling `_reconfigure` if you don't need to.
- */
- public function _initialize()
- {
- $this->_reconfigure(); // hook for BC only.
- }
- protected function write($message)
- {
- if (!$this->options['silent']) {
- $this->output->write($message);
- }
- }
- protected function writeln($message)
- {
- if (!$this->options['silent']) {
- $this->output->writeln($message);
- }
- }
- public function hasModule($name)
- {
- return isset($this->modules[$name]);
- }
- public function getCurrentModuleNames()
- {
- return array_keys($this->modules);
- }
- public function getModule($name)
- {
- if (!$this->hasModule($name)) {
- throw new ModuleRequireException($name, "module is not enabled");
- }
- return $this->modules[$name];
- }
- public function getTestsDir()
- {
- return Config::testsDir();
- }
- public function getLogDir()
- {
- return Config::outputDir();
- }
- public function getDataDir()
- {
- return Config::dataDir();
- }
- public function getRootDir()
- {
- return Config::projectDir();
- }
- public function getGlobalConfig()
- {
- return Config::config();
- }
- }
|