ソースを参照

ZF-8307 - Fix Zend_Reflection_Docblock_Tag not supporting PHP 5.3 Namespaces as type-hints.

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@19060 44c647ce-9c0f-0410-b52a-842ac1e357ba
beberlei 16 年 前
コミット
46d4005dfd

+ 1 - 1
library/Zend/Reflection/Docblock/Tag/Param.php

@@ -49,7 +49,7 @@ class Zend_Reflection_Docblock_Tag_Param extends Zend_Reflection_Docblock_Tag
     {
         $matches = array();
 
-        if (!preg_match('#^@(\w+)\s+(\w+)(?:\s+(\$\S+))?(?:\s+(.*))?#s', $tagDocblockLine, $matches)) {
+        if (!preg_match('#^@(\w+)\s+([\w|\\\]+)(?:\s+(\$\S+))?(?:\s+(.*))?#s', $tagDocblockLine, $matches)) {
             require_once 'Zend/Reflection/Exception.php';
             throw new Zend_Reflection_Exception('Provided docblock line is does not contain a valid tag');
         }

+ 1 - 1
library/Zend/Reflection/Docblock/Tag/Return.php

@@ -43,7 +43,7 @@ class Zend_Reflection_Docblock_Tag_Return extends Zend_Reflection_Docblock_Tag
      */
     public function __construct($tagDocblockLine)
     {
-        if (!preg_match('#^@(\w+)\s+(\w+)(?:\s+(.*))?#', $tagDocblockLine, $matches)) {
+        if (!preg_match('#^@(\w+)\s+([\w|\\\]+)(?:\s+(.*))?#', $tagDocblockLine, $matches)) {
             require_once 'Zend/Reflection/Exception.php';
             throw new Zend_Reflection_Exception('Provided docblock line is does not contain a valid tag');
         }

+ 13 - 0
tests/Zend/Reflection/Docblock/Tag/ParamTest.php

@@ -74,5 +74,18 @@ class Zend_Reflection_Docblock_Tag_ParamTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($paramTag->getVariableName(), '$var', 'Third Match Failed');
         $this->assertEquals($paramTag->getDescription(),'Description of $var', 'Final Match Failed');
     }
+
+    /**
+     * @group ZF-8307
+     */
+    public function testNamespaceInParam()
+    {    
+        $classReflection = new Zend_Reflection_Class('Zend_Reflection_Docblock_Param_WithNamespace');
+        $paramTag = $classReflection->getMethod('doSomething')->getDocblock()->getTag('param');
+
+        $this->assertEquals('Zend\Foo\Bar', $paramTag->getType());
+        $this->assertEquals('$var', $paramTag->getVariableName());
+        $this->assertEquals('desc', $paramTag->getDescription());
+    }
 }
 

+ 12 - 1
tests/Zend/Reflection/Docblock/Tag/ReturnTest.php

@@ -64,5 +64,16 @@ class Zend_Reflection_Docblock_Tag_ReturnTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($paramTag->getType(), 'string', 'Second Match Failed');
         $this->assertEquals($paramTag->getDescription(),'Description of return value', 'Final Match Failed');
     }
-}
 
+    /**
+     * @group ZF-8307
+     */
+    public function testReturnClassWithNamespace()
+    {
+        $classReflection = new Zend_Reflection_Class('Zend_Reflection_Docblock_Param_WithNamespace');
+
+        $paramTag = $classReflection->getMethod('doSomething')->getDocblock()->getTag('return');
+
+        $this->assertEquals('Zend\Reflection\Docblock', $paramTag->getType());
+    }
+}

+ 2 - 2
tests/Zend/Reflection/FileTest.php

@@ -65,7 +65,7 @@ class Zend_Reflection_FileTest extends PHPUnit_Framework_TestCase
         require_once $fileToRequire;
         $reflectionFile = new Zend_Reflection_File($fileToRequire);
         $this->assertEquals(get_class($reflectionFile), 'Zend_Reflection_File');
-        $this->assertEquals(count($reflectionFile->getClasses()), 7);
+        $this->assertEquals(count($reflectionFile->getClasses()), 8);
         $this->assertEquals(get_class($reflectionFile->getClass('Zend_Reflection_TestSampleClass2')), 'Zend_Reflection_Class');
     }
 
@@ -115,7 +115,7 @@ class Zend_Reflection_FileTest extends PHPUnit_Framework_TestCase
         require_once $fileToRequire;
         $reflectionFile = new Zend_Reflection_File($fileToRequire);
         $this->assertEquals(9, $reflectionFile->getStartLine());
-        $this->assertEquals(172, $reflectionFile->getEndLine());
+        $this->assertEquals(185, $reflectionFile->getEndLine());
     }
 
     public function testFileGetDocblockReturnsFileDocblock()

+ 13 - 0
tests/Zend/Reflection/_files/TestSampleClass.php

@@ -169,3 +169,16 @@ class Zend_Reflection_TestSampleClass6
 function zend_reflection_test_sample_function6($one, $two = 2) {
     return true;
 }
+
+
+class Zend_Reflection_Docblock_Param_WithNamespace
+{
+    /**
+     * @param Zend\Foo\Bar $var desc
+     * @return Zend\Reflection\Docblock
+     */
+    public function doSomething()
+    {
+
+    }
+}