mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Behat: "apply formatting" steps
This commit is contained in:
parent
849f2c1cb1
commit
a87000170a
@ -1,33 +1,28 @@
|
|||||||
@todo
|
|
||||||
Feature: Apply rich formatting to content
|
Feature: Apply rich formatting to content
|
||||||
As a cms author
|
As a cms author
|
||||||
I want to work with content in the way I'm used to from word processing software
|
I want to work with content in the way I'm used to from word processing software
|
||||||
So that I make it more appealing by creating structure and highlights
|
So that I make it more appealing by creating structure and highlights
|
||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given a "page" "About Us"
|
Given a "page" "About Us" has the "Content" "<h1>My awesome headline</h1><p>Some amazing content</p>"
|
||||||
Given I am logged in with "ADMIN" permissions
|
And I am logged in with "ADMIN" permissions
|
||||||
Given "About Us" has the Content
|
|
||||||
"""<h1>My awesome headline</1>
|
|
||||||
<p>Some amazing content</p>"""
|
|
||||||
And I go to "/admin/pages"
|
And I go to "/admin/pages"
|
||||||
Then I click on "About Us" in the tree
|
Then I click on "About Us" in the tree
|
||||||
And I focus the "Content" field
|
|
||||||
|
|
||||||
Scenario: I can control alignment of selected content
|
Scenario: I can control alignment of selected content
|
||||||
Given I highlight the content "My awesome headline"
|
Given I select "My awesome headline" in the "Content" HTML field
|
||||||
When I press the "Align Right" button in the HTML editor
|
When I press the "Align Right" button
|
||||||
Then the content "My awesome headline" should be right aligned
|
Then "My awesome headline" in the "Content" HTML field should be right aligned
|
||||||
But the content "Some amazing content" should be left aligned
|
But "Some amazing content" in the "Content" HTML field should be left aligned
|
||||||
Then I press the "Save draft" button in the HTML editor
|
Then I press the "Save draft" button
|
||||||
Then the content "My awesome headline" should still be right aligned
|
Then "My awesome headline" in the "Content" HTML field should be right aligned
|
||||||
|
|
||||||
Scenario: I can bold selected content
|
Scenario: I can bold selected content
|
||||||
Given I highlight the content "awesome"
|
Given I select "awesome" in the "Content" HTML field
|
||||||
When I press the "Bold" button in the HTML editor
|
When I press the "Bold (Ctrl+B)" button
|
||||||
Then the content "awesome" should be bold
|
Then "awesome" in the "Content" HTML field should be bold
|
||||||
But the content "My" should not be bold
|
But "My" in the "Content" HTML field should not be bold
|
||||||
When I press the "Save draft" button in the HTML editor
|
When I press the "Save draft" button
|
||||||
Then the content "awesome" should still be bold
|
Then "awesome" in the "Content" HTML field should be bold
|
||||||
But the content "My" should still not be bold
|
But "My" in the "Content" HTML field should not be bold
|
||||||
|
|
@ -11,6 +11,8 @@ use Behat\Behat\Context\ClosuredContextInterface,
|
|||||||
Behat\Gherkin\Node\PyStringNode,
|
Behat\Gherkin\Node\PyStringNode,
|
||||||
Behat\Gherkin\Node\TableNode;
|
Behat\Gherkin\Node\TableNode;
|
||||||
|
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
// PHPUnit
|
// PHPUnit
|
||||||
require_once 'PHPUnit/Autoload.php';
|
require_once 'PHPUnit/Autoload.php';
|
||||||
require_once 'PHPUnit/Framework/Assert/Functions.php';
|
require_once 'PHPUnit/Framework/Assert/Functions.php';
|
||||||
@ -111,6 +113,47 @@ class CmsFormsContext extends BehatContext
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks formatting in the HTML field, by analyzing the HTML node surrounding
|
||||||
|
* the text for certain properties.
|
||||||
|
*
|
||||||
|
* Example: Given "my text" in the "Content" HTML field should be right aligned
|
||||||
|
* Example: Given "my text" in the "Content" HTML field should not be bold
|
||||||
|
*
|
||||||
|
* @todo Use an actual DOM parser for more accurate assertions
|
||||||
|
*
|
||||||
|
* @Given /^"(?P<text>([^"]*))" in the "(?P<field>([^"]*))" HTML field should(?P<negate>(?: not)?) be (?P<formatting>(.*))$/
|
||||||
|
*/
|
||||||
|
public function stepContentInHtmlFieldShouldHaveFormatting($text, $field, $negate, $formatting) {
|
||||||
|
$page = $this->getSession()->getPage();
|
||||||
|
$inputField = $page->findField($field);
|
||||||
|
assertNotNull($inputField, sprintf('HTML field "%s" not found', $field));
|
||||||
|
|
||||||
|
$crawler = new Crawler($inputField->getValue());
|
||||||
|
$matchedNode = null;
|
||||||
|
foreach($crawler->filterXPath('//*') as $node) {
|
||||||
|
if(
|
||||||
|
$node->firstChild
|
||||||
|
&& $node->firstChild->nodeType == XML_TEXT_NODE
|
||||||
|
&& stripos($node->firstChild->nodeValue, $text) !== FALSE
|
||||||
|
) {
|
||||||
|
$matchedNode = $node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertNotNull($matchedNode);
|
||||||
|
|
||||||
|
$assertFn = $negate ? 'assertNotEquals' : 'assertEquals';
|
||||||
|
if($formatting == 'bold') {
|
||||||
|
call_user_func($assertFn, 'strong', $matchedNode->nodeName);
|
||||||
|
} else if($formatting == 'left aligned') {
|
||||||
|
if($matchedNode->getAttribute('style')) {
|
||||||
|
call_user_func($assertFn, 'text-align: left;', $matchedNode->getAttribute('style'));
|
||||||
|
}
|
||||||
|
} else if($formatting == 'right aligned') {
|
||||||
|
call_user_func($assertFn, 'text-align: right;', $matchedNode->getAttribute('style'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selects the first textual match in the HTML editor. Does not support
|
* Selects the first textual match in the HTML editor. Does not support
|
||||||
* selection across DOM node boundaries.
|
* selection across DOM node boundaries.
|
||||||
|
Loading…
Reference in New Issue
Block a user