Вход Регистрация
Файл: gapps/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/Set.php
Строк: 60
<?php
namespace HamcrestCore;

/*
 Copyright (c) 2010 hamcrest.org
 */
use HamcrestBaseMatcher;
use 
HamcrestDescription;

/**
 * Tests if a value (class, object, or array) has a named property.
 *
 * For example:
 * <pre>
 * assertThat(array('a', 'b'), set('b'));
 * assertThat($foo, set('bar'));
 * assertThat('Server', notSet('defaultPort'));
 * </pre>
 *
 * @todo Replace $property with a matcher and iterate all property names.
 */
class Set extends BaseMatcher
{

    private 
$_property;
    private 
$_not;

    public function 
__construct($property$not false)
    {
        
$this->_property $property;
        
$this->_not $not;
    }

    public function 
matches($item)
    {
        if (
$item === null) {
            return 
false;
        }
        
$property $this->_property;
        if (
is_array($item)) {
            
$result = isset($item[$property]);
        } elseif (
is_object($item)) {
            
$result = isset($item->$property);
        } elseif (
is_string($item)) {
            
$result = isset($item::$$property);
        } else {
            throw new 
InvalidArgumentException('Must pass an object, array, or class name');
        }

        return 
$this->_not ? !$result $result;
    }

    public function 
describeTo(Description $description)
    {
        
$description->appendText($this->_not 'unset property ' 'set property ')->appendText($this->_property);
    }

    public function 
describeMismatch($itemDescription $description)
    {
        
$value '';
        if (!
$this->_not) {
            
$description->appendText('was not set');
        } else {
            
$property $this->_property;
            if (
is_array($item)) {
                
$value $item[$property];
            } elseif (
is_object($item)) {
                
$value $item->$property;
            } elseif (
is_string($item)) {
                
$value $item::$$property;
            }
            
parent::describeMismatch($value$description);
        }
    }

    
/**
     * Matches if value (class, object, or array) has named $property.
     *
     * @factory
     */
    
public static function set($property)
    {
        return new 
self($property);
    }

    
/**
     * Matches if value (class, object, or array) does not have named $property.
     *
     * @factory
     */
    
public static function notSet($property)
    {
        return new 
self($propertytrue);
    }
}
Онлайн: 3
Реклама