Chris@0: shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); Chris@0: } Chris@0: Chris@0: function its_priority_is_50() Chris@0: { Chris@0: $this->getPriority()->shouldReturn(50); Chris@0: } Chris@0: Chris@0: function it_does_not_support_nodes_without_parent_class(ClassNode $node) Chris@0: { Chris@0: $node->getParentClass()->willReturn('stdClass'); Chris@0: $this->supports($node)->shouldReturn(false); Chris@0: } Chris@0: Chris@0: function it_supports_nodes_with_SplFileInfo_as_parent_class(ClassNode $node) Chris@0: { Chris@0: $node->getParentClass()->willReturn('SplFileInfo'); Chris@0: $this->supports($node)->shouldReturn(true); Chris@0: } Chris@0: Chris@0: function it_supports_nodes_with_derivative_of_SplFileInfo_as_parent_class(ClassNode $node) Chris@0: { Chris@0: $node->getParentClass()->willReturn('SplFileInfo'); Chris@0: $this->supports($node)->shouldReturn(true); Chris@0: } Chris@0: Chris@0: function it_adds_a_method_to_node_if_not_exists(ClassNode $node) Chris@0: { Chris@0: $node->hasMethod('__construct')->willReturn(false); Chris@0: $node->addMethod(Argument::any())->shouldBeCalled(); Chris@0: $node->getParentClass()->shouldBeCalled(); Chris@0: Chris@0: $this->apply($node); Chris@0: } Chris@0: Chris@0: function it_updates_existing_method_if_found(ClassNode $node, MethodNode $method) Chris@0: { Chris@0: $node->hasMethod('__construct')->willReturn(true); Chris@0: $node->getMethod('__construct')->willReturn($method); Chris@0: $node->getParentClass()->shouldBeCalled(); Chris@0: Chris@0: $method->useParentCode()->shouldBeCalled(); Chris@0: Chris@0: $this->apply($node); Chris@0: } Chris@0: Chris@0: function it_should_not_supply_a_file_for_a_directory_iterator(ClassNode $node, MethodNode $method) Chris@0: { Chris@0: $node->hasMethod('__construct')->willReturn(true); Chris@0: $node->getMethod('__construct')->willReturn($method); Chris@0: $node->getParentClass()->willReturn('DirectoryIterator'); Chris@0: Chris@0: $method->setCode(Argument::that(function($value) { Chris@0: return strpos($value, '.php') === false; Chris@0: }))->shouldBeCalled(); Chris@0: Chris@0: $this->apply($node); Chris@0: } Chris@0: Chris@0: function it_should_supply_a_file_for_a_spl_file_object(ClassNode $node, MethodNode $method) Chris@0: { Chris@0: $node->hasMethod('__construct')->willReturn(true); Chris@0: $node->getMethod('__construct')->willReturn($method); Chris@0: $node->getParentClass()->willReturn('SplFileObject'); Chris@0: Chris@0: $method->setCode(Argument::that(function($value) { Chris@0: return strpos($value, '.php') !== false; Chris@0: }))->shouldBeCalled(); Chris@0: Chris@0: $this->apply($node); Chris@0: } Chris@0: }