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