123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- <?php
- namespace PhpParser\Builder;
- use PhpParser\Comment;
- use PhpParser\Node;
- use PhpParser\Node\Name;
- use PhpParser\Node\Stmt;
- class ClassTest extends \PHPUnit_Framework_TestCase
- {
- protected function createClassBuilder($class) {
- return new Class_($class);
- }
- public function testExtendsImplements() {
- $node = $this->createClassBuilder('SomeLogger')
- ->extend('BaseLogger')
- ->implement('Namespaced\Logger', new Name('SomeInterface'))
- ->implement('\Fully\Qualified', 'namespace\NamespaceRelative')
- ->getNode()
- ;
- $this->assertEquals(
- new Stmt\Class_('SomeLogger', array(
- 'extends' => new Name('BaseLogger'),
- 'implements' => array(
- new Name('Namespaced\Logger'),
- new Name('SomeInterface'),
- new Name\FullyQualified('Fully\Qualified'),
- new Name\Relative('NamespaceRelative'),
- ),
- )),
- $node
- );
- }
- public function testAbstract() {
- $node = $this->createClassBuilder('Test')
- ->makeAbstract()
- ->getNode()
- ;
- $this->assertEquals(
- new Stmt\Class_('Test', array(
- 'flags' => Stmt\Class_::MODIFIER_ABSTRACT
- )),
- $node
- );
- }
- public function testFinal() {
- $node = $this->createClassBuilder('Test')
- ->makeFinal()
- ->getNode()
- ;
- $this->assertEquals(
- new Stmt\Class_('Test', array(
- 'flags' => Stmt\Class_::MODIFIER_FINAL
- )),
- $node
- );
- }
- public function testStatementOrder() {
- $method = new Stmt\ClassMethod('testMethod');
- $property = new Stmt\Property(
- Stmt\Class_::MODIFIER_PUBLIC,
- array(new Stmt\PropertyProperty('testProperty'))
- );
- $const = new Stmt\ClassConst(array(
- new Node\Const_('TEST_CONST', new Node\Scalar\String_('ABC'))
- ));
- $use = new Stmt\TraitUse(array(new Name('SomeTrait')));
- $node = $this->createClassBuilder('Test')
- ->addStmt($method)
- ->addStmt($property)
- ->addStmts(array($const, $use))
- ->getNode()
- ;
- $this->assertEquals(
- new Stmt\Class_('Test', array(
- 'stmts' => array($use, $const, $property, $method)
- )),
- $node
- );
- }
- public function testDocComment() {
- $docComment = <<<'DOC'
- /**
- * Test
- */
- DOC;
- $class = $this->createClassBuilder('Test')
- ->setDocComment($docComment)
- ->getNode();
- $this->assertEquals(
- new Stmt\Class_('Test', array(), array(
- 'comments' => array(
- new Comment\Doc($docComment)
- )
- )),
- $class
- );
- $class = $this->createClassBuilder('Test')
- ->setDocComment(new Comment\Doc($docComment))
- ->getNode();
- $this->assertEquals(
- new Stmt\Class_('Test', array(), array(
- 'comments' => array(
- new Comment\Doc($docComment)
- )
- )),
- $class
- );
- }
- /**
- * @expectedException \LogicException
- * @expectedExceptionMessage Unexpected node of type "Stmt_Echo"
- */
- public function testInvalidStmtError() {
- $this->createClassBuilder('Test')
- ->addStmt(new Stmt\Echo_(array()))
- ;
- }
- /**
- * @expectedException \LogicException
- * @expectedExceptionMessage Doc comment must be a string or an instance of PhpParser\Comment\Doc
- */
- public function testInvalidDocComment() {
- $this->createClassBuilder('Test')
- ->setDocComment(new Comment('Test'));
- }
- /**
- * @expectedException \LogicException
- * @expectedExceptionMessage Name cannot be empty
- */
- public function testEmptyName() {
- $this->createClassBuilder('Test')
- ->extend('');
- }
- /**
- * @expectedException \LogicException
- * @expectedExceptionMessage Name must be a string or an instance of PhpParser\Node\Name
- */
- public function testInvalidName() {
- $this->createClassBuilder('Test')
- ->extend(array('Foo'));
- }
- }
|