92 lines
2.6 KiB
PHP
92 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace spec\Prophecy\Doubler\ClassPatch;
|
|
|
|
use PhpSpec\ObjectBehavior;
|
|
use Prophecy\Argument;
|
|
|
|
class SplFileInfoPatchSpec extends ObjectBehavior
|
|
{
|
|
function it_is_a_patch()
|
|
{
|
|
$this->shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface');
|
|
}
|
|
|
|
function its_priority_is_50()
|
|
{
|
|
$this->getPriority()->shouldReturn(50);
|
|
}
|
|
|
|
/**
|
|
* @param \Prophecy\Doubler\Generator\Node\ClassNode $node
|
|
*/
|
|
function it_does_not_support_nodes_without_parent_class($node)
|
|
{
|
|
$node->getParentClass()->willReturn('stdClass');
|
|
$this->supports($node)->shouldReturn(false);
|
|
}
|
|
|
|
/**
|
|
* @param \Prophecy\Doubler\Generator\Node\ClassNode $node
|
|
*/
|
|
function it_supports_nodes_with_SplFileInfo_as_parent_class($node)
|
|
{
|
|
$node->getParentClass()->willReturn('SplFileInfo');
|
|
$this->supports($node)->shouldReturn(true);
|
|
}
|
|
|
|
/**
|
|
* @param \Prophecy\Doubler\Generator\Node\ClassNode $node
|
|
*/
|
|
function it_supports_nodes_with_derivative_of_SplFileInfo_as_parent_class($node)
|
|
{
|
|
$node->getParentClass()->willReturn('SplFileInfo');
|
|
$this->supports($node)->shouldReturn(true);
|
|
}
|
|
|
|
/**
|
|
* @param \Prophecy\Doubler\Generator\Node\ClassNode $node
|
|
*/
|
|
function it_adds_a_method_to_node_if_not_exists($node)
|
|
{
|
|
$node->hasMethod('__construct')->willReturn(false);
|
|
$node->addMethod(Argument::any())->shouldBeCalled();
|
|
$node->getParentClass()->shouldBeCalled();
|
|
|
|
$this->apply($node);
|
|
}
|
|
|
|
/**
|
|
* @param \Prophecy\Doubler\Generator\Node\ClassNode $node
|
|
* @param \Prophecy\Doubler\Generator\Node\MethodNode $method
|
|
*/
|
|
function it_updates_existing_method_if_found($node, $method)
|
|
{
|
|
$node->hasMethod('__construct')->willReturn(true);
|
|
$node->getMethod('__construct')->willReturn($method);
|
|
$node->getParentClass()->shouldBeCalled();
|
|
|
|
$method->useParentCode()->shouldBeCalled();
|
|
|
|
$this->apply($node);
|
|
}
|
|
|
|
/**
|
|
* @param \Prophecy\Doubler\Generator\Node\ClassNode $node
|
|
* @param \Prophecy\Doubler\Generator\Node\MethodNode $method
|
|
*/
|
|
function it_should_not_supply_a_file_for_a_directory_iterator($node, $method)
|
|
{
|
|
$node->hasMethod('__construct')->willReturn(true);
|
|
$node->getMethod('__construct')->willReturn($method);
|
|
$node->getParentClass()->willReturn('DirectoryIterator');
|
|
|
|
$method->setCode(Argument::that(function($value) {
|
|
return strpos($value, '.php') === false;
|
|
}))->shouldBeCalled();
|
|
|
|
$this->apply($node);
|
|
}
|
|
|
|
}
|