/** * Updates a config file * * The tests runner and the steps definitions list uses different * config files to avoid problems with concurrent executions. * * The steps definitions list can be filtered by plugin so it's * behat.yml is different from the $CFG->docroot one. * * @param string $plugin Restricts the obtained steps definitions to the specified plugin * @param string $testsrunner If the config file will be used to run tests * @return void */ public static function update_config_file($plugin = '', $testsrunner = true) { global $CFG; // Behat must have a separate behat.yml to have access to the whole set of features and steps definitions. if ($testsrunner === true) { $configfilepath = BehatCommand::get_behat_dir() . '/behat.yml'; } else { // Alternative for steps definitions filtering, one for each user. $configfilepath = self::get_steps_list_config_filepath(); } // Get core features $features = array(dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/test/behat/features'); // Gets all the plugins with features. $plugins = TestsFinder::get_plugins_with_tests('features'); if ($plugins) { foreach ($plugins as $pluginname => $path) { $path = self::clean_path($path) . self::get_behat_tests_path(); if (empty($featurespaths[$path]) && file_exists($path)) { // Standarizes separator (some dirs. comes with OS-dependant separator). $uniquekey = str_replace('\\', '/', $path); $featurespaths[$uniquekey] = $path; } } $features = array_merge($features, array_values($featurespaths)); } // Optionally include features from additional directories. if (!empty($CFG->behat_additionalfeatures)) { $features = array_merge($features, array_map("realpath", $CFG->behat_additionalfeatures)); } $stepsdefinitions = array(); // Find step definitions from core. They must be in the folder $MAHARA_ROOT/test/behat/stepdefinitions // The file name must be /^Behat[A-z0-9_]+\.php$/ $regite = new RegexIterator(new DirectoryIterator(get_mahararoot_dir() . '/test/behat/stepdefinitions'), '|^Behat[A-z0-9_\\-]+\\.php$|'); foreach ($regite as $file) { $key = $file->getBasename('.php'); $stepsdefinitions[$key] = $file->getPathname(); } // Gets all the plugins with steps definitions. $steps = self::get_plugins_steps_definitions(); if ($steps) { foreach ($steps as $key => $filepath) { if ($plugin === '' || $plugin === $key) { $stepsdefinitions[$key] = $filepath; } } } // We don't want the deprecated steps definitions here. if (!$testsrunner) { unset($stepsdefinitions['behat_deprecated']); } // Behat config file specifing the main context class, // the required Behat extensions and Mahara test wwwroot. $contents = self::get_config_file_contents($features, $stepsdefinitions); // Stores the file. if (!file_put_contents($configfilepath, $contents)) { behat_error(BEHAT_EXITCODE_PERMISSIONS, 'File ' . $configfilepath . ' can not be created'); } }
/** * Returns the path to behat YML config file * @return string */ public static function get_behat_config_path() { return BehatCommand::get_behat_dir() . '/behat.yml'; }