* @license MIT * * @covers \ProxyManager\Generator\MethodGenerator * @group Coverage */ class MethodGeneratorTest extends PHPUnit_Framework_TestCase { public function testGenerateSimpleMethod() { $methodGenerator = new MethodGenerator(); $methodGenerator->setReturnsReference(true); $methodGenerator->setName('methodName'); $methodGenerator->setVisibility('protected'); $methodGenerator->setBody('/* body */'); $methodGenerator->setDocBlock('docBlock'); $methodGenerator->setParameter(new ParameterGenerator('foo')); $this->assertSame(true, $methodGenerator->returnsReference()); $this->assertStringMatchesFormat( '%a/**%adocBlock%a*/%aprotected function & methodName($foo)%a{%a/* body */%a}', $methodGenerator->generate() ); } /** * Verify that building from reflection works */ public function testGenerateFromReflection() { $method = MethodGenerator::fromReflection(new MethodReflection(__CLASS__, __FUNCTION__)); $this->assertSame(__FUNCTION__, $method->getName()); $this->assertSame(MethodGenerator::VISIBILITY_PUBLIC, $method->getVisibility()); $this->assertFalse($method->isStatic()); $this->assertSame('Verify that building from reflection works', $method->getDocBlock()->getShortDescription()); $method = MethodGenerator::fromReflection( new MethodReflection('ProxyManagerTestAsset\\BaseClass', 'protectedMethod') ); $this->assertSame(MethodGenerator::VISIBILITY_PROTECTED, $method->getVisibility()); $method = MethodGenerator::fromReflection( new MethodReflection('ProxyManagerTestAsset\\BaseClass', 'privateMethod') ); $this->assertSame(MethodGenerator::VISIBILITY_PRIVATE, $method->getVisibility()); } public function testGeneratedParametersFromReflection() { $method = MethodGenerator::fromReflection(new MethodReflection( 'ProxyManagerTestAsset\\BaseClass', 'publicTypeHintedMethod' )); $this->assertSame('publicTypeHintedMethod', $method->getName()); $parameters = $method->getParameters(); $this->assertCount(1, $parameters); $param = $parameters['param']; $this->assertSame('stdClass', $param->getType()); } }