diff --git a/src/phpDocumentor/Reflection/DocBlock.php b/src/phpDocumentor/Reflection/DocBlock.php index e82ceba..dff4008 100644 --- a/src/phpDocumentor/Reflection/DocBlock.php +++ b/src/phpDocumentor/Reflection/DocBlock.php @@ -200,30 +200,32 @@ class DocBlock implements \Reflector protected function parseTags($tags) { $result = array(); - foreach (explode("\n", trim($tags)) as $tag_line) { - if (trim($tag_line) === '') { - continue; + $tags = trim($tags); + if ('' !== $tags) { + if ('@' !== $tags[0]) { + throw new \LogicException( + 'A tag block started with text instead of an actual tag,' + . ' this makes the tag block invalid: ' . $tags + ); } - - if (isset($tag_line[0]) && ($tag_line[0] === '@')) { - $result[] = $tag_line; - } else { - if (count($result) == 0) { - throw new \LogicException( - 'A tag block started with text instead of an actual tag,' - . ' this makes the tag block invalid: ' . $tags - ); + foreach (explode("\n", $tags) as $tag_line) { + if (trim($tag_line) === '') { + continue; } - $result[count($result) - 1] .= PHP_EOL . $tag_line; + if (isset($tag_line[0]) && ($tag_line[0] === '@')) { + $result[] = $tag_line; + } else { + $result[count($result) - 1] .= PHP_EOL . $tag_line; + } } - } - // create proper Tag objects - foreach ($result as $key => $tag_line) { - $tag = DocBlock\Tag::createInstance($tag_line); - $tag->setDocBlock($this); - $result[$key] = $tag; + // create proper Tag objects + foreach ($result as $key => $tag_line) { + $tag = DocBlock\Tag::createInstance($tag_line); + $tag->setDocBlock($this); + $result[$key] = $tag; + } } $this->tags = $result; @@ -388,6 +390,7 @@ class DocBlock implements \Reflector * implement it. * * @return string + * @codeCoverageIgnore Not yet implemented */ public static function export() { @@ -399,6 +402,7 @@ class DocBlock implements \Reflector * BUT this throws an exception at this point). * * @return string + * @codeCoverageIgnore Not yet implemented */ public function __toString() { diff --git a/src/phpDocumentor/Reflection/DocBlock/LongDescription.php b/src/phpDocumentor/Reflection/DocBlock/LongDescription.php index 3e116e0..4ec7b11 100644 --- a/src/phpDocumentor/Reflection/DocBlock/LongDescription.php +++ b/src/phpDocumentor/Reflection/DocBlock/LongDescription.php @@ -100,7 +100,7 @@ class LongDescription implements \Reflector $this->parsedContents[$i] ); } - + //In order to allow "literal" inline tags, the otherwise invalid //sequence "{@}" is changed to "@", and "{}" is changed to "}". //See unit tests for examples. @@ -153,6 +153,7 @@ class LongDescription implements \Reflector * and implement it. * * @return void + * @codeCoverageIgnore Not yet implemented */ public static function export() { @@ -164,9 +165,10 @@ class LongDescription implements \Reflector * BUT this throws an exception at this point). * * @return string + * @codeCoverageIgnore Not yet implemented */ public function __toString() { return 'Not yet implemented'; } -} \ No newline at end of file +} diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag.php b/src/phpDocumentor/Reflection/DocBlock/Tag.php index ffd3027..86140fa 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag.php @@ -173,6 +173,7 @@ class Tag implements \Reflector * @todo determine the exact format as used by PHP Reflection and implement it. * * @return void + * @codeCoverageIgnore Not yet implemented */ public static function export() { @@ -184,6 +185,7 @@ class Tag implements \Reflector * BUT this throws an exception at this point). * * @return string + * @codeCoverageIgnore Not yet implemented */ public function __toString() { diff --git a/tests/phpDocumentor/Reflection/DocBlock/LongDescriptionTest.php b/tests/phpDocumentor/Reflection/DocBlock/LongDescriptionTest.php index 5fe23c6..b262403 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/LongDescriptionTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/LongDescriptionTest.php @@ -57,7 +57,7 @@ tags.', $parsedContents[2] ); } - + public function testInlineTagAtStartParsing() { $fixture = <<getParsedContents(); $this->assertCount(3, $parsedContents); - + $this->assertSame('', $parsedContents[0]); $this->assertInstanceOf( __NAMESPACE__ . '\Tag\LinkTag', @@ -81,7 +81,7 @@ tags.', $parsedContents[2] ); } - + public function testNestedInlineTagParsing() { $fixture = <<getParsedContents(); $this->assertCount(3, $parsedContents); - + $this->assertSame( 'This is text for a description with ', $parsedContents[0] @@ -198,7 +198,7 @@ inline tag'), $parsedContents[1]->getParsedDescription() ); } - + public function testInlineTagEscapingSequence() { $fixture = <<getParsedDescription() ); } -} \ No newline at end of file +} diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php index 7eebc5c..0d9abbe 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php @@ -24,7 +24,7 @@ class LinkTagTest extends \PHPUnit_Framework_TestCase { /** * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create - * a link for the @link doc block + * a link for the @link doc block. * * @param string $type * @param string $content diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php index f24a771..5fae81d 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php @@ -24,7 +24,7 @@ class ParamTagTest extends \PHPUnit_Framework_TestCase { /** * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ParamTag can - * understand the param DocBlock. + * understand the @param DocBlock. * * @param string $type * @param string $content diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php index 74512e6..bdef29a 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php @@ -24,7 +24,7 @@ class ReturnTagTest extends ParamTagTest { /** * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag can - * understand the Return DocBlock. + * understand the @return DocBlock. * * @param string $content * @param string $extractedType diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php index 2f270ed..a74cac5 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php @@ -24,7 +24,7 @@ class SeeTagTest extends \PHPUnit_Framework_TestCase { /** * Test that the phpDocumentor_Reflection_DocBlock_Tag_See can create a link - * for the @see doc block + * for the @see doc block. * * @param string $type * @param string $content diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php index 513f4d5..0e61cbd 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php @@ -24,7 +24,7 @@ class UsesTagTest extends \PHPUnit_Framework_TestCase { /** * Test that the \phpDocumentor\Reflection\DocBlock\Tag\UsesTag can create - * a link for the @uses doc block + * a link for the @uses doc block. * * @param string $type * @param string $content diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php index b759fa6..2c53b56 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php @@ -24,7 +24,7 @@ class VarTagTest extends \PHPUnit_Framework_TestCase { /** * Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can - * understand the @var doc block + * understand the @var doc block. * * @param string $type * @param string $content diff --git a/tests/phpDocumentor/Reflection/DocBlockTest.php b/tests/phpDocumentor/Reflection/DocBlockTest.php index 3079758..c3f0123 100644 --- a/tests/phpDocumentor/Reflection/DocBlockTest.php +++ b/tests/phpDocumentor/Reflection/DocBlockTest.php @@ -13,7 +13,7 @@ namespace phpDocumentor\Reflection; /** - * Test class for phpDocumentor_Reflection_DocBlock + * Test class for phpDocumentor\Reflection\DocBlock * * @author Mike van Riel * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) @@ -46,6 +46,31 @@ DOCBLOCK; $this->assertEquals(2, count($object->getTags())); $this->assertTrue($object->hasTag('see')); $this->assertTrue($object->hasTag('return')); + $this->assertFalse($object->hasTag('category')); + } + + public function testConstructFromReflector() + { + $object = new DocBlock(new \ReflectionClass($this)); + $this->assertEquals( + 'Test class for phpDocumentor\Reflection\DocBlock', + $object->getShortDescription() + ); + $this->assertEquals('', $object->getLongDescription()->getContents()); + $this->assertEquals(4, count($object->getTags())); + $this->assertTrue($object->hasTag('author')); + $this->assertTrue($object->hasTag('copyright')); + $this->assertTrue($object->hasTag('license')); + $this->assertTrue($object->hasTag('link')); + $this->assertFalse($object->hasTag('category')); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testExceptionOnInvalidObject() + { + $object = new DocBlock($this); } public function testDotSeperation() @@ -139,16 +164,18 @@ DOCBLOCK; public function testThatExpandTypeDoesNotExpandAllKeywords($keyword) { $docblock = new DocBlock('', '\My\Namespace'); - $this->assertEquals($keyword, $docblock->expandType($keyword)); + $this->assertSame($keyword, $docblock->expandType($keyword)); } public function getNonExpandableKeywordsForExpandType() { return array( + array(null), array('string'), array('int'), array('integer'), array('bool'), array('boolean'), array('float'), array('double'), array('object'), array('mixed'), array('array'), array('resource'), array('void'), - array('null'), array('callback'), array('false'), array('true') + array('null'), array('callback'), array('false'), array('true'), + array('self'), array('$this'), array('callable') ); } }