Вход Регистрация
Файл: src/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php
Строк: 136
<?php

namespace specProphecyDoubler;

use 
PhpSpecObjectBehavior;
use 
ProphecyArgument;

class 
DoublerSpec extends ObjectBehavior
{
    
/**
     * @param ProphecyDoublerGeneratorClassMirror  $mirror
     * @param ProphecyDoublerGeneratorClassCreator $creator
     * @param ProphecyDoublerNameGenerator          $namer
     */
    
function let($mirror$creator$namer)
    {
        
$this->beConstructedWith($mirror$creator$namer);
    }

    function 
it_does_not_have_patches_by_default()
    {
        
$this->getClassPatches()->shouldHaveCount(0);
    }

    
/**
     * @param ProphecyDoublerClassPatchClassPatchInterface $patch
     */
    
function its_registerClassPatch_adds_a_patch_to_the_doubler($patch)
    {
        
$this->registerClassPatch($patch);
        
$this->getClassPatches()->shouldReturn(array($patch));
    }

    
/**
     * @param ProphecyDoublerClassPatchClassPatchInterface $alt1
     * @param ProphecyDoublerClassPatchClassPatchInterface $alt2
     * @param ProphecyDoublerClassPatchClassPatchInterface $alt3
     * @param ProphecyDoublerClassPatchClassPatchInterface $alt4
     */
    
function its_getClassPatches_sorts_patches_by_priority($alt1$alt2$alt3$alt4)
    {
        
$alt1->getPriority()->willReturn(2);
        
$alt2->getPriority()->willReturn(50);
        
$alt3->getPriority()->willReturn(10);
        
$alt4->getPriority()->willReturn(0);

        
$this->registerClassPatch($alt1);
        
$this->registerClassPatch($alt2);
        
$this->registerClassPatch($alt3);
        
$this->registerClassPatch($alt4);

        
$this->getClassPatches()->shouldReturn(array($alt2$alt3$alt1$alt4));
    }

    
/**
     * @param ProphecyDoublerClassPatchClassPatchInterface $alt1
     * @param ProphecyDoublerClassPatchClassPatchInterface $alt2
     * @param ReflectionClass                                 $class
     * @param ReflectionClass                                 $interface1
     * @param ReflectionClass                                 $interface2
     * @param ProphecyDoublerGeneratorNodeClassNode       $node
     */
    
function its_double_mirrors_alterates_and_instantiates_provided_class(
        
$mirror$creator$namer$alt1$alt2$class$interface1$interface2$node
    
)
    {
        
$mirror->reflect($class, array($interface1$interface2))->willReturn($node);
        
$alt1->supports($node)->willReturn(true);
        
$alt2->supports($node)->willReturn(false);
        
$alt1->getPriority()->willReturn(1);
        
$alt2->getPriority()->willReturn(2);
        
$namer->name($class, array($interface1$interface2))->willReturn('SplStack');
        
$class->getName()->willReturn('stdClass');
        
$interface1->getName()->willReturn('ArrayAccess');
        
$interface2->getName()->willReturn('Iterator');

        
$alt1->apply($node)->shouldBeCalled();
        
$alt2->apply($node)->shouldNotBeCalled();
        
$creator->create('SplStack'$node)->shouldBeCalled();

        
$this->registerClassPatch($alt1);
        
$this->registerClassPatch($alt2);

        
$this->double($class, array($interface1$interface2))
            ->
shouldReturnAnInstanceOf('SplStack');
    }

    
/**
     * @param ReflectionClass                           $class
     * @param ProphecyDoublerGeneratorNodeClassNode $node
     */
    
function it_double_instantiates_a_class_with_constructor_argument($mirror$class$node$namer)
    {
        
$class->getName()->willReturn('ReflectionClass');
        
$mirror->reflect($class, array())->willReturn($node);
        
$namer->name($class, array())->willReturn('ReflectionClass');

        
$double $this->double($class, array(), array('stdClass'));
        
$double->shouldBeAnInstanceOf('ReflectionClass');
        
$double->getName()->shouldReturn('stdClass');
    }

    
/**
     * @param ReflectionClass                           $class
     * @param ProphecyDoublerGeneratorNodeClassNode $node
     */
    
function it_can_instantiate_class_with_final_constructor($mirror$class$node$namer)
    {
        
$class->getName()->willReturn('specProphecyDoublerWithFinalConstructor');
        
$mirror->reflect($class, array())->willReturn($node);
        
$namer->name($class, array())->willReturn('specProphecyDoublerWithFinalConstructor');

        
$double $this->double($class, array());

        
$double->shouldBeAnInstanceOf('specProphecyDoublerWithFinalConstructor');
    }
}

class 
WithFinalConstructor
{
    final public function 
__construct() {}
}
Онлайн: 2
Реклама