Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Testing/Constraints/SeeInHtml.php
Строк: 124
<?php

namespace IlluminateTestingConstraints;

use 
PHPUnitFrameworkConstraintConstraint;
use 
ReflectionClass;

class 
SeeInHtml extends Constraint
{
    
/**
     * The string under validation.
     *
     * @var string
     */
    
protected $content;

    
/**
     * Indicates the values must appear in order.
     *
     * @var bool
     */
    
protected $ordered;

    
/**
     * Indicates whether to negate the assertion.
     *
     * @var bool
     */
    
protected $negate;

    
/**
     * The last value that failed to pass validation.
     *
     * @var string
     */
    
protected $failedValue;

    
/**
     * Create a new constraint instance.
     *
     * @param  string  $content
     */
    
public function __construct($content$ordered false$negate false)
    {
        
$this->content $content;
        
$this->ordered $ordered;
        
$this->negate $negate;
    }

    
/**
     * Determine if the rule passes validation.
     *
     * @param  array  $values
     */
    
public function matches($values): bool
    
{
        
$normalizedContent $this->normalize($this->content);

        
$position 0;

        foreach (
$values as $value) {
            if (empty(
$value)) {
                continue;
            }

            
$normalizedValue $this->normalize($value);

            
$valuePosition mb_strpos($normalizedContent$normalizedValue$position);

            if (
$this->negate) {
                if (
$valuePosition !== false) {
                    
$this->failedValue $value;

                    return 
false;
                }

                continue;
            }

            if (
$valuePosition === false || $valuePosition $position) {
                
$this->failedValue $value;

                return 
false;
            }

            if (
$this->ordered) {
                
$position $valuePosition mb_strlen($normalizedValue);
            }
        }

        return 
true;
    }

    
/**
     * Get the description of the failure.
     *
     * @param  array  $values
     */
    
public function failureDescription($values): string
    
{
        if (
$this->negate) {
            return 
sprintf(
                
''%s' does not contain "%s".',
                
$this->content,
                
$this->failedValue
            
);
        }

        return 
sprintf(
            
''%s' contains "%s"%s',
            
$this->content,
            
$this->failedValue,
            
$this->ordered ' in specified order.' '.'
        
);
    }

    
/**
     * Normalize the given value.
     */
    
protected function normalize(string $value): ?string
    
{
        
$value strip_tags($value);
        
$value html_entity_decode($valueENT_QUOTES'UTF-8');
        
$value trim($value);
        
$value preg_replace('/s+/u'' '$value);

        return 
$value;
    }

    
/**
     * Get a string representation of the object.
     */
    
public function toString(): string
    
{
        return (new 
ReflectionClass($this))->name;
    }
}
Онлайн: 2
Реклама