Mercurial > hg > isophonics-drupal-site
diff vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,85 @@ +<?php + +namespace spec\Prophecy\Doubler\ClassPatch; + +use PhpSpec\ObjectBehavior; +use Prophecy\Argument; +use Prophecy\Doubler\Generator\Node\ClassNode; +use Prophecy\Doubler\Generator\Node\MethodNode; + +class SplFileInfoPatchSpec extends ObjectBehavior +{ + function it_is_a_patch() + { + $this->shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); + } + + function its_priority_is_50() + { + $this->getPriority()->shouldReturn(50); + } + + function it_does_not_support_nodes_without_parent_class(ClassNode $node) + { + $node->getParentClass()->willReturn('stdClass'); + $this->supports($node)->shouldReturn(false); + } + + function it_supports_nodes_with_SplFileInfo_as_parent_class(ClassNode $node) + { + $node->getParentClass()->willReturn('SplFileInfo'); + $this->supports($node)->shouldReturn(true); + } + + function it_supports_nodes_with_derivative_of_SplFileInfo_as_parent_class(ClassNode $node) + { + $node->getParentClass()->willReturn('SplFileInfo'); + $this->supports($node)->shouldReturn(true); + } + + function it_adds_a_method_to_node_if_not_exists(ClassNode $node) + { + $node->hasMethod('__construct')->willReturn(false); + $node->addMethod(Argument::any())->shouldBeCalled(); + $node->getParentClass()->shouldBeCalled(); + + $this->apply($node); + } + + function it_updates_existing_method_if_found(ClassNode $node, MethodNode $method) + { + $node->hasMethod('__construct')->willReturn(true); + $node->getMethod('__construct')->willReturn($method); + $node->getParentClass()->shouldBeCalled(); + + $method->useParentCode()->shouldBeCalled(); + + $this->apply($node); + } + + function it_should_not_supply_a_file_for_a_directory_iterator(ClassNode $node, MethodNode $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); + } + + function it_should_supply_a_file_for_a_spl_file_object(ClassNode $node, MethodNode $method) + { + $node->hasMethod('__construct')->willReturn(true); + $node->getMethod('__construct')->willReturn($method); + $node->getParentClass()->willReturn('SplFileObject'); + + $method->setCode(Argument::that(function($value) { + return strpos($value, '.php') !== false; + }))->shouldBeCalled(); + + $this->apply($node); + } +}