diff --git a/admin/tool/behat/locallib.php b/admin/tool/behat/locallib.php index 33a5fd8c503..2d3b2f246ab 100644 --- a/admin/tool/behat/locallib.php +++ b/admin/tool/behat/locallib.php @@ -50,7 +50,7 @@ class tool_behat { // We don't require the test environment to be enabled to list the steps definitions // so test writers can more easily set up the environment. - behat_command::check_behat_setup(); + behat_command::behat_setup_problem(); // The loaded steps depends on the component specified. behat_config_manager::update_config_file($component, false); diff --git a/lib/behat/classes/behat_command.php b/lib/behat/classes/behat_command.php index 8bdb123c34c..c0a5b05c0a8 100644 --- a/lib/behat/classes/behat_command.php +++ b/lib/behat/classes/behat_command.php @@ -101,9 +101,9 @@ class behat_command { * the behat help command to ensure it works as expected * * @param bool $checkphp Extra check for the PHP version - * @return void + * @return int Error code or 0 if all ok */ - public static function check_behat_setup($checkphp = false) { + public static function behat_setup_problem($checkphp = false) { global $CFG; // We don't check the PHP version if $CFG->behat_switchcompletely has been enabled. @@ -123,20 +123,27 @@ class behat_command { $docslink = html_writer::tag('a', $docslink, array('href' => $docslink, 'target' => '_blank')); } $msg .= '. ' . get_string('moreinfoin', 'tool_behat', $docslink); - notice($msg); + + self::output_msg($msg); + return BEHAT_EXITCODE_COMPOSER; } // Behat test command. list($output, $code) = self::run(' --help'); if ($code != 0) { - notice(get_string('wrongbehatsetup', 'tool_behat')); + // Returning composer error code to avoid conflicts with behat and moodle error codes. + self::output_msg(get_string('wrongbehatsetup', 'tool_behat')); + return BEHAT_EXITCODE_COMPOSER; } - // Checking behat dataroot existence otherwise notice about admin/tool/behat/cli/util.php. + // Checking behat dataroot existence otherwise echo about admin/tool/behat/cli/util.php. if (empty($CFG->behat_dataroot) || !is_dir($CFG->behat_dataroot) || !is_writable($CFG->behat_dataroot)) { - notice(get_string('runclitool', 'tool_behat', 'php admin/tool/behat/cli/util.php')); + self::output_msg(get_string('runclitool', 'tool_behat', 'php admin/tool/behat/cli/util.php')); + return BEHAT_EXITCODE_CONFIG; } + + return 0; } /** @@ -150,4 +157,22 @@ class behat_command { return true; } + /** + * Outputs a message. + * + * Used in CLI + web UI methods. Stops the + * execution in web. + * + * @param string $msg + * @return void + */ + protected static function output_msg($msg) { + + if (!CLI_SCRIPT) { + notice($msg); + } else { + echo $msg; + } + } + } diff --git a/lib/behat/classes/util.php b/lib/behat/classes/util.php index 5fe4aa3ff38..33495c2bb44 100644 --- a/lib/behat/classes/util.php +++ b/lib/behat/classes/util.php @@ -176,7 +176,9 @@ class behat_util extends testing_util { } // Checks the behat set up and the PHP version. - behat_command::check_behat_setup(true); + if ($errorcode = behat_command::behat_setup_problem(true)) { + exit($code); + } // Check that test environment is correctly set up. self::test_environment_problem(); @@ -196,6 +198,26 @@ class behat_util extends testing_util { } } + /** + * Returns the status of the behat test environment + * + * @return int Error code + */ + public static function get_behat_status() { + + if (!defined('BEHAT_UTIL')) { + throw new coding_exception('This method can be only used by Behat CLI tool'); + } + + // Checks the behat set up and the PHP version, returning an error code if something went wrong. + if ($errorcode = behat_command::behat_setup_problem(true)) { + return $code; + } + + // Check that test environment is correctly set up, stops execution. + self::test_environment_problem(); + } + /** * Disables test mode * @throws coding_exception diff --git a/lib/behat/lib.php b/lib/behat/lib.php index dda2deb40b3..b1a747a31f3 100644 --- a/lib/behat/lib.php +++ b/lib/behat/lib.php @@ -32,6 +32,7 @@ define('BEHAT_EXITCODE_REQUIREMENT', 251); define('BEHAT_EXITCODE_PERMISSIONS', 252); define('BEHAT_EXITCODE_REINSTALL', 253); define('BEHAT_EXITCODE_INSTALL', 254); +define('BEHAT_EXITCODE_COMPOSER', 255); /** * Exits with an error code