+++ /dev/null
-<?php
-
-namespace Drupal\DrupalExtension\Context;
-
-use Behat\Behat\Context\TranslatableContext;
-use Behat\Gherkin\Node\TableNode;
-
-/**
- * Provides step-definitions for interacting with Drupal messages.
- */
-class MessageContext extends RawDrupalContext implements TranslatableContext {
-
- /**
- * {@inheritDoc}
- */
- public static function getTranslationResources() {
- return glob(__DIR__ . '/../../../../i18n/*.xliff');
- }
-
- /**
- * Checks if the current page contains the given error message
- *
- * @param $message
- * string The text to be checked
- *
- * @Then I should see the error message( containing) :message
- */
- public function assertErrorVisible($message) {
- $this->_assert(
- $message,
- 'error_message_selector',
- "The page '%s' does not contain any error messages",
- "The page '%s' does not contain the error message '%s'"
- );
- }
-
- /**
- * Checks if the current page contains the given set of error messages
- *
- * @param $messages
- * array An array of texts to be checked
- *
- * @Then I should see the following error message(s):
- */
- public function assertMultipleErrors(TableNode $messages) {
- foreach ($messages->getHash() as $key => $value) {
- $message = trim($value['error messages']);
- $this->assertErrorVisible($message);
- }
- }
-
- /**
- * Checks if the current page does not contain the given error message
- *
- * @param $message
- * string The text to be checked
- *
- * @Given I should not see the error message( containing) :message
- */
- public function assertNotErrorVisible($message) {
- $this->_assertNot(
- $message,
- 'error_message_selector',
- "The page '%s' contains the error message '%s'"
- );
- }
-
- /**
- * Checks if the current page does not contain the given set error messages
- *
- * @param $messages
- * array An array of texts to be checked
- *
- * @Then I should not see the following error messages:
- */
- public function assertNotMultipleErrors(TableNode $messages) {
- foreach ($messages->getHash() as $key => $value) {
- $message = trim($value['error messages']);
- $this->assertNotErrorVisible($message);
- }
- }
-
- /**
- * Checks if the current page contains the given success message
- *
- * @param $message
- * string The text to be checked
- *
- * @Then I should see the success message( containing) :message
- */
- public function assertSuccessMessage($message) {
- $this->_assert(
- $message,
- 'success_message_selector',
- "The page '%s' does not contain any success messages",
- "The page '%s' does not contain the success message '%s'"
- );
- }
-
- /**
- * Checks if the current page contains the given set of success messages
- *
- * @param $message
- * array An array of texts to be checked
- *
- * @Then I should see the following success messages:
- */
- public function assertMultipleSuccessMessage(TableNode $messages) {
- foreach ($messages->getHash() as $key => $value) {
- $message = trim($value['success messages']);
- $this->assertSuccessMessage($message);
- }
- }
-
- /**
- * Checks if the current page does not contain the given set of success message
- *
- * @param $message
- * string The text to be checked
- *
- * @Given I should not see the success message( containing) :message
- */
- public function assertNotSuccessMessage($message) {
- $this->_assertNot(
- $message,
- 'success_message_selector',
- "The page '%s' contains the success message '%s'"
- );
- }
-
- /**
- * Checks if the current page does not contain the given set of success messages
- *
- * @param $message
- * array An array of texts to be checked
- *
- * @Then I should not see the following success messages:
- */
- public function assertNotMultipleSuccessMessage(TableNode $messages) {
- foreach ($messages->getHash() as $key => $value) {
- $message = trim($value['success messages']);
- $this->assertNotSuccessMessage($message);
- }
- }
-
- /**
- * Checks if the current page contains the given warning message
- *
- * @param $message
- * string The text to be checked
- *
- * @Then I should see the warning message( containing) :message
- */
- public function assertWarningMessage($message) {
- $this->_assert(
- $message,
- 'warning_message_selector',
- "The page '%s' does not contain any warning messages",
- "The page '%s' does not contain the warning message '%s'"
- );
- }
-
- /**
- * Checks if the current page contains the given set of warning messages
- *
- * @param $message
- * array An array of texts to be checked
- *
- * @Then I should see the following warning messages:
- */
- public function assertMultipleWarningMessage(TableNode $messages) {
- foreach ($messages->getHash() as $key => $value) {
- $message = trim($value['warning messages']);
- $this->assertWarningMessage($message);
- }
- }
-
- /**
- * Checks if the current page does not contain the given set of warning message
- *
- * @param $message
- * string The text to be checked
- *
- * @Given I should not see the warning message( containing) :message
- */
- public function assertNotWarningMessage($message) {
- $this->_assertNot(
- $message,
- 'warning_message_selector',
- "The page '%s' contains the warning message '%s'"
- );
- }
-
- /**
- * Checks if the current page does not contain the given set of warning messages
- *
- * @param $message
- * array An array of texts to be checked
- *
- * @Then I should not see the following warning messages:
- */
- public function assertNotMultipleWarningMessage(TableNode $messages) {
- foreach ($messages->getHash() as $key => $value) {
- $message = trim($value['warning messages']);
- $this->assertNotWarningMessage($message);
- }
- }
-
- /**
- * Checks if the current page contain the given message
- *
- * @param $message
- * string The message to be checked
- *
- * @Then I should see the message( containing) :message
- */
- public function assertMessage($message) {
- $this->_assert(
- $message,
- 'message_selector',
- "The page '%s' does not contain any messages",
- "The page '%s' does not contain the message '%s'"
- );
- }
-
- /**
- * Checks if the current page does not contain the given message
- *
- * @param $message
- * string The message to be checked
- *
- * @Then I should not see the message( containing) :message
- */
- public function assertNotMessage($message) {
- $this->_assertNot(
- $message,
- 'message_selector',
- "The page '%s' contains the message '%s'"
- );
- }
-
- /**
- * Internal callback to check for a specific message in a given context.
- *
- * @param $message
- * string The message to be checked
- * @param $selectorId
- * string CSS selector name
- * @param $exceptionMsgNone
- * string The message being thrown when no message is contained, string
- * should contain one '%s' as a placeholder for the current URL
- * @param $exceptionMsgMissing
- * string The message being thrown when the message is not contained, string
- * should contain two '%s' as placeholders for the current URL and the message.
- * @throws \Exception
- */
- private function _assert($message, $selectorId, $exceptionMsgNone, $exceptionMsgMissing) {
- $selector = $this->getDrupalSelector($selectorId);
- $selectorObjects = $this->getSession()->getPage()->findAll("css", $selector);
- if (empty($selectorObjects)) {
- throw new \Exception(sprintf($exceptionMsgNone, $this->getSession()->getCurrentUrl()));
- }
- foreach ($selectorObjects as $selectorObject) {
- if (strpos(trim($selectorObject->getText()), $message) !== FALSE) {
- return;
- }
- }
- throw new \Exception(sprintf($exceptionMsgMissing, $this->getSession()->getCurrentUrl(), $message));
- }
-
- /**
- * Internal callback to check if the current page does not contain the given message
- *
- * @param $message
- * string The message to be checked
- * @param $selectorId
- * string CSS selector name
- * @param $exceptionMsg
- * string The message being thrown when the message is contained, string
- * should contain two '%s' as placeholders for the current URL and the message.
- * @throws \Exception
- */
- private function _assertNot($message, $selectorId, $exceptionMsg) {
- $selector = $this->getDrupalSelector($selectorId);
- $selectorObjects = $this->getSession()->getPage()->findAll("css", $selector);
- if (!empty($selectorObjects)) {
- foreach ($selectorObjects as $selectorObject) {
- if (strpos(trim($selectorObject->getText()), $message) !== FALSE) {
- throw new \Exception(sprintf($exceptionMsg, $this->getSession()->getCurrentUrl(), $message));
- }
- }
- }
- }
-
-}