Вход Регистрация
Файл: 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
        
);
    }
}
Онлайн: 1
Реклама