You are here

DocBlockTest.php in Zircon Profile 8.0

File

vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php
View source
<?php

/**
 * phpDocumentor DocBlock Test
 *
 * PHP Version 5.3
 *
 * @author    Mike van Riel <mike.vanriel@naenius.com>
 * @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;

use phpDocumentor\Reflection\DocBlock\Context;
use phpDocumentor\Reflection\DocBlock\Location;
use phpDocumentor\Reflection\DocBlock\Tag\ReturnTag;

/**
 * Test class for phpDocumentor\Reflection\DocBlock
 *
 * @author    Mike van Riel <mike.vanriel@naenius.com>
 * @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 DocBlockTest extends \PHPUnit_Framework_TestCase {

  /**
   * @covers \phpDocumentor\Reflection\DocBlock
   *
   * @return void
   */
  public function testConstruct() {
    $fixture = <<<DOCBLOCK
/**
 * This is a short description
 *
 * This is a long description
 *
 * @see \\MyClass
 * @return void
 */
DOCBLOCK;
    $object = new DocBlock($fixture, new Context('\\MyNamespace', array(
      'PHPDoc' => '\\phpDocumentor',
    )), new Location(2));
    $this
      ->assertEquals('This is a short description', $object
      ->getShortDescription());
    $this
      ->assertEquals('This is a long description', $object
      ->getLongDescription()
      ->getContents());
    $this
      ->assertCount(2, $object
      ->getTags());
    $this
      ->assertTrue($object
      ->hasTag('see'));
    $this
      ->assertTrue($object
      ->hasTag('return'));
    $this
      ->assertFalse($object
      ->hasTag('category'));
    $this
      ->assertSame('MyNamespace', $object
      ->getContext()
      ->getNamespace());
    $this
      ->assertSame(array(
      'PHPDoc' => '\\phpDocumentor',
    ), $object
      ->getContext()
      ->getNamespaceAliases());
    $this
      ->assertSame(2, $object
      ->getLocation()
      ->getLineNumber());
  }

  /**
   * @covers \phpDocumentor\Reflection\DocBlock::splitDocBlock
   *
   * @return void
   */
  public function testConstructWithTagsOnly() {
    $fixture = <<<DOCBLOCK
/**
 * @see \\MyClass
 * @return void
 */
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertEquals('', $object
      ->getShortDescription());
    $this
      ->assertEquals('', $object
      ->getLongDescription()
      ->getContents());
    $this
      ->assertCount(2, $object
      ->getTags());
    $this
      ->assertTrue($object
      ->hasTag('see'));
    $this
      ->assertTrue($object
      ->hasTag('return'));
    $this
      ->assertFalse($object
      ->hasTag('category'));
  }

  /**
   * @covers \phpDocumentor\Reflection\DocBlock::isTemplateStart
   */
  public function testIfStartOfTemplateIsDiscovered() {
    $fixture = <<<DOCBLOCK
/**#@+
 * @see \\MyClass
 * @return void
 */
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertEquals('', $object
      ->getShortDescription());
    $this
      ->assertEquals('', $object
      ->getLongDescription()
      ->getContents());
    $this
      ->assertCount(2, $object
      ->getTags());
    $this
      ->assertTrue($object
      ->hasTag('see'));
    $this
      ->assertTrue($object
      ->hasTag('return'));
    $this
      ->assertFalse($object
      ->hasTag('category'));
    $this
      ->assertTrue($object
      ->isTemplateStart());
  }

  /**
   * @covers \phpDocumentor\Reflection\DocBlock::isTemplateEnd
   */
  public function testIfEndOfTemplateIsDiscovered() {
    $fixture = <<<DOCBLOCK
/**#@-*/
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertEquals('', $object
      ->getShortDescription());
    $this
      ->assertEquals('', $object
      ->getLongDescription()
      ->getContents());
    $this
      ->assertTrue($object
      ->isTemplateEnd());
  }

  /**
   * @covers \phpDocumentor\Reflection\DocBlock::cleanInput
   *
   * @return void
   */
  public function testConstructOneLiner() {
    $fixture = '/** Short description and nothing more. */';
    $object = new DocBlock($fixture);
    $this
      ->assertEquals('Short description and nothing more.', $object
      ->getShortDescription());
    $this
      ->assertEquals('', $object
      ->getLongDescription()
      ->getContents());
    $this
      ->assertCount(0, $object
      ->getTags());
  }

  /**
   * @covers \phpDocumentor\Reflection\DocBlock::__construct
   *
   * @return void
   */
  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
      ->assertCount(4, $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
   *
   * @return void
   */
  public function testExceptionOnInvalidObject() {
    new DocBlock($this);
  }
  public function testDotSeperation() {
    $fixture = <<<DOCBLOCK
/**
 * This is a short description.
 * This is a long description.
 * This is a continuation of the long description.
 */
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertEquals('This is a short description.', $object
      ->getShortDescription());
    $this
      ->assertEquals("This is a long description.\nThis is a continuation of the long " . "description.", $object
      ->getLongDescription()
      ->getContents());
  }

  /**
   * @covers \phpDocumentor\Reflection\DocBlock::parseTags
   * @expectedException \LogicException
   *
   * @return void
   */
  public function testInvalidTagBlock() {
    if (0 == ini_get('allow_url_include')) {
      $this
        ->markTestSkipped('"data" URIs for includes are required.');
    }
    include 'data:text/plain;base64,' . base64_encode(<<<DOCBLOCK_EXTENSION
<?php
class MyReflectionDocBlock extends \\phpDocumentor\\Reflection\\DocBlock {
    protected function splitDocBlock(\$comment) {
        return array('', '', 'Invalid tag block');
    }
}
DOCBLOCK_EXTENSION
);
    new \MyReflectionDocBlock('');
  }
  public function testTagCaseSensitivity() {
    $fixture = <<<DOCBLOCK
/**
 * This is a short description.
 *
 * This is a long description.
 *
 * @method null something()
 * @Method({"GET", "POST"})
 */
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertEquals('This is a short description.', $object
      ->getShortDescription());
    $this
      ->assertEquals('This is a long description.', $object
      ->getLongDescription()
      ->getContents());
    $tags = $object
      ->getTags();
    $this
      ->assertCount(2, $tags);
    $this
      ->assertTrue($object
      ->hasTag('method'));
    $this
      ->assertTrue($object
      ->hasTag('Method'));
    $this
      ->assertInstanceOf(__NAMESPACE__ . '\\DocBlock\\Tag\\MethodTag', $tags[0]);
    $this
      ->assertInstanceOf(__NAMESPACE__ . '\\DocBlock\\Tag', $tags[1]);
    $this
      ->assertNotInstanceOf(__NAMESPACE__ . '\\DocBlock\\Tag\\MethodTag', $tags[1]);
  }

  /**
   * @depends testConstructFromReflector
   * @covers \phpDocumentor\Reflection\DocBlock::getTagsByName
   *
   * @return void
   */
  public function testGetTagsByNameZeroAndOneMatch() {
    $object = new DocBlock(new \ReflectionClass($this));
    $this
      ->assertEmpty($object
      ->getTagsByName('category'));
    $this
      ->assertCount(1, $object
      ->getTagsByName('author'));
  }

  /**
   * @depends testConstructWithTagsOnly
   * @covers \phpDocumentor\Reflection\DocBlock::parseTags
   *
   * @return void
   */
  public function testParseMultilineTag() {
    $fixture = <<<DOCBLOCK
/**
 * @return void Content on
 *     multiple lines.
 */
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertCount(1, $object
      ->getTags());
  }

  /**
   * @depends testConstructWithTagsOnly
   * @covers \phpDocumentor\Reflection\DocBlock::parseTags
   *
   * @return void
   */
  public function testParseMultilineTagWithLineBreaks() {
    $fixture = <<<DOCBLOCK
/**
 * @return void Content on
 *     multiple lines.
 *
 *     One more, after the break.
 */
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertCount(1, $tags = $object
      ->getTags());

    /** @var ReturnTag $tag */
    $tag = reset($tags);
    $this
      ->assertEquals("Content on\n    multiple lines.\n\n    One more, after the break.", $tag
      ->getDescription());
  }

  /**
   * @depends testConstructWithTagsOnly
   * @covers \phpDocumentor\Reflection\DocBlock::getTagsByName
   *
   * @return void
   */
  public function testGetTagsByNameMultipleMatch() {
    $fixture = <<<DOCBLOCK
/**
 * @param string
 * @param int
 * @return void
 */
DOCBLOCK;
    $object = new DocBlock($fixture);
    $this
      ->assertEmpty($object
      ->getTagsByName('category'));
    $this
      ->assertCount(1, $object
      ->getTagsByName('return'));
    $this
      ->assertCount(2, $object
      ->getTagsByName('param'));
  }

}

Classes