Merge branch 'MDL-43461_master' of git://github.com/dmonllao/moodle
authorDamyon Wiese <damyon@moodle.com>
Wed, 15 Jan 2014 01:39:03 +0000 (09:39 +0800)
committerDamyon Wiese <damyon@moodle.com>
Wed, 15 Jan 2014 01:39:03 +0000 (09:39 +0800)
admin/tool/behat/cli/util.php
lib/behat/classes/behat_command.php
lib/behat/classes/behat_config_manager.php
lib/phpunit/classes/hint_resultprinter.php
lib/testing/lib.php

index 790406f..d843bf2 100644 (file)
@@ -127,8 +127,8 @@ if ($options['install']) {
     mtrace("Acceptance tests site dropped");
 } else if ($options['enable']) {
     behat_util::start_test_mode();
-    $runtestscommand = behat_command::get_behat_command() . ' --config '
-        . $CFG->behat_dataroot . DIRECTORY_SEPARATOR . 'behat' . DIRECTORY_SEPARATOR . 'behat.yml';
+    $runtestscommand = behat_command::get_behat_command(true) .
+        ' --config ' . behat_config_manager::get_behat_cli_config_filepath();
     mtrace("Acceptance tests environment enabled on $CFG->behat_wwwroot, to run the tests use:\n " . $runtestscommand);
 } else if ($options['disable']) {
     behat_util::stop_test_mode();
index 619dcd6..76a4d25 100644 (file)
@@ -66,10 +66,30 @@ class behat_command {
 
     /**
      * Returns the executable path
+     *
+     * Allows returning a customized command for cygwin when the
+     * command is just displayed, when using exec(), system() and
+     * friends we stay with DIRECTORY_SEPARATOR as they use the
+     * normal cmd.exe (in Windows).
+     *
+     * @param  bool $custombyterm  If the provided command should depend on the terminal where it runs
      * @return string
      */
-    public final static function get_behat_command() {
-        return 'vendor' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'behat';
+    public final static function get_behat_command($custombyterm = false) {
+
+        $separator = DIRECTORY_SEPARATOR;
+        $exec = 'behat';
+
+        // Cygwin uses linux-style directory separators.
+        if ($custombyterm && testing_is_cygwin()) {
+            $separator = '/';
+
+            // MinGW can not execute .bat scripts.
+            if (!testing_is_mingw()) {
+                $exec = 'behat.bat';
+            }
+        }
+        return 'vendor' . $separator . 'bin' . $separator . $exec;
     }
 
     /**
index a967cad..7da36b9 100644 (file)
@@ -154,21 +154,36 @@ class behat_config_manager {
     /**
      * Returns the behat config file path used by the steps definition list
      *
-     * Note this can only be called from web-based scripts so it will return the
-     * production dataroot not behat_dataroot. With this the steps definitions
-     * list is accessible without having to install the behat test site.
-     *
      * @return string
      */
     public static function get_steps_list_config_filepath() {
         global $USER;
 
+        // 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);
 
         return $userdir . '/behat.yml';
     }
 
+    /**
+     * Returns the behat config file path used by the behat cli command.
+     *
+     * @return string
+     */
+    public static function get_behat_cli_config_filepath() {
+        global $CFG;
+
+        $command = $CFG->behat_dataroot . DIRECTORY_SEPARATOR . 'behat' . DIRECTORY_SEPARATOR . 'behat.yml';
+
+        // Cygwin uses linux-style directory separators.
+        if (testing_is_cygwin()) {
+            $command = str_replace('\\', '/', $command);
+        }
+
+        return $command;
+    }
+
     /**
      * Behat config file specifing the main context class,
      * the required Behat extensions and Moodle test wwwroot.
index a04b326..2d5dfe7 100644 (file)
@@ -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';
+                }
             }
         }
 
index c67a1a9..13c8466 100644 (file)
@@ -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