sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							108 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							108 lines
						
					
					
						
							3.5 KiB
						
					
					
				
								<?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)
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |