public function __construct($settings = []) { $this->settings = Configuration::mergeConfigs(self::$defaultSettings, $settings); if (!class_exists('Behat\\Gherkin\\Keywords\\ArrayKeywords')) { throw new TestParseException('Feature file can only be parsed with Behat\\Gherkin library. Please install `behat/gherkin` with Composer'); } $keywords = new GherkinKeywords(['en' => static::$defaultKeywords]); $lexer = new GherkinLexer($keywords); $this->parser = new GherkinParser($lexer); $this->fetchGherkinSteps(); }
public function __construct($settings = []) { $this->settings = Configuration::mergeConfigs(self::$defaultSettings, $settings); if (!class_exists('Behat\\Gherkin\\Keywords\\ArrayKeywords')) { throw new TestParseException('Feature file can only be parsed with Behat\\Gherkin library. Please install `behat/gherkin` with Composer'); } $gherkin = new \ReflectionClass('Behat\\Gherkin\\Gherkin'); $gherkinClassPath = dirname($gherkin->getFileName()); $i18n = (require $gherkinClassPath . '/../../../i18n.php'); $keywords = new GherkinKeywords($i18n); $lexer = new GherkinLexer($keywords); $this->parser = new GherkinParser($lexer); $this->fetchGherkinSteps(); }
public function run($suite, $test = null) { ini_set('memory_limit', isset($this->config['settings']['memory_limit']) ? $this->config['settings']['memory_limit'] : '1024M'); $settings = Configuration::suiteSettings($suite, Configuration::config()); $selectedEnvironments = $this->options['env']; $environments = Configuration::suiteEnvironments($suite); if (!$selectedEnvironments or empty($environments)) { $this->runSuite($settings, $suite, $test); return; } foreach (array_unique($selectedEnvironments) as $envList) { $envArray = explode(',', $envList); $config = []; foreach ($envArray as $env) { if (isset($environments[$env])) { $currentEnvironment = isset($config['current_environment']) ? [$config['current_environment']] : []; $config = Configuration::mergeConfigs($config, $environments[$env]); $currentEnvironment[] = $config['current_environment']; $config['current_environment'] = implode(',', $currentEnvironment); } } if (empty($config)) { continue; } $suiteToRun = $suite; if (!empty($envList)) { $suiteToRun .= ' (' . implode(', ', $envArray) . ')'; } $this->runSuite($config, $suiteToRun, $test); } }
/** * Merges configuration file given in environmental variable * * @param array|null $config configuration * * @return void */ protected function mergeEnvConfig(&$config) { if (!is_array($config)) { $config = array(); } $envConfig = getenv(self::ENV_CONFIG); if ($envConfig !== false && $envConfig !== null) { $parser = new Parser(); $localConfig = $parser->parse(file_get_contents($envConfig)); $config = Configuration::mergeConfigs($config, $localConfig); } }
protected function getModuleConfig($module) { // get config for all modules $config = isset($this->config['modules']['config'][$module]) ? $this->config['modules']['config'][$module] : []; if (!isset($this->config['modules']['enabled'])) { return $config; } if (!is_array($this->config['modules']['enabled'])) { return $config; } // get config for enabled modules foreach ($this->config['modules']['enabled'] as $enabledModuleConfig) { if (!is_array($enabledModuleConfig)) { continue; } $enabledModuleName = key($enabledModuleConfig); if ($enabledModuleName !== $module) { continue; } $config = Configuration::mergeConfigs(reset($enabledModuleConfig), $config); } return $config; }
/** * Get the configuration for a module. * * A module with name $moduleName can be configured at two paths in a configuration file: * - modules.config.$moduleName * - modules.enabled.$moduleName * * This method checks both locations for configuration. If there is configuration at both locations * this method merges them, where the configuration at modules.enabled.$moduleName takes precedence * over modules.config.$moduleName if the same parameters are configured at both locations. * * @param string $moduleName * @return array */ private function getModuleConfig($moduleName) { $config = isset($this->config['modules']['config'][$moduleName]) ? $this->config['modules']['config'][$moduleName] : []; if (!isset($this->config['modules']['enabled'])) { return $config; } if (!is_array($this->config['modules']['enabled'])) { return $config; } foreach ($this->config['modules']['enabled'] as $enabledModuleConfig) { if (!is_array($enabledModuleConfig)) { continue; } $enabledModuleName = key($enabledModuleConfig); if ($enabledModuleName === $moduleName) { return Configuration::mergeConfigs(reset($enabledModuleConfig), $config); } } return $config; }