84 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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);
 | |
|     }
 | |
| }
 | 
