Added reflections for @version, @since and @deprecated, which separate the version vector (if one is provided) from the description.

This commit is contained in:
Vasil Rangelov
2012-11-13 15:28:17 +02:00
parent 6602ce0375
commit 8107678560
7 changed files with 481 additions and 1 deletions
@@ -49,6 +49,8 @@ class Tag implements \Reflector
=> '\phpDocumentor\Reflection\DocBlock\Tag\AuthorTag',
'covers'
=> '\phpDocumentor\Reflection\DocBlock\Tag\CoversTag',
'deprecated'
=> '\phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag',
'link'
=> '\phpDocumentor\Reflection\DocBlock\Tag\LinkTag',
'method'
@@ -65,6 +67,8 @@ class Tag implements \Reflector
=> '\phpDocumentor\Reflection\DocBlock\Tag\ReturnTag',
'see'
=> '\phpDocumentor\Reflection\DocBlock\Tag\SeeTag',
'since'
=> '\phpDocumentor\Reflection\DocBlock\Tag\SinceTag',
'throw'
=> '\phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag',
'throws'
@@ -72,7 +76,9 @@ class Tag implements \Reflector
'uses'
=> '\phpDocumentor\Reflection\DocBlock\Tag\UsesTag',
'var'
=> '\phpDocumentor\Reflection\DocBlock\Tag\VarTag'
=> '\phpDocumentor\Reflection\DocBlock\Tag\VarTag',
'version'
=> '\phpDocumentor\Reflection\DocBlock\Tag\VersionTag'
);
/**
@@ -0,0 +1,26 @@
<?php
/**
* phpDocumentor
*
* PHP Version 5.3
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection\DocBlock\Tag;
use phpDocumentor\Reflection\DocBlock\Tag\VersionTag;
/**
* Reflection class for a @deprecated tag in a Docblock.
*
* @author Vasil Rangelov <[email protected]>
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
class DeprecatedTag extends VersionTag
{
}
@@ -0,0 +1,26 @@
<?php
/**
* phpDocumentor
*
* PHP Version 5.3
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection\DocBlock\Tag;
use phpDocumentor\Reflection\DocBlock\Tag\VersionTag;
/**
* Reflection class for a @since tag in a Docblock.
*
* @author Vasil Rangelov <[email protected]>
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
class SinceTag extends VersionTag
{
}
@@ -0,0 +1,76 @@
<?php
/**
* phpDocumentor
*
* PHP Version 5.3
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection\DocBlock\Tag;
use phpDocumentor\Reflection\DocBlock\Tag;
/**
* Reflection class for a @version tag in a Docblock.
*
* @author Vasil Rangelov <[email protected]>
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
class VersionTag extends Tag
{
/** @var string The version vector. */
protected $version = '';
/**
* Parses a tag and populates the member variables.
*
* @param string $type Tag identifier for this tag (should be 'version').
* @param string $content Contents for this tag.
*/
public function __construct($type, $content)
{
$this->tag = $type;
$this->content = $content;
$this->description = trim($content);
if (preg_match(
'/^
# The version vector
((?:
# Normal release vectors.
\d\S*
|
# VCS version vectors. Per PHPCS, they are expected to
# follow the form of the VCS name, followed by ":", followed
# by the version vector itself.
# By convention, popular VCSes like CVS, SVN and GIT use "$"
# around the actual version vector.
[^\s\:]+\:\s*\$[^\$]+\$
))
\s*
# The description
(.+)?
$/sux',
$this->description,
$matches
)) {
$this->version = $matches[1];
$this->description = isset($matches[2]) ? $matches[2] : '';
}
}
/**
* Returns the version section of the tag.
*
* @return string The version section of the tag.
*/
public function getVersion()
{
return $this->version;
}
}
@@ -0,0 +1,115 @@
<?php
/**
* phpDocumentor Deprecated Tag Test
*
* PHP version 5.3
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection\DocBlock\Tag;
/**
* Test class for \phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
class DeprecatedTagTest extends \PHPUnit_Framework_TestCase
{
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create
* a link for the @deprecated doc block.
*
* @param string $type
* @param string $content
* @param string $exContent
* @param string $exDescription
* @param string $exVersion
*
* @covers \phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag
* @dataProvider provideDataForConstuctor
*
* @return void
*/
public function testConstructorParesInputsIntoCorrectFields(
$type,
$content,
$exContent,
$exDescription,
$exVersion
) {
$tag = new DeprecatedTag($type, $content);
$this->assertEquals($type, $tag->getName());
$this->assertEquals($exContent, $tag->getContent());
$this->assertEquals($exDescription, $tag->getDescription());
$this->assertEquals($exVersion, $tag->getVersion());
}
/**
* Data provider for testConstructorParesInputsIntoCorrectFields
*
* @return array
*/
public function provideDataForConstuctor()
{
// $type, $content, $exContent, $exDescription, $exVersion
return array(
array(
'deprecated',
'1.0 First release.',
'1.0 First release.',
'First release.',
'1.0'
),
array(
'deprecated',
"1.0\nFirst release.",
"1.0\nFirst release.",
'First release.',
'1.0'
),
array(
'deprecated',
"1.0\nFirst\nrelease.",
"1.0\nFirst\nrelease.",
"First\nrelease.",
'1.0'
),
array(
'deprecated',
'Unfinished release',
'Unfinished release',
'Unfinished release',
''
),
array(
'deprecated',
'1.0',
'1.0',
'',
'1.0'
),
array(
'deprecated',
'GIT: $Id$',
'GIT: $Id$',
'',
'GIT: $Id$'
),
array(
'deprecated',
'GIT: $Id$ Dev build',
'GIT: $Id$ Dev build',
'Dev build',
'GIT: $Id$'
)
);
}
}
@@ -0,0 +1,115 @@
<?php
/**
* phpDocumentor Since Tag Test
*
* PHP version 5.3
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection\DocBlock\Tag;
/**
* Test class for \phpDocumentor\Reflection\DocBlock\Tag\SinceTag
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
class SinceTagTest extends \PHPUnit_Framework_TestCase
{
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create
* a link for the @since doc block.
*
* @param string $type
* @param string $content
* @param string $exContent
* @param string $exDescription
* @param string $exVersion
*
* @covers \phpDocumentor\Reflection\DocBlock\Tag\SinceTag
* @dataProvider provideDataForConstuctor
*
* @return void
*/
public function testConstructorParesInputsIntoCorrectFields(
$type,
$content,
$exContent,
$exDescription,
$exVersion
) {
$tag = new SinceTag($type, $content);
$this->assertEquals($type, $tag->getName());
$this->assertEquals($exContent, $tag->getContent());
$this->assertEquals($exDescription, $tag->getDescription());
$this->assertEquals($exVersion, $tag->getVersion());
}
/**
* Data provider for testConstructorParesInputsIntoCorrectFields
*
* @return array
*/
public function provideDataForConstuctor()
{
// $type, $content, $exContent, $exDescription, $exVersion
return array(
array(
'since',
'1.0 First release.',
'1.0 First release.',
'First release.',
'1.0'
),
array(
'since',
"1.0\nFirst release.",
"1.0\nFirst release.",
'First release.',
'1.0'
),
array(
'since',
"1.0\nFirst\nrelease.",
"1.0\nFirst\nrelease.",
"First\nrelease.",
'1.0'
),
array(
'since',
'Unfinished release',
'Unfinished release',
'Unfinished release',
''
),
array(
'since',
'1.0',
'1.0',
'',
'1.0'
),
array(
'since',
'GIT: $Id$',
'GIT: $Id$',
'',
'GIT: $Id$'
),
array(
'since',
'GIT: $Id$ Dev build',
'GIT: $Id$ Dev build',
'Dev build',
'GIT: $Id$'
)
);
}
}
@@ -0,0 +1,116 @@
<?php
/**
* phpDocumentor Version Tag Test
*
* PHP version 5.3
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection\DocBlock\Tag;
/**
* Test class for \phpDocumentor\Reflection\DocBlock\Tag\VersionTag
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
class VersionTagTest extends \PHPUnit_Framework_TestCase
{
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create
* a link for the @version doc block.
*
* @param string $type
* @param string $content
* @param string $exContent
* @param string $exDescription
* @param string $exVersion
*
* @covers \phpDocumentor\Reflection\DocBlock\Tag\VersionTag::__construct
* @covers \phpDocumentor\Reflection\DocBlock\Tag\VersionTag::getVersion
* @dataProvider provideDataForConstuctor
*
* @return void
*/
public function testConstructorParesInputsIntoCorrectFields(
$type,
$content,
$exContent,
$exDescription,
$exVersion
) {
$tag = new VersionTag($type, $content);
$this->assertEquals($type, $tag->getName());
$this->assertEquals($exContent, $tag->getContent());
$this->assertEquals($exDescription, $tag->getDescription());
$this->assertEquals($exVersion, $tag->getVersion());
}
/**
* Data provider for testConstructorParesInputsIntoCorrectFields
*
* @return array
*/
public function provideDataForConstuctor()
{
// $type, $content, $exContent, $exDescription, $exVersion
return array(
array(
'version',
'1.0 First release.',
'1.0 First release.',
'First release.',
'1.0'
),
array(
'version',
"1.0\nFirst release.",
"1.0\nFirst release.",
'First release.',
'1.0'
),
array(
'version',
"1.0\nFirst\nrelease.",
"1.0\nFirst\nrelease.",
"First\nrelease.",
'1.0'
),
array(
'version',
'Unfinished release',
'Unfinished release',
'Unfinished release',
''
),
array(
'version',
'1.0',
'1.0',
'',
'1.0'
),
array(
'version',
'GIT: $Id$',
'GIT: $Id$',
'',
'GIT: $Id$'
),
array(
'version',
'GIT: $Id$ Dev build',
'GIT: $Id$ Dev build',
'Dev build',
'GIT: $Id$'
)
);
}
}