Files
roundcubemail/tests/Browser/Components/Toolbarmenu.php
Michael Voříšek a8707ae220 Fix and assert basic CS using CI (#9246)
* Assert CS using CI

* fix "single_blank_line_at_eof"

* fix "statement_indentation"

* fix "switch_case_semicolon_to_colon"

* fix "control_structure_braces"

* fix "statement_indentation"

* fix "no_whitespace_in_blank_line"

* fix "no_trailing_whitespace_in_comment"

* fix "no_trailing_whitespace"

* fix "single_space_around_construct"

* fix "spaces_inside_parentheses"

* fix "ternary_operator_spaces"

* fix "trim_array_spaces"

* fix "whitespace_after_comma_in_array"

* fix "cast_spaces"

* fix "unary_operator_spaces"

* fix "no_trailing_comma_in_singleline"

* fix "ordered_imports"

* fix "no_unused_imports"

* Check composer.json format

* fix CI job name

* file header comments are not phpdoc

* fix "phpdoc_indent"

* fix "braces_position"

* fix "phpdoc_types"

* fix "no_blank_lines_after_class_opening"

* fix "no_multiple_statements_per_line"

* fix "multiline_comment_opening_closing"

* fix "single_line_empty_body"

* fix "non_printable_character"

* fix "phpdoc_trim_consecutive_blank_line_separation"

* fix "include"

* fix "no_mixed_echo_print"

---------

Co-authored-by: Aleksander Machniak <alec@alec.pl>
2023-12-16 15:37:43 +01:00

142 lines
3.7 KiB
PHP

<?php
namespace Tests\Browser\Components;
use Laravel\Dusk\Component;
use Tests\Browser\Browser;
class Toolbarmenu extends Component
{
/**
* Get the root selector for the component.
*
* @return string
*/
public function selector()
{
return '#toolbar-menu';
}
/**
* Assert that the browser page contains the component.
*
* @param Browser $browser
*
* @return void
*/
public function assert($browser)
{
if ($browser->isPhone()) {
$browser->assertPresent($this->selector());
}
else {
$browser->assertVisible($this->selector());
}
}
/**
* Get the element shortcuts for the component.
*
* @return array
*/
public function elements()
{
return [
];
}
/**
* Assert toolbar menu state
*/
public function assertMenuState($browser, $active, $disabled = [], $missing = [])
{
$this->openMenu($browser);
foreach ($active as $option) {
// Print action is disabled on phones
if ($option == 'print' && $browser->isPhone()) {
$browser->assertMissing("a.print");
}
else {
$browser->assertVisible("a.{$option}:not(.disabled)");
}
}
foreach ($disabled as $option) {
if ($option == 'print' && $browser->isPhone()) {
$browser->assertMissing("a.print");
}
else {
$browser->assertVisible("a.{$option}.disabled");
}
}
foreach ($missing as $option) {
$browser->assertMissing("a.{$option}");
}
$this->closeMenu($browser);
}
/**
* Close toolbar menu (on phones)
*/
public function closeMenu($browser)
{
// hide the menu back
if ($browser->isPhone()) {
$browser->withinBody(function ($browser) {
$browser->script("var elem; while(elem = \$('.popover.show .popover-header a.button:visible')[0]) \$(elem).click();");
$browser->waitUntilMissingOrStale($this->selector());
// FIXME: For some reason sometimes .popover-overlay does not close,
// we have to remove it manually
$browser->script(
"Array.from(document.getElementsByClassName('popover-overlay')).forEach(function(elem) { elem.parentNode.removeChild(elem); })"
);
});
}
}
/**
* Select toolbar menu item
*/
public function clickMenuItem($browser, $name, $dropdown_action = null, $close = true)
{
$this->openMenu($browser);
$selector = "a.{$name}" . ($dropdown_action ? " + a.dropdown" : '');
$browser->click($selector);
if ($dropdown_action) {
$popup_id = $browser->attribute($selector, 'data-popup');
$browser->withinBody(function ($browser) use ($popup_id, $dropdown_action) {
$browser->click("#{$popup_id} li a.{$dropdown_action}");
});
}
// Make sure the menu is closed on mobile
if ($close) {
$this->closeMenu($browser);
}
}
/**
* Open toolbar menu (on phones)
*/
public function openMenu($browser)
{
if ($browser->isPhone()) {
$browser->withinBody(function ($browser) {
// Click (visible) menu button
foreach ($browser->elements('.toolbar-menu-button') as $button) {
if ($button->isDisplayed()) {
$button->click();
}
}
$browser->waitFor($this->selector());
});
}
}
}