MDL-70167 behat: Boolean attributes should either exist or not
authorAndrew Nicols <andrew@nicols.co.uk>
Tue, 23 Jun 2020 03:37:20 +0000 (11:37 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Mon, 23 Nov 2020 03:03:28 +0000 (11:03 +0800)
lib/editor/atto/tests/behat/disablecontrol.feature
lib/editor/textarea/tests/behat/disablecontrol.feature
lib/tests/behat/behat_general.php

index 4e1d16a..893d241 100644 (file)
@@ -19,27 +19,27 @@ Feature: Atto with enable/disable function.
   @javascript
   Scenario: Check disable Atto editor.
     When I set the field "mycontrol" to "Disable"
-    Then the "disabled" attribute of "button.atto_collapse_button" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_title_button" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_bold_button" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_italic_button" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_unorderedlist_button_insertUnorderedList" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_orderedlist_button_insertOrderedList" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_link_button" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_link_button_unlink" "css_element" should contain "disabled"
-    And the "disabled" attribute of "button.atto_image_button" "css_element" should contain "disabled"
+    Then the "disabled" attribute of "button.atto_collapse_button" "css_element" should be set
+    And the "disabled" attribute of "button.atto_title_button" "css_element" should be set
+    And the "disabled" attribute of "button.atto_bold_button" "css_element" should be set
+    And the "disabled" attribute of "button.atto_italic_button" "css_element" should be set
+    And the "disabled" attribute of "button.atto_unorderedlist_button_insertUnorderedList" "css_element" should be set
+    And the "disabled" attribute of "button.atto_orderedlist_button_insertOrderedList" "css_element" should be set
+    And the "disabled" attribute of "button.atto_link_button" "css_element" should be set
+    And the "disabled" attribute of "button.atto_link_button_unlink" "css_element" should be set
+    And the "disabled" attribute of "button.atto_image_button" "css_element" should be set
     And the "contenteditable" attribute of "div#id_myeditoreditable" "css_element" should contain "false"
 
   @javascript
   Scenario: Check enable Atto editor.
     When I set the field "mycontrol" to "Enable"
-    Then "button.atto_collapse_button[disabled]" "css_element" should not exist
-    And "button.atto_title_button[disabled]" "css_element" should not exist
-    And "button.atto_bold_button[disabled]" "css_element" should not exist
-    And "button.atto_italic_button[disabled]" "css_element" should not exist
-    And "button.atto_unorderedlist_button_insertUnorderedList[disabled]" "css_element" should not exist
-    And "button.atto_orderedlist_button_insertOrderedList[disabled]" "css_element" should not exist
-    And "button.atto_link_button[disabled]" "css_element" should not exist
-    And "button.atto_link_button_unlink[disabled]" "css_element" should not exist
-    And "button.atto_image_button[disabled]" "css_element" should not exist
+    Then the "disabled" attribute of "button.atto_collapse_button" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_title_button" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_bold_button" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_italic_button" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_unorderedlist_button_insertUnorderedList" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_orderedlist_button_insertOrderedList" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_link_button" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_link_button_unlink" "css_element" should not be set
+    And the "disabled" attribute of "button.atto_image_button" "css_element" should not be set
     And the "contenteditable" attribute of "div#id_myeditoreditable" "css_element" should contain "true"
index 0d82331..9e48205 100644 (file)
@@ -23,9 +23,9 @@ Feature: Text area with enable/disable function.
   @javascript
   Scenario: Check disable Text area editor.
     When I set the field "mycontrol" to "Disable"
-    Then the "readonly" attribute of "textarea#id_myeditor" "css_element" should contain "readonly"
+    Then the "readonly" attribute of "textarea#id_myeditor" "css_element" should be set
 
   @javascript
   Scenario: Check enable Text area editor.
     When I set the field "mycontrol" to "Enable"
-    Then "textarea#id_myeditor[readonly]" "css_element" should not exist
+    Then the "readonly" attribute of "textarea#id_myeditor" "css_element" should not be set
index dacbabc..852e952 100644 (file)
@@ -1251,6 +1251,39 @@ EOF;
         $this->resize_window($windowsize, $windowviewport === 'viewport');
     }
 
+    /**
+     * Checks whether there the specified attribute is set or not.
+     *
+     * @Then the :attribute attribute of :element :selectortype should be set
+     * @Then the :attribute attribute of :element :selectortype should :not be set
+     *
+     * @throws ExpectationException
+     * @param string $attribute Name of attribute
+     * @param string $element The locator of the specified selector
+     * @param string $selectortype The selector type
+     * @param string $not
+     */
+    public function the_attribute_of_should_be_set($attribute, $element, $selectortype, $not = null) {
+        // Get the container node (exception if it doesn't exist).
+        $containernode = $this->get_selected_node($selectortype, $element);
+        $hasattribute = $containernode->hasAttribute($attribute);
+
+        if ($not && $hasattribute) {
+            $value = $containernode->getAttribute($attribute);
+            // Should not be set but is.
+            throw new ExpectationException(
+                "The attribute \"{$attribute}\" should not be set but has a value of '{$value}'",
+                $this->getSession()
+            );
+        } else if (!$not && !$hasattribute) {
+            // Should be set but is not.
+            throw new ExpectationException(
+                "The attribute \"{$attribute}\" should be set but is not",
+                $this->getSession()
+            );
+        }
+    }
+
     /**
      * Checks whether there is an attribute on the given element that contains the specified text.
      *