123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php
- namespace PhpParser;
- use PhpParser\Node\Expr;
- class BuilderFactoryTest extends \PHPUnit_Framework_TestCase
- {
- /**
- * @dataProvider provideTestFactory
- */
- public function testFactory($methodName, $className) {
- $factory = new BuilderFactory;
- $this->assertInstanceOf($className, $factory->$methodName('test'));
- }
- public function provideTestFactory() {
- return array(
- array('namespace', 'PhpParser\Builder\Namespace_'),
- array('class', 'PhpParser\Builder\Class_'),
- array('interface', 'PhpParser\Builder\Interface_'),
- array('trait', 'PhpParser\Builder\Trait_'),
- array('method', 'PhpParser\Builder\Method'),
- array('function', 'PhpParser\Builder\Function_'),
- array('property', 'PhpParser\Builder\Property'),
- array('param', 'PhpParser\Builder\Param'),
- array('use', 'PhpParser\Builder\Use_'),
- );
- }
- public function testNonExistingMethod() {
- $this->setExpectedException('LogicException', 'Method "foo" does not exist');
- $factory = new BuilderFactory();
- $factory->foo();
- }
- public function testIntegration() {
- $factory = new BuilderFactory;
- $node = $factory->namespace('Name\Space')
- ->addStmt($factory->use('Foo\Bar\SomeOtherClass'))
- ->addStmt($factory->use('Foo\Bar')->as('A'))
- ->addStmt($factory
- ->class('SomeClass')
- ->extend('SomeOtherClass')
- ->implement('A\Few', '\Interfaces')
- ->makeAbstract()
- ->addStmt($factory->method('firstMethod'))
- ->addStmt($factory->method('someMethod')
- ->makePublic()
- ->makeAbstract()
- ->addParam($factory->param('someParam')->setTypeHint('SomeClass'))
- ->setDocComment('/**
- * This method does something.
- *
- * @param SomeClass And takes a parameter
- */'))
- ->addStmt($factory->method('anotherMethod')
- ->makeProtected()
- ->addParam($factory->param('someParam')->setDefault('test'))
- ->addStmt(new Expr\Print_(new Expr\Variable('someParam'))))
- ->addStmt($factory->property('someProperty')->makeProtected())
- ->addStmt($factory->property('anotherProperty')
- ->makePrivate()
- ->setDefault(array(1, 2, 3))))
- ->getNode()
- ;
- $expected = <<<'EOC'
- <?php
- namespace Name\Space;
- use Foo\Bar\SomeOtherClass;
- use Foo\Bar as A;
- abstract class SomeClass extends SomeOtherClass implements A\Few, \Interfaces
- {
- protected $someProperty;
- private $anotherProperty = array(1, 2, 3);
- function firstMethod()
- {
- }
- /**
- * This method does something.
- *
- * @param SomeClass And takes a parameter
- */
- public abstract function someMethod(SomeClass $someParam);
- protected function anotherMethod($someParam = 'test')
- {
- print $someParam;
- }
- }
- EOC;
- $stmts = array($node);
- $prettyPrinter = new PrettyPrinter\Standard();
- $generated = $prettyPrinter->prettyPrintFile($stmts);
- $this->assertEquals(
- str_replace("\r\n", "\n", $expected),
- str_replace("\r\n", "\n", $generated)
- );
- }
- }
|