MDL-42627 behat: New steps definitions class for deprecated steps
authorDavid Monllao <davidm@moodle.com>
Tue, 29 Oct 2013 09:16:32 +0000 (17:16 +0800)
committerDavid Monllao <davidm@moodle.com>
Mon, 2 Dec 2013 06:13:17 +0000 (14:13 +0800)
config-dist.php
lib/behat/classes/behat_config_manager.php
lib/tests/behat/behat_deprecated.php [new file with mode: 0644]

index 08a50a0..5cdf663 100644 (file)
@@ -661,6 +661,11 @@ $CFG->admin = 'admin';
 // Example:
 //   $CFG->behat_extraallowedsettings = array('logsql', 'dblogerror');
 //
+// You should explicitly allow the usage of the deprecated behat steps, otherwise an exception will
+// be thrown when using them. The setting is disabled by default.
+// Example:
+//   $CFG->behat_usedeprecated = true;
+//
 //=========================================================================
 // 12. DEVELOPER DATA GENERATOR
 //=========================================================================
index 11fbf4d..c4f8a4b 100644 (file)
@@ -93,6 +93,11 @@ class behat_config_manager {
             }
         }
 
+        // 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 Moodle test wwwroot.
         $contents = self::get_config_file_contents($features, $stepsdefinitions);
diff --git a/lib/tests/behat/behat_deprecated.php b/lib/tests/behat/behat_deprecated.php
new file mode 100644 (file)
index 0000000..bc84e9e
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Steps definitions that will be deprecated in the next releases.
+ *
+ * @package    core
+ * @category   test
+ * @copyright  2013 David MonllaĆ³
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php.
+
+require_once(__DIR__ . '/../../../lib/behat/behat_base.php');
+
+/**
+ * Deprecated behat step definitions.
+ *
+ * @package    core
+ * @category   test
+ * @copyright  2013 David MonllaĆ³
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class behat_deprecated extends behat_base {
+
+    /**
+     * Throws an exception if $CFG->behat_usedeprecated is not allowed.
+     *
+     * @throws Exception
+     * @param string|array $alternatives Alternative/s to the requested step
+     * @return void
+     */
+    protected function deprecated_message($alternatives) {
+        global $CFG;
+
+        // We do nothing if it is enabled.
+        if (!empty($CFG->behat_usedeprecated)) {
+            return;
+        }
+
+        if (is_scalar($alternatives)) {
+            $alternatives = array($alternatives);
+        }
+
+        $message = 'Deprecated step, rather than using this step you can:';
+        foreach ($alternatives as $alternative) {
+            $message .= PHP_EOL . '- ' . $alternative;
+        }
+        $message .= PHP_EOL . '- Set $CFG->behat_usedeprecated in config.php to allow the use of deprecated steps if you don\'t have any other option';
+        throw new Exception($message);
+    }
+
+}