123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <?php
- namespace spec\Prophecy\Doubler\ClassPatch;
- use PhpSpec\ObjectBehavior;
- use Prophecy\Argument;
- class ProphecySubjectPatchSpec extends ObjectBehavior
- {
- function it_is_a_patch()
- {
- $this->shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface');
- }
- function it_has_priority_of_0()
- {
- $this->getPriority()->shouldReturn(0);
- }
- /**
- * @param \Prophecy\Doubler\Generator\Node\ClassNode $node
- */
- function it_supports_any_class($node)
- {
- $this->supports($node)->shouldReturn(true);
- }
- /**
- * @param \Prophecy\Doubler\Generator\Node\ClassNode $node
- */
- function it_forces_class_to_implement_ProphecySubjectInterface($node)
- {
- $node->addInterface('Prophecy\Prophecy\ProphecySubjectInterface')->shouldBeCalled();
- $node->addProperty('objectProphecy', 'private')->willReturn(null);
- $node->getMethods()->willReturn(array());
- $node->hasMethod(Argument::any())->willReturn(false);
- $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null);
- $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null);
- $this->apply($node);
- }
- /**
- * @param \Prophecy\Doubler\Generator\Node\ClassNode $node
- * @param \Prophecy\Doubler\Generator\Node\MethodNode $constructor
- * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1
- * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2
- * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3
- */
- function it_forces_all_class_methods_except_constructor_to_proxy_calls_into_prophecy_makeCall(
- $node, $constructor, $method1, $method2, $method3
- )
- {
- $node->addInterface('Prophecy\Prophecy\ProphecySubjectInterface')->willReturn(null);
- $node->addProperty('objectProphecy', 'private')->willReturn(null);
- $node->hasMethod(Argument::any())->willReturn(false);
- $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null);
- $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null);
- $constructor->getName()->willReturn('__construct');
- $method1->getName()->willReturn('method1');
- $method2->getName()->willReturn('method2');
- $method3->getName()->willReturn('method3');
- $node->getMethods()->willReturn(array(
- 'method1' => $method1,
- 'method2' => $method2,
- 'method3' => $method3,
- ));
- $constructor->setCode(Argument::any())->shouldNotBeCalled();
- $method1->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());')
- ->shouldBeCalled();
- $method2->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());')
- ->shouldBeCalled();
- $method3->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());')
- ->shouldBeCalled();
- $this->apply($node);
- }
- }
|