From 46f7e8bb075036c92695b15a1ddb6971c751e585 Mon Sep 17 00:00:00 2001 From: Jaapio Date: Fri, 14 Jul 2017 21:47:56 +0200 Subject: [PATCH] Allows usage of compound array types fixes #50 --- src/DocBlock/Tags/Method.php | 4 +- tests/unit/DocBlock/Tags/MethodTest.php | 51 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/DocBlock/Tags/Method.php b/src/DocBlock/Tags/Method.php index 4540b47..d3c1cd1 100644 --- a/src/DocBlock/Tags/Method.php +++ b/src/DocBlock/Tags/Method.php @@ -98,8 +98,8 @@ final class Method extends BaseTag implements Factory\StaticMethod (?:[\w\|_\\\\]+) # array notation (?:\[\])* - ) - )? + )* + ) \s+ )? # Legacy method name (not captured) diff --git a/tests/unit/DocBlock/Tags/MethodTest.php b/tests/unit/DocBlock/Tags/MethodTest.php index 174e5d2..5860abd 100644 --- a/tests/unit/DocBlock/Tags/MethodTest.php +++ b/tests/unit/DocBlock/Tags/MethodTest.php @@ -15,6 +15,7 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; use Mockery as m; use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Fqsen; use phpDocumentor\Reflection\TypeResolver; use phpDocumentor\Reflection\Types\Array_; use phpDocumentor\Reflection\Types\Compound; @@ -469,6 +470,16 @@ class MethodTest extends \PHPUnit_Framework_TestCase $this->assertSame($description, $fixture->getDescription()); } + /** + * @covers ::create + * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: + * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory + * @uses \phpDocumentor\Reflection\TypeResolver + * @uses \phpDocumentor\Reflection\DocBlock\Description + * @uses \phpDocumentor\Reflection\Fqsen + * @uses \phpDocumentor\Reflection\Types\Context + * @uses \phpDocumentor\Reflection\Types\Void_ + */ public function testCreateWithoutReturnType() { $descriptionFactory = m::mock(DescriptionFactory::class); @@ -492,4 +503,44 @@ class MethodTest extends \PHPUnit_Framework_TestCase $this->assertInstanceOf(Void_::class, $fixture->getReturnType()); $this->assertSame($description, $fixture->getDescription()); } + + /** + * @covers ::create + * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: + * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory + * @uses \phpDocumentor\Reflection\TypeResolver + * @uses \phpDocumentor\Reflection\DocBlock\Description + * @uses \phpDocumentor\Reflection\Fqsen + * @uses \phpDocumentor\Reflection\Types\Context + * @uses \phpDocumentor\Reflection\Types\Array_ + * @uses \phpDocumentor\Reflection\Types\Compound + * @uses \phpDocumentor\Reflection\Types\Integer + * @uses \phpDocumentor\Reflection\Types\Object_ + */ + public function testCreateWithMixedReturnTypes() + { + $descriptionFactory = m::mock(DescriptionFactory::class); + $resolver = new TypeResolver(); + $context = new Context(''); + + $descriptionFactory->shouldReceive('create')->andReturn(new Description('')); + + $fixture = Method::create( + 'MyClass[]|int[] myMethod()', + $resolver, + $descriptionFactory, + $context + ); + + $this->assertSame('\MyClass[]|int[] myMethod()', (string)$fixture); + $this->assertSame('myMethod', $fixture->getMethodName()); + $this->assertEquals([], $fixture->getArguments()); + + $this->assertEquals( + new Compound([ + new Array_(new Object_(new Fqsen('\MyClass'))), + new Array_(new Integer()), + ]) + , $fixture->getReturnType()); + } }