Chris@0: builder = new Interface_('Contract'); Chris@0: } Chris@0: Chris@0: private function dump($node) { Chris@0: $pp = new \PhpParser\PrettyPrinter\Standard; Chris@0: return $pp->prettyPrint(array($node)); Chris@0: } Chris@0: Chris@0: public function testEmpty() { Chris@0: $contract = $this->builder->getNode(); Chris@0: $this->assertInstanceOf('PhpParser\Node\Stmt\Interface_', $contract); Chris@0: $this->assertSame('Contract', $contract->name); Chris@0: } Chris@0: Chris@0: public function testExtending() { Chris@0: $contract = $this->builder->extend('Space\Root1', 'Root2')->getNode(); Chris@0: $this->assertEquals( Chris@0: new Stmt\Interface_('Contract', array( Chris@0: 'extends' => array( Chris@0: new Node\Name('Space\Root1'), Chris@0: new Node\Name('Root2') Chris@0: ), Chris@0: )), $contract Chris@0: ); Chris@0: } Chris@0: Chris@0: public function testAddMethod() { Chris@0: $method = new Stmt\ClassMethod('doSomething'); Chris@0: $contract = $this->builder->addStmt($method)->getNode(); Chris@0: $this->assertSame(array($method), $contract->stmts); Chris@0: } Chris@0: Chris@0: public function testAddConst() { Chris@0: $const = new Stmt\ClassConst(array( Chris@0: new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458.0)) Chris@0: )); Chris@0: $contract = $this->builder->addStmt($const)->getNode(); Chris@0: $this->assertSame(299792458.0, $contract->stmts[0]->consts[0]->value->value); Chris@0: } Chris@0: Chris@0: public function testOrder() { Chris@0: $const = new Stmt\ClassConst(array( Chris@0: new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458)) Chris@0: )); Chris@0: $method = new Stmt\ClassMethod('doSomething'); Chris@0: $contract = $this->builder Chris@0: ->addStmt($method) Chris@0: ->addStmt($const) Chris@0: ->getNode() Chris@0: ; Chris@0: Chris@0: $this->assertInstanceOf('PhpParser\Node\Stmt\ClassConst', $contract->stmts[0]); Chris@0: $this->assertInstanceOf('PhpParser\Node\Stmt\ClassMethod', $contract->stmts[1]); Chris@0: } Chris@0: Chris@0: public function testDocComment() { Chris@0: $node = $this->builder Chris@0: ->setDocComment('/** Test */') Chris@0: ->getNode(); Chris@0: Chris@0: $this->assertEquals(new Stmt\Interface_('Contract', array(), array( Chris@0: 'comments' => array(new Comment\Doc('/** Test */')) Chris@0: )), $node); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @expectedException \LogicException Chris@0: * @expectedExceptionMessage Unexpected node of type "Stmt_PropertyProperty" Chris@0: */ Chris@0: public function testInvalidStmtError() { Chris@0: $this->builder->addStmt(new Stmt\PropertyProperty('invalid')); Chris@0: } Chris@0: Chris@0: public function testFullFunctional() { Chris@0: $const = new Stmt\ClassConst(array( Chris@0: new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458)) Chris@0: )); Chris@0: $method = new Stmt\ClassMethod('doSomething'); Chris@0: $contract = $this->builder Chris@0: ->addStmt($method) Chris@0: ->addStmt($const) Chris@0: ->getNode() Chris@0: ; Chris@0: Chris@0: eval($this->dump($contract)); Chris@0: Chris@0: $this->assertTrue(interface_exists('Contract', false)); Chris@0: } Chris@0: } Chris@0: