Файл: gapps/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/IsSelected.php
Строк: 99
<?php
namespace IlluminateFoundationTestingConstraints;
use DOMElement;
use SymfonyComponentDomCrawlerCrawler;
class IsSelected extends FormFieldConstraint
{
/**
* Get the valid elements.
*
* @return string
*/
protected function validElements()
{
return 'select,input[type="radio"]';
}
/**
* Determine if the select or radio element is selected.
*
* @param SymfonyComponentDomCrawlerCrawler|string $crawler
* @return bool
*/
protected function matches($crawler)
{
$crawler = $this->crawler($crawler);
return in_array($this->value, $this->getSelectedValue($crawler));
}
/**
* Get the selected value of a select field or radio group.
*
* @param SymfonyComponentDomCrawlerCrawler $crawler
* @return array
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function getSelectedValue(Crawler $crawler)
{
$field = $this->field($crawler);
return $field->nodeName() == 'select'
? $this->getSelectedValueFromSelect($field)
: [$this->getCheckedValueFromRadioGroup($field)];
}
/**
* Get the selected value from a select field.
*
* @param SymfonyComponentDomCrawlerCrawler $select
* @return array
*/
protected function getSelectedValueFromSelect(Crawler $select)
{
$selected = [];
foreach ($select->children() as $option) {
if ($option->nodeName === 'optgroup') {
foreach ($option->childNodes as $child) {
if ($child->hasAttribute('selected')) {
$selected[] = $this->getOptionValue($child);
}
}
} elseif ($option->hasAttribute('selected')) {
$selected[] = $this->getOptionValue($option);
}
}
return $selected;
}
/**
* Get the selected value from an option element.
*
* @param DOMElement $option
* @return string
*/
protected function getOptionValue(DOMElement $option)
{
if ($option->hasAttribute('value')) {
return $option->getAttribute('value');
}
return $option->textContent;
}
/**
* Get the checked value from a radio group.
*
* @param SymfonyComponentDomCrawlerCrawler $radioGroup
* @return string|null
*/
protected function getCheckedValueFromRadioGroup(Crawler $radioGroup)
{
foreach ($radioGroup as $radio) {
if ($radio->hasAttribute('checked')) {
return $radio->getAttribute('value');
}
}
}
/**
* Returns the description of the failure.
*
* @return string
*/
protected function getFailureDescription()
{
return sprintf(
'the element [%s] has the selected value [%s]',
$this->selector, $this->value
);
}
}