109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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)
 | |
|         );
 | |
|     }
 | |
| }
 | 
