2010-03-18 07:48:03 +00:00
< ? php
/*
* This file is part of the symfony package .
* ( c ) Fabien Potencier < fabien . potencier @ symfony - project . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Tests\Components\DependencyInjection ;
use Symfony\Components\DependencyInjection\Builder ;
use Symfony\Components\DependencyInjection\BuilderConfiguration ;
use Symfony\Components\DependencyInjection\Definition ;
use Symfony\Components\DependencyInjection\Reference ;
use Symfony\Components\DependencyInjection\FileResource ;
class BuilderConfigurationTest extends \PHPUnit_Framework_TestCase
{
static protected $fixturesPath ;
static public function setUpBeforeClass ()
{
self :: $fixturesPath = __DIR__ . '/../../../../fixtures/Symfony/Components/DependencyInjection/' ;
}
public function testConstructor ()
{
$definitions = array (
'foo' => new Definition ( 'FooClass' ),
'bar' => new Definition ( 'BarClass' ),
);
$parameters = array (
'foo' => 'foo' ,
'bar' => 'bar' ,
);
$configuration = new BuilderConfiguration ( $definitions , $parameters );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( $definitions , $configuration -> getDefinitions (), '__construct() takes an array of definitions as its first argument' );
$this -> assertEquals ( $parameters , $configuration -> getParameters (), '__construct() takes an array of parameters as its second argument' );
2010-03-18 07:48:03 +00:00
}
public function testMerge ()
{
$configuration = new BuilderConfiguration ();
$configuration -> merge ( null );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array (), $configuration -> getParameters (), '->merge() accepts null as an argument' );
$this -> assertEquals ( array (), $configuration -> getDefinitions (), '->merge() accepts null as an argument' );
2010-03-18 07:48:03 +00:00
$configuration = new BuilderConfiguration ( array (), array ( 'bar' => 'foo' ));
$configuration1 = new BuilderConfiguration ( array (), array ( 'foo' => 'bar' ));
$configuration -> merge ( $configuration1 );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'bar' => 'foo' , 'foo' => 'bar' ), $configuration -> getParameters (), '->merge() merges current parameters with the loaded ones' );
2010-03-18 07:48:03 +00:00
$configuration = new BuilderConfiguration ( array (), array ( 'bar' => 'foo' , 'foo' => 'baz' ));
$config = new BuilderConfiguration ( array (), array ( 'foo' => 'bar' ));
$configuration -> merge ( $config );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'bar' => 'foo' , 'foo' => 'bar' ), $configuration -> getParameters (), '->merge() overrides existing parameters' );
2010-03-18 07:48:03 +00:00
$configuration = new BuilderConfiguration ( array ( 'foo' => new Definition ( 'FooClass' ), 'bar' => new Definition ( 'BarClass' )));
$config = new BuilderConfiguration ( array ( 'baz' => new Definition ( 'BazClass' )));
$config -> setAlias ( 'alias_for_foo' , 'foo' );
$configuration -> merge ( $config );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'foo' , 'bar' , 'baz' ), array_keys ( $configuration -> getDefinitions ()), '->merge() merges definitions already defined ones' );
$this -> assertEquals ( array ( 'alias_for_foo' => 'foo' ), $configuration -> getAliases (), '->merge() registers defined aliases' );
2010-03-18 07:48:03 +00:00
$configuration = new BuilderConfiguration ( array ( 'foo' => new Definition ( 'FooClass' )));
$config -> setDefinition ( 'foo' , new Definition ( 'BazClass' ));
$configuration -> merge ( $config );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( 'BazClass' , $configuration -> getDefinition ( 'foo' ) -> getClass (), '->merge() overrides already defined services' );
2010-03-18 07:48:03 +00:00
$configuration = new BuilderConfiguration ();
$configuration -> addResource ( $a = new FileResource ( 'foo.xml' ));
$config = new BuilderConfiguration ();
$config -> addResource ( $b = new FileResource ( 'foo.yml' ));
$configuration -> merge ( $config );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( $a , $b ), $configuration -> getResources (), '->merge() merges resources' );
2010-03-18 07:48:03 +00:00
}
public function testSetGetParameters ()
{
$configuration = new BuilderConfiguration ();
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array (), $configuration -> getParameters (), '->getParameters() returns an empty array if no parameter has been defined' );
2010-03-18 07:48:03 +00:00
$configuration -> setParameters ( array ( 'foo' => 'bar' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'foo' => 'bar' ), $configuration -> getParameters (), '->setParameters() sets the parameters' );
2010-03-18 07:48:03 +00:00
$configuration -> setParameters ( array ( 'bar' => 'foo' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'bar' => 'foo' ), $configuration -> getParameters (), '->setParameters() overrides the previous defined parameters' );
2010-03-18 07:48:03 +00:00
$configuration -> setParameters ( array ( 'Bar' => 'foo' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'bar' => 'foo' ), $configuration -> getParameters (), '->setParameters() converts the key to lowercase' );
2010-03-18 07:48:03 +00:00
}
public function testSetGetParameter ()
{
$configuration = new BuilderConfiguration ( array (), array ( 'foo' => 'bar' ));
$configuration -> setParameter ( 'bar' , 'foo' );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( 'foo' , $configuration -> getParameter ( 'bar' ), '->setParameter() sets the value of a new parameter' );
2010-03-18 07:48:03 +00:00
$configuration -> setParameter ( 'foo' , 'baz' );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( 'baz' , $configuration -> getParameter ( 'foo' ), '->setParameter() overrides previously set parameter' );
2010-03-18 07:48:03 +00:00
$configuration -> setParameter ( 'Foo' , 'baz1' );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( 'baz1' , $configuration -> getParameter ( 'foo' ), '->setParameter() converts the key to lowercase' );
$this -> assertEquals ( 'baz1' , $configuration -> getParameter ( 'FOO' ), '->getParameter() converts the key to lowercase' );
2010-03-18 07:48:03 +00:00
try
{
$configuration -> getParameter ( 'baba' );
$this -> fail ( '->getParameter() throws an \InvalidArgumentException if the key does not exist' );
}
catch ( \InvalidArgumentException $e )
{
}
}
public function testHasParameter ()
{
$configuration = new BuilderConfiguration ( array (), array ( 'foo' => 'bar' ));
$this -> assertTrue ( $configuration -> hasParameter ( 'foo' ), '->hasParameter() returns true if a parameter is defined' );
$this -> assertTrue ( $configuration -> hasParameter ( 'Foo' ), '->hasParameter() converts the key to lowercase' );
$this -> assertTrue ( ! $configuration -> hasParameter ( 'bar' ), '->hasParameter() returns false if a parameter is not defined' );
}
public function testAddParameters ()
{
$configuration = new BuilderConfiguration ( array (), array ( 'foo' => 'bar' ));
$configuration -> addParameters ( array ( 'bar' => 'foo' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'foo' => 'bar' , 'bar' => 'foo' ), $configuration -> getParameters (), '->addParameters() adds parameters to the existing ones' );
2010-03-18 07:48:03 +00:00
$configuration -> addParameters ( array ( 'Bar' => 'fooz' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'foo' => 'bar' , 'bar' => 'fooz' ), $configuration -> getParameters (), '->addParameters() converts keys to lowercase' );
2010-03-18 07:48:03 +00:00
}
public function testAliases ()
{
$configuration = new BuilderConfiguration ();
$configuration -> setAlias ( 'bar' , 'foo' );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( 'foo' , $configuration -> getAlias ( 'bar' ), '->setAlias() defines a new alias' );
2010-03-18 07:48:03 +00:00
$this -> assertTrue ( $configuration -> hasAlias ( 'bar' ), '->hasAlias() returns true if the alias is defined' );
$this -> assertTrue ( ! $configuration -> hasAlias ( 'baba' ), '->hasAlias() returns false if the alias is not defined' );
try
{
$configuration -> getAlias ( 'baba' );
$this -> fail ( '->getAlias() throws an \InvalidArgumentException if the alias does not exist' );
}
catch ( \InvalidArgumentException $e )
{
}
$configuration -> setAlias ( 'barbar' , 'foofoo' );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'bar' => 'foo' , 'barbar' => 'foofoo' ), $configuration -> getAliases (), '->getAliases() returns an array of all defined aliases' );
2010-03-18 07:48:03 +00:00
$configuration -> addAliases ( array ( 'foo' => 'bar' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( 'bar' => 'foo' , 'barbar' => 'foofoo' , 'foo' => 'bar' ), $configuration -> getAliases (), '->addAliases() adds some aliases' );
2010-03-18 07:48:03 +00:00
}
public function testDefinitions ()
{
$configuration = new BuilderConfiguration ();
$definitions = array (
'foo' => new Definition ( 'FooClass' ),
'bar' => new Definition ( 'BarClass' ),
);
$configuration -> setDefinitions ( $definitions );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( $definitions , $configuration -> getDefinitions (), '->setDefinitions() sets the service definitions' );
2010-03-18 07:48:03 +00:00
$this -> assertTrue ( $configuration -> hasDefinition ( 'foo' ), '->hasDefinition() returns true if a service definition exists' );
$this -> assertTrue ( ! $configuration -> hasDefinition ( 'foobar' ), '->hasDefinition() returns false if a service definition does not exist' );
$configuration -> setDefinition ( 'foobar' , $foo = new Definition ( 'FooBarClass' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( $foo , $configuration -> getDefinition ( 'foobar' ), '->getDefinition() returns a service definition if defined' );
2010-03-29 13:32:58 +01:00
$this -> assertTrue ( $configuration -> setDefinition ( 'foobar' , new Definition ( 'FooBarClass' )) === $configuration , '->setDefinition() implements a fuild interface' );
2010-03-18 07:48:03 +00:00
$configuration -> addDefinitions ( $defs = array ( 'foobar' => new Definition ( 'FooBarClass' )));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array_merge ( $definitions , $defs ), $configuration -> getDefinitions (), '->addDefinitions() adds the service definitions' );
2010-03-18 07:48:03 +00:00
try
{
$configuration -> getDefinition ( 'baz' );
$this -> fail ( '->getDefinition() throws an InvalidArgumentException if the service definition does not exist' );
}
catch ( \InvalidArgumentException $e )
{
}
}
public function testFindDefinition ()
{
$configuration = new BuilderConfiguration ( array ( 'foo' => $definition = new Definition ( 'FooClass' )));
$configuration -> setAlias ( 'bar' , 'foo' );
$configuration -> setAlias ( 'foobar' , 'bar' );
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( $definition , $configuration -> findDefinition ( 'foobar' ), '->findDefinition() returns a Definition' );
2010-03-18 07:48:03 +00:00
}
public function testResources ()
{
$configuration = new BuilderConfiguration ();
$configuration -> addResource ( $a = new FileResource ( 'foo.xml' ));
$configuration -> addResource ( $b = new FileResource ( 'foo.yml' ));
2010-03-19 14:04:37 +00:00
$this -> assertEquals ( array ( $a , $b ), $configuration -> getResources (), '->getResources() returns an array of resources read for the current configuration' );
2010-03-18 07:48:03 +00:00
}
}