Made the Tag::createInstance() create generic tag objects when there are uppercase letters in the tag name

(this fixes phpDocumentor/phpDocumentor2#672).
This commit is contained in:
Vasil Rangelov
2012-11-10 14:00:01 +02:00
parent 082c9354d0
commit 8b9591a7c5
2 changed files with 42 additions and 2 deletions
@@ -68,7 +68,8 @@ class Tag implements \Reflector
).'Tag';
$class_name = 'phpDocumentor\\Reflection\\DocBlock\\Tag\\' . $tag_name;
return (@class_exists($class_name))
return ($matches[1] === strtolower($matches[1])
&& @class_exists($class_name))
? new $class_name($matches[1], isset($matches[2]) ? $matches[2] : '')
: new self($matches[1], isset($matches[2]) ? $matches[2] : '');
}
@@ -64,7 +64,7 @@ DOCBLOCK;
$this->assertTrue($object->hasTag('link'));
$this->assertFalse($object->hasTag('category'));
}
/**
* @expectedException \InvalidArgumentException
*/
@@ -93,6 +93,45 @@ DOCBLOCK;
);
}
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->assertEquals(2, count($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]
);
}
/**
* Tests whether a type is expanded with the given namespace and that a
* keyword is not expanded.