123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- <?php
- /**
- * This file is part of phpDocumentor.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @copyright 2010-2015 Mike van Riel<mike@phpdoc.org>
- * @license http://www.opensource.org/licenses/mit-license.php MIT
- * @link http://phpdoc.org
- */
- namespace phpDocumentor\Reflection;
- use Mockery as m;
- use phpDocumentor\Reflection\DocBlock\Description;
- use phpDocumentor\Reflection\DocBlock\DescriptionFactory;
- use phpDocumentor\Reflection\DocBlock\Tag;
- use phpDocumentor\Reflection\DocBlock\TagFactory;
- use phpDocumentor\Reflection\DocBlock\Tags\Param;
- use phpDocumentor\Reflection\Types\Context;
- /**
- * @coversDefaultClass phpDocumentor\Reflection\DocBlockFactory
- * @covers ::<private>
- * @uses \Webmozart\Assert\Assert
- * @uses phpDocumentor\Reflection\DocBlock
- */
- class DocBlockFactoryTest extends \PHPUnit_Framework_TestCase
- {
- /**
- * @covers ::__construct
- * @covers ::createInstance
- * @uses \phpDocumentor\Reflection\DocBlock\StandardTagFactory
- * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory
- */
- public function testCreateFactoryUsingFactoryMethod()
- {
- $fixture = DocBlockFactory::createInstance();
- $this->assertInstanceOf(DocBlockFactory::class, $fixture);
- }
- /**
- * @covers ::__construct
- * @covers ::create
- * @uses phpDocumentor\Reflection\DocBlock\Description
- */
- public function testCreateDocBlockFromReflection()
- {
- $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class));
- $docBlock = '/** This is a DocBlock */';
- $classReflector = m::mock(\ReflectionClass::class);
- $classReflector->shouldReceive('getDocComment')->andReturn($docBlock);
- $docblock = $fixture->create($classReflector);
- $this->assertInstanceOf(DocBlock::class, $docblock);
- $this->assertSame('This is a DocBlock', $docblock->getSummary());
- $this->assertEquals(new Description(''), $docblock->getDescription());
- $this->assertSame([], $docblock->getTags());
- $this->assertEquals(new Context(''), $docblock->getContext());
- $this->assertNull($docblock->getLocation());
- }
- /**
- * @covers ::__construct
- * @covers ::create
- * @uses phpDocumentor\Reflection\DocBlock\Description
- */
- public function testCreateDocBlockFromStringWithDocComment()
- {
- $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class));
- $docblock = $fixture->create('/** This is a DocBlock */');
- $this->assertInstanceOf(DocBlock::class, $docblock);
- $this->assertSame('This is a DocBlock', $docblock->getSummary());
- $this->assertEquals(new Description(''), $docblock->getDescription());
- $this->assertSame([], $docblock->getTags());
- $this->assertEquals(new Context(''), $docblock->getContext());
- $this->assertNull($docblock->getLocation());
- }
- /**
- * @covers ::create
- * @covers ::__construct
- * @uses phpDocumentor\Reflection\DocBlock\Description
- */
- public function testCreateDocBlockFromStringWithoutDocComment()
- {
- $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class));
- $docblock = $fixture->create('This is a DocBlock');
- $this->assertInstanceOf(DocBlock::class, $docblock);
- $this->assertSame('This is a DocBlock', $docblock->getSummary());
- $this->assertEquals(new Description(''), $docblock->getDescription());
- $this->assertSame([], $docblock->getTags());
- $this->assertEquals(new Context(''), $docblock->getContext());
- $this->assertNull($docblock->getLocation());
- }
- /**
- * @covers ::__construct
- * @covers ::create
- * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory
- * @uses phpDocumentor\Reflection\DocBlock\Description
- * @dataProvider provideSummaryAndDescriptions
- */
- public function testSummaryAndDescriptionAreSeparated($given, $summary, $description)
- {
- $tagFactory = m::mock(TagFactory::class);
- $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory);
- $docblock = $fixture->create($given);
- $this->assertSame($summary, $docblock->getSummary());
- $this->assertEquals(new Description($description), $docblock->getDescription());
- }
- /**
- * @covers ::__construct
- * @covers ::create
- * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory
- * @uses phpDocumentor\Reflection\DocBlock\Description
- */
- public function testDescriptionsRetainFormatting()
- {
- $tagFactory = m::mock(TagFactory::class);
- $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory);
- $given = <<<DOCBLOCK
- /**
- * This is a summary.
- * This is a multiline Description
- * that contains a code block.
- *
- * See here: a CodeBlock
- */
- DOCBLOCK;
- $description = <<<DESCRIPTION
- This is a multiline Description
- that contains a code block.
- See here: a CodeBlock
- DESCRIPTION;
- $docblock = $fixture->create($given);
- $this->assertEquals(new Description($description), $docblock->getDescription());
- }
- /**
- * @covers ::__construct
- * @covers ::create
- * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory
- * @uses phpDocumentor\Reflection\DocBlock\Description
- */
- public function testTagsAreInterpretedUsingFactory()
- {
- $tagString = <<<TAG
- @author Mike van Riel <me@mikevanriel.com> This is with
- multiline description.
- TAG;
- $tag = m::mock(Tag::class);
- $tagFactory = m::mock(TagFactory::class);
- $tagFactory->shouldReceive('create')->with($tagString, m::type(Context::class))->andReturn($tag);
- $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory);
- $given = <<<DOCBLOCK
- /**
- * This is a summary.
- *
- * @author Mike van Riel <me@mikevanriel.com> This is with
- * multiline description.
- */
- DOCBLOCK;
- $docblock = $fixture->create($given, new Context(''));
- $this->assertEquals([$tag], $docblock->getTags());
- }
- public function provideSummaryAndDescriptions()
- {
- return [
- ['This is a DocBlock', 'This is a DocBlock', ''],
- [
- 'This is a DocBlock. This should still be summary.',
- 'This is a DocBlock. This should still be summary.',
- ''
- ],
- [
- <<<DOCBLOCK
- This is a DocBlock.
- This should be a Description.
- DOCBLOCK
- ,
- 'This is a DocBlock.',
- 'This should be a Description.'
- ],
- [
- <<<DOCBLOCK
- This is a
- multiline Summary.
- This should be a Description.
- DOCBLOCK
- ,
- "This is a\nmultiline Summary.",
- 'This should be a Description.'
- ],
- [
- <<<DOCBLOCK
- This is a Summary without dot but with a whiteline
- This should be a Description.
- DOCBLOCK
- ,
- 'This is a Summary without dot but with a whiteline',
- 'This should be a Description.'
- ],
- [
- <<<DOCBLOCK
- This is a Summary with dot and with a whiteline.
- This should be a Description.
- DOCBLOCK
- ,
- 'This is a Summary with dot and with a whiteline.',
- 'This should be a Description.'
- ],
- ];
- }
- /**
- * @covers ::__construct
- * @covers ::create
- *
- * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory
- * @uses phpDocumentor\Reflection\DocBlock\Description
- * @uses phpDocumentor\Reflection\Types\Context
- * @uses phpDocumentor\Reflection\DocBlock\Tags\Param
- */
- public function testTagsWithContextNamespace()
- {
- $tagFactoryMock = m::mock(TagFactory::class);
- $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), $tagFactoryMock);
- $context = new Context('MyNamespace');
- $tagFactoryMock->shouldReceive('create')->with(m::any(), $context)->andReturn(new Param('param'));
- $docblock = $fixture->create('/** @param MyType $param */', $context);
- }
- /**
- * @covers ::__construct
- * @covers ::create
- *
- * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory
- * @uses phpDocumentor\Reflection\DocBlock\Description
- */
- public function testTagsAreFilteredForNullValues()
- {
- $tagString = <<<TAG
- @author Mike van Riel <me@mikevanriel.com> This is with
- multiline description.
- TAG;
- $tagFactory = m::mock(TagFactory::class);
- $tagFactory->shouldReceive('create')->with($tagString, m::any())->andReturn(null);
- $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory);
- $given = <<<DOCBLOCK
- /**
- * This is a summary.
- *
- * @author Mike van Riel <me@mikevanriel.com> This is with
- * multiline description.
- */
- DOCBLOCK;
- $docblock = $fixture->create($given, new Context(''));
- $this->assertEquals([], $docblock->getTags());
- }
- }
|