From ff7139d6cbe3a430344dcb6eb206fca34adc9680 Mon Sep 17 00:00:00 2001 From: David Monllao Date: Wed, 8 Jan 2014 11:05:08 +0800 Subject: [PATCH] MDL-43461 testing: Avoid switching to .bat files when running MinGW MinGW can not execute .bat files (http://sourceforge.net/p/mingw/bugs/1902) so we should not switch to .bat files when running MinGW. --- lib/behat/classes/behat_command.php | 6 +++++- lib/behat/classes/behat_config_manager.php | 2 +- lib/phpunit/classes/hint_resultprinter.php | 4 +++- lib/testing/lib.php | 24 ++++++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/lib/behat/classes/behat_command.php b/lib/behat/classes/behat_command.php index b70afaaf593..76a4d258699 100644 --- a/lib/behat/classes/behat_command.php +++ b/lib/behat/classes/behat_command.php @@ -82,8 +82,12 @@ class behat_command { // Cygwin uses linux-style directory separators. if ($custombyterm && testing_is_cygwin()) { - $exec = 'behat.bat'; $separator = '/'; + + // MinGW can not execute .bat scripts. + if (!testing_is_mingw()) { + $exec = 'behat.bat'; + } } return 'vendor' . $separator . 'bin' . $separator . $exec; } diff --git a/lib/behat/classes/behat_config_manager.php b/lib/behat/classes/behat_config_manager.php index 5c05312b4b2..7da36b90290 100644 --- a/lib/behat/classes/behat_config_manager.php +++ b/lib/behat/classes/behat_config_manager.php @@ -159,7 +159,7 @@ class behat_config_manager { public static function get_steps_list_config_filepath() { global $USER; - // We don't cygwin-it as it is called using exec(). + // We don't cygwin-it as it is called using exec() which uses cmd.exe. $userdir = behat_command::get_behat_dir() . '/users/' . $USER->id; make_writable_directory($userdir); diff --git a/lib/phpunit/classes/hint_resultprinter.php b/lib/phpunit/classes/hint_resultprinter.php index a04b32628d2..2d5dfe79b6c 100644 --- a/lib/phpunit/classes/hint_resultprinter.php +++ b/lib/phpunit/classes/hint_resultprinter.php @@ -108,7 +108,9 @@ class Hint_ResultPrinter extends PHPUnit_TextUI_ResultPrinter { $executable = 'phpunit'; if (testing_is_cygwin()) { $file = str_replace('\\', '/', $file); - $executable = 'phpunit.bat'; + if (!testing_is_mingw()) { + $executable = 'phpunit.bat'; + } } } diff --git a/lib/testing/lib.php b/lib/testing/lib.php index c67a1a9c207..13c84668880 100644 --- a/lib/testing/lib.php +++ b/lib/testing/lib.php @@ -97,6 +97,30 @@ function testing_is_cygwin() { } } +/** + * Returns whether a mingw CLI is running. + * + * MinGW sets $_SERVER['TERM'] to cygwin, but it + * can not run .bat files; this function may be useful + * when we need to output proposed commands to users + * using Windows CLI interfaces. + * + * @link http://sourceforge.net/p/mingw/bugs/1902 + * @return bool + */ +function testing_is_mingw() { + + if (!testing_is_cygwin()) { + return false; + } + + if (!empty($_SERVER['MSYSTEM'])) { + return true; + } + + return false; +} + /** * Mark empty dataroot to be used for testing. * @param string $dataroot The dataroot directory