Refactored Tag::createInstance() to use a simple tag-to-class map, that has the default tag handlers pre-registered.

This commit is contained in:
Vasil Rangelov
2012-11-11 00:54:51 +02:00
parent fedcd8cf49
commit 28df2a4cd6
2 changed files with 137 additions and 12 deletions
@@ -32,6 +32,81 @@ class TagTest extends \PHPUnit_Framework_TestCase
{
Tag::createInstance('Invalid tag line');
}
public function testTagHandlerUnregistration()
{
$currentHandler = __NAMESPACE__ . '\Tag\VarTag';
$tagPreUnreg = Tag::createInstance('@var mixed');
$this->assertInstanceOf(
$currentHandler,
$tagPreUnreg
);
$this->assertInstanceOf(
__NAMESPACE__ . '\Tag',
$tagPreUnreg
);
Tag::registerTagHandler('var', null);
$tagPostUnreg = Tag::createInstance('@var mixed');
$this->assertNotInstanceOf(
$currentHandler,
$tagPostUnreg
);
$this->assertInstanceOf(
__NAMESPACE__ . '\Tag',
$tagPostUnreg
);
Tag::registerTagHandler('var', $currentHandler);
}
public function testTagHandlerRegistration()
{
if (0 == ini_get('allow_url_include')) {
$this->markTestSkipped('"data" URIs for includes are required.');
}
$currentHandler = __NAMESPACE__ . '\Tag\VarTag';
$tagPreUnreg = Tag::createInstance('@var mixed');
$this->assertInstanceOf(
$currentHandler,
$tagPreUnreg
);
$this->assertInstanceOf(
__NAMESPACE__ . '\Tag',
$tagPreUnreg
);
require 'data:text/plain;base64,'. base64_encode(<<<TAG_HANDLER
<?php
class MyVarHandler extends \phpDocumentor\Reflection\DocBlock\Tag {}
TAG_HANDLER
);
$this->assertFalse(Tag::registerTagHandler('var', 'Non existent'));
$this->assertTrue(Tag::registerTagHandler('var', '\MyVarHandler'));
$this->assertFalse(
Tag::registerTagHandler('var', __NAMESPACE__ . '\TagTest')
);
$tagPostUnreg = Tag::createInstance('@var mixed');
$this->assertNotInstanceOf(
$currentHandler,
$tagPostUnreg
);
$this->assertInstanceOf(
__NAMESPACE__ . '\Tag',
$tagPostUnreg
);
$this->assertInstanceOf(
'\MyVarHandler',
$tagPostUnreg
);
$this->assertTrue(Tag::registerTagHandler('var', $currentHandler));
}
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can
* understand the @var doc block.