Mercurial > hg > isophonics-drupal-site
diff vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 5fb285c0d0e3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -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) + ); + } +}