Security update for Core, with self-updated composer
[yaffs-website] / vendor / nikic / php-parser / test / PhpParser / BuilderFactoryTest.php
diff --git a/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php b/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
new file mode 100644 (file)
index 0000000..1c3ef18
--- /dev/null
@@ -0,0 +1,108 @@
+<?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)
+        );
+    }
+}