1c3ef18dfa4fcb7fdf730ab0c84ccf5735e35fce
[yaffs-website] / vendor / nikic / php-parser / test / PhpParser / BuilderFactoryTest.php
1 <?php
2
3 namespace PhpParser;
4
5 use PhpParser\Node\Expr;
6
7 class BuilderFactoryTest extends \PHPUnit_Framework_TestCase
8 {
9     /**
10      * @dataProvider provideTestFactory
11      */
12     public function testFactory($methodName, $className) {
13         $factory = new BuilderFactory;
14         $this->assertInstanceOf($className, $factory->$methodName('test'));
15     }
16
17     public function provideTestFactory() {
18         return array(
19             array('namespace', 'PhpParser\Builder\Namespace_'),
20             array('class',     'PhpParser\Builder\Class_'),
21             array('interface', 'PhpParser\Builder\Interface_'),
22             array('trait',     'PhpParser\Builder\Trait_'),
23             array('method',    'PhpParser\Builder\Method'),
24             array('function',  'PhpParser\Builder\Function_'),
25             array('property',  'PhpParser\Builder\Property'),
26             array('param',     'PhpParser\Builder\Param'),
27             array('use',       'PhpParser\Builder\Use_'),
28         );
29     }
30
31     public function testNonExistingMethod() {
32         $this->setExpectedException('LogicException', 'Method "foo" does not exist');
33         $factory = new BuilderFactory();
34         $factory->foo();
35     }
36
37     public function testIntegration() {
38         $factory = new BuilderFactory;
39         $node = $factory->namespace('Name\Space')
40             ->addStmt($factory->use('Foo\Bar\SomeOtherClass'))
41             ->addStmt($factory->use('Foo\Bar')->as('A'))
42             ->addStmt($factory
43                 ->class('SomeClass')
44                 ->extend('SomeOtherClass')
45                 ->implement('A\Few', '\Interfaces')
46                 ->makeAbstract()
47
48                 ->addStmt($factory->method('firstMethod'))
49
50                 ->addStmt($factory->method('someMethod')
51                     ->makePublic()
52                     ->makeAbstract()
53                     ->addParam($factory->param('someParam')->setTypeHint('SomeClass'))
54                     ->setDocComment('/**
55                                       * This method does something.
56                                       *
57                                       * @param SomeClass And takes a parameter
58                                       */'))
59
60                 ->addStmt($factory->method('anotherMethod')
61                     ->makeProtected()
62                     ->addParam($factory->param('someParam')->setDefault('test'))
63                     ->addStmt(new Expr\Print_(new Expr\Variable('someParam'))))
64
65                 ->addStmt($factory->property('someProperty')->makeProtected())
66                 ->addStmt($factory->property('anotherProperty')
67                     ->makePrivate()
68                     ->setDefault(array(1, 2, 3))))
69             ->getNode()
70         ;
71
72         $expected = <<<'EOC'
73 <?php
74
75 namespace Name\Space;
76
77 use Foo\Bar\SomeOtherClass;
78 use Foo\Bar as A;
79 abstract class SomeClass extends SomeOtherClass implements A\Few, \Interfaces
80 {
81     protected $someProperty;
82     private $anotherProperty = array(1, 2, 3);
83     function firstMethod()
84     {
85     }
86     /**
87      * This method does something.
88      *
89      * @param SomeClass And takes a parameter
90      */
91     public abstract function someMethod(SomeClass $someParam);
92     protected function anotherMethod($someParam = 'test')
93     {
94         print $someParam;
95     }
96 }
97 EOC;
98
99         $stmts = array($node);
100         $prettyPrinter = new PrettyPrinter\Standard();
101         $generated = $prettyPrinter->prettyPrintFile($stmts);
102
103         $this->assertEquals(
104             str_replace("\r\n", "\n", $expected),
105             str_replace("\r\n", "\n", $generated)
106         );
107     }
108 }