2010-03-18 07:48:03 +00:00
< ? php
/*
2010-04-25 16:06:54 +01:00
* This file is part of the Symfony package .
2011-01-15 13:29:43 +00:00
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-04-07 02:07:59 +01:00
*
2010-03-18 07:48:03 +00:00
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2012-03-28 14:43:52 +01:00
namespace Symfony\Component\DependencyInjection\Tests ;
2010-03-18 07:48:03 +00:00
2017-02-08 07:24:27 +00:00
use PHPUnit\Framework\TestCase ;
2017-01-10 07:04:52 +00:00
use Symfony\Component\DependencyInjection\Alias ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\DependencyInjection\Container ;
use Symfony\Component\DependencyInjection\ContainerInterface ;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag ;
2016-08-19 13:18:08 +01:00
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag ;
2010-03-18 07:48:03 +00:00
2017-02-08 07:24:27 +00:00
class ContainerTest extends TestCase
2010-03-18 07:48:03 +00:00
{
2010-05-06 12:25:53 +01:00
public function testConstructor ()
{
$sc = new Container ();
2010-11-20 01:09:20 +00:00
$this -> assertSame ( $sc , $sc -> get ( 'service_container' ), '__construct() automatically registers itself as a service' );
2010-03-18 07:48:03 +00:00
2010-06-27 17:28:29 +01:00
$sc = new Container ( new ParameterBag ( array ( 'foo' => 'bar' )));
$this -> assertEquals ( array ( 'foo' => 'bar' ), $sc -> getParameterBag () -> all (), '__construct() takes an array of parameters as its first argument' );
2010-05-06 12:25:53 +01:00
}
2010-03-18 07:48:03 +00:00
2013-07-21 10:38:59 +01:00
/**
* @ dataProvider dataForTestCamelize
*/
public function testCamelize ( $id , $expected )
{
$this -> assertEquals ( $expected , Container :: camelize ( $id ), sprintf ( 'Container::camelize("%s")' , $id ));
}
public function dataForTestCamelize ()
{
return array (
array ( 'foo_bar' , 'FooBar' ),
array ( 'foo.bar' , 'Foo_Bar' ),
array ( 'foo.bar_baz' , 'Foo_BarBaz' ),
array ( 'foo._bar' , 'Foo_Bar' ),
array ( 'foo_.bar' , 'Foo_Bar' ),
array ( '_foo' , 'Foo' ),
array ( '.foo' , '_Foo' ),
array ( 'foo_' , 'Foo' ),
array ( 'foo.' , 'Foo_' ),
2013-11-25 14:21:26 +00:00
array ( 'foo\bar' , 'Foo_Bar' ),
2013-07-21 10:38:59 +01:00
);
}
2014-08-25 13:14:37 +01:00
/**
* @ dataProvider dataForTestUnderscore
*/
public function testUnderscore ( $id , $expected )
{
$this -> assertEquals ( $expected , Container :: underscore ( $id ), sprintf ( 'Container::underscore("%s")' , $id ));
}
public function dataForTestUnderscore ()
{
return array (
array ( 'FooBar' , 'foo_bar' ),
array ( 'Foo_Bar' , 'foo.bar' ),
array ( 'Foo_BarBaz' , 'foo.bar_baz' ),
array ( 'FooBar_BazQux' , 'foo_bar.baz_qux' ),
array ( '_Foo' , '.foo' ),
array ( 'Foo_' , 'foo.' ),
);
}
2011-02-19 18:30:12 +00:00
public function testCompile ()
2010-05-06 12:25:53 +01:00
{
2010-06-27 17:28:29 +01:00
$sc = new Container ( new ParameterBag ( array ( 'foo' => 'bar' )));
2014-08-25 13:14:37 +01:00
$this -> assertFalse ( $sc -> getParameterBag () -> isResolved (), '->compile() resolves the parameter bag' );
2011-01-16 07:12:36 +00:00
$sc -> compile ();
2014-08-25 13:14:37 +01:00
$this -> assertTrue ( $sc -> getParameterBag () -> isResolved (), '->compile() resolves the parameter bag' );
2011-01-16 07:12:36 +00:00
$this -> assertInstanceOf ( 'Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag' , $sc -> getParameterBag (), '->compile() changes the parameter bag to a FrozenParameterBag instance' );
$this -> assertEquals ( array ( 'foo' => 'bar' ), $sc -> getParameterBag () -> all (), '->compile() copies the current parameters to the new parameter bag' );
2010-06-27 17:28:29 +01:00
}
2010-03-18 07:48:03 +00:00
2016-08-19 13:18:08 +01:00
public function testIsCompiled ()
{
$sc = new Container ( new ParameterBag ( array ( 'foo' => 'bar' )));
$this -> assertFalse ( $sc -> isCompiled (), '->isCompiled() returns false if the container is not compiled' );
$sc -> compile ();
$this -> assertTrue ( $sc -> isCompiled (), '->isCompiled() returns true if the container is compiled' );
}
public function testIsCompiledWithFrozenParameters ()
{
$sc = new Container ( new FrozenParameterBag ( array ( 'foo' => 'bar' )));
$this -> assertFalse ( $sc -> isCompiled (), '->isCompiled() returns false if the container is not compiled but the parameter bag is already frozen' );
}
2010-06-27 17:28:29 +01:00
public function testGetParameterBag ()
{
$sc = new Container ();
$this -> assertEquals ( array (), $sc -> getParameterBag () -> all (), '->getParameterBag() returns an empty array if no parameter has been defined' );
2010-03-18 07:48:03 +00:00
}
2010-05-06 12:25:53 +01:00
public function testGetSetParameter ()
2010-03-18 07:48:03 +00:00
{
2010-06-27 17:28:29 +01:00
$sc = new Container ( new ParameterBag ( array ( 'foo' => 'bar' )));
2010-05-06 12:25:53 +01:00
$sc -> setParameter ( 'bar' , 'foo' );
$this -> assertEquals ( 'foo' , $sc -> getParameter ( 'bar' ), '->setParameter() sets the value of a new parameter' );
$sc -> setParameter ( 'foo' , 'baz' );
$this -> assertEquals ( 'baz' , $sc -> getParameter ( 'foo' ), '->setParameter() overrides previously set parameter' );
$sc -> setParameter ( 'Foo' , 'baz1' );
$this -> assertEquals ( 'baz1' , $sc -> getParameter ( 'foo' ), '->setParameter() converts the key to lowercase' );
$this -> assertEquals ( 'baz1' , $sc -> getParameter ( 'FOO' ), '->getParameter() converts the key to lowercase' );
2010-05-07 15:09:11 +01:00
try {
2010-05-06 12:25:53 +01:00
$sc -> getParameter ( 'baba' );
$this -> fail ( '->getParameter() thrown an \InvalidArgumentException if the key does not exist' );
2010-05-07 15:09:11 +01:00
} catch ( \Exception $e ) {
2010-05-06 12:25:53 +01:00
$this -> assertInstanceOf ( '\InvalidArgumentException' , $e , '->getParameter() thrown an \InvalidArgumentException if the key does not exist' );
2011-04-26 11:31:40 +01:00
$this -> assertEquals ( 'You have requested a non-existent parameter "baba".' , $e -> getMessage (), '->getParameter() thrown an \InvalidArgumentException if the key does not exist' );
2010-05-06 12:25:53 +01:00
}
2010-03-18 07:48:03 +00:00
}
2010-05-06 12:25:53 +01:00
2010-06-27 17:28:29 +01:00
public function testGetServiceIds ()
2010-03-18 07:48:03 +00:00
{
2010-06-27 17:28:29 +01:00
$sc = new Container ();
$sc -> set ( 'foo' , $obj = new \stdClass ());
$sc -> set ( 'bar' , $obj = new \stdClass ());
$this -> assertEquals ( array ( 'service_container' , 'foo' , 'bar' ), $sc -> getServiceIds (), '->getServiceIds() returns all defined service ids' );
2010-05-06 12:25:53 +01:00
2010-06-27 17:28:29 +01:00
$sc = new ProjectServiceContainer ();
2014-08-25 13:14:37 +01:00
$sc -> set ( 'foo' , $obj = new \stdClass ());
2017-05-20 15:32:28 +01:00
$this -> assertEquals ( array ( 'service_container' , 'internal' , 'bar' , 'foo_bar' , 'foo.baz' , 'circular' , 'throw_exception' , 'throws_exception_on_service_configuration' , 'internal_dependency' , 'foo' ), $sc -> getServiceIds (), '->getServiceIds() returns defined service ids by factory methods in the method map, followed by service ids defined by set()' );
2016-09-30 22:26:24 +01:00
}
2010-06-27 17:28:29 +01:00
public function testSet ()
2010-03-18 07:48:03 +00:00
{
2010-05-06 12:25:53 +01:00
$sc = new Container ();
2010-06-27 17:28:29 +01:00
$sc -> set ( 'foo' , $foo = new \stdClass ());
2017-01-10 11:14:08 +00:00
$this -> assertSame ( $foo , $sc -> get ( 'foo' ), '->set() sets a service' );
2010-06-27 17:28:29 +01:00
}
2010-05-06 12:25:53 +01:00
2013-07-25 16:13:34 +01:00
public function testSetWithNullResetTheService ()
{
$sc = new Container ();
$sc -> set ( 'foo' , null );
2014-08-25 13:14:37 +01:00
$this -> assertFalse ( $sc -> has ( 'foo' ), '->set() with null service resets the service' );
2013-07-25 16:13:34 +01:00
}
2016-02-09 19:58:01 +00:00
public function testSetReplacesAlias ()
{
$c = new ProjectServiceContainer ();
$c -> set ( 'alias' , $foo = new \stdClass ());
$this -> assertSame ( $foo , $c -> get ( 'alias' ), '->set() replaces an existing alias' );
}
2017-01-14 09:13:01 +00:00
/**
* @ group legacy
* @ expectedDeprecation Unsetting the " bar " pre - defined service is deprecated since Symfony 3.3 and won ' t be supported anymore in Symfony 4.0 .
*/
public function testSetWithNullResetPredefinedService ()
{
$sc = new Container ();
$sc -> set ( 'foo' , new \stdClass ());
$sc -> set ( 'foo' , null );
$this -> assertFalse ( $sc -> has ( 'foo' ), '->set() with null service resets the service' );
$sc = new ProjectServiceContainer ();
$sc -> set ( 'bar' , null );
$this -> assertTrue ( $sc -> has ( 'bar' ), '->set() with null service resets the pre-defined service' );
}
2010-06-27 17:28:29 +01:00
public function testGet ()
{
2010-05-06 12:25:53 +01:00
$sc = new ProjectServiceContainer ();
2010-06-27 17:28:29 +01:00
$sc -> set ( 'foo' , $foo = new \stdClass ());
2017-01-10 14:14:38 +00:00
$this -> assertSame ( $foo , $sc -> get ( 'foo' ), '->get() returns the service for the given id' );
$this -> assertSame ( $sc -> __bar , $sc -> get ( 'bar' ), '->get() returns the service for the given id' );
$this -> assertSame ( $sc -> __foo_bar , $sc -> get ( 'foo_bar' ), '->get() returns the service if a get*Method() is defined' );
$this -> assertSame ( $sc -> __foo_baz , $sc -> get ( 'foo.baz' ), '->get() returns the service if a get*Method() is defined' );
2010-05-06 12:25:53 +01:00
2010-05-07 15:09:11 +01:00
try {
2010-06-27 17:28:29 +01:00
$sc -> get ( '' );
$this -> fail ( '->get() throws a \InvalidArgumentException exception if the service is empty' );
2010-05-07 15:09:11 +01:00
} catch ( \Exception $e ) {
2011-05-17 15:26:08 +01:00
$this -> assertInstanceOf ( 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' , $e , '->get() throws a ServiceNotFoundException exception if the service is empty' );
2010-05-06 12:25:53 +01:00
}
2014-08-25 13:14:37 +01:00
$this -> assertNull ( $sc -> get ( '' , ContainerInterface :: NULL_ON_INVALID_REFERENCE ), '->get() returns null if the service is empty' );
2010-03-18 07:48:03 +00:00
}
2017-05-20 21:54:17 +01:00
public function testCaseSensitivity ()
2017-01-10 07:04:52 +00:00
{
2017-05-20 21:54:17 +01:00
$sc = new Container ();
$sc -> set ( 'foo' , $foo1 = new \stdClass ());
$sc -> set ( 'Foo' , $foo2 = new \stdClass ());
2017-01-10 07:04:52 +00:00
2017-05-20 21:54:17 +01:00
$this -> assertSame ( array ( 'service_container' , 'foo' , 'Foo' ), $sc -> getServiceIds ());
$this -> assertSame ( $foo1 , $sc -> get ( 'foo' ), '->get() returns the service for the given id, case sensitively' );
$this -> assertSame ( $foo2 , $sc -> get ( 'Foo' ), '->get() returns the service for the given id, case sensitively' );
2017-01-10 07:04:52 +00:00
}
2013-04-30 18:55:25 +01:00
public function testGetThrowServiceNotFoundException ()
{
$sc = new ProjectServiceContainer ();
$sc -> set ( 'foo' , $foo = new \stdClass ());
$sc -> set ( 'baz' , $foo = new \stdClass ());
try {
$sc -> get ( 'foo1' );
$this -> fail ( '->get() throws an Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException if the key does not exist' );
} catch ( \Exception $e ) {
$this -> assertInstanceOf ( 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' , $e , '->get() throws an Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException if the key does not exist' );
2013-05-01 05:24:56 +01:00
$this -> assertEquals ( 'You have requested a non-existent service "foo1". Did you mean this: "foo"?' , $e -> getMessage (), '->get() throws an Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException with some advices' );
2013-04-30 18:55:25 +01:00
}
try {
$sc -> get ( 'bag' );
$this -> fail ( '->get() throws an Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException if the key does not exist' );
} catch ( \Exception $e ) {
$this -> assertInstanceOf ( 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' , $e , '->get() throws an Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException if the key does not exist' );
2013-05-01 05:24:56 +01:00
$this -> assertEquals ( 'You have requested a non-existent service "bag". Did you mean one of these: "bar", "baz"?' , $e -> getMessage (), '->get() throws an Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException with some advices' );
2013-04-30 18:55:25 +01:00
}
}
2011-02-19 18:30:12 +00:00
public function testGetCircularReference ()
{
$sc = new ProjectServiceContainer ();
try {
$sc -> get ( 'circular' );
2011-05-25 08:46:30 +01:00
$this -> fail ( '->get() throws a ServiceCircularReferenceException if it contains circular reference' );
2011-02-19 18:30:12 +00:00
} catch ( \Exception $e ) {
2011-05-25 08:46:30 +01:00
$this -> assertInstanceOf ( '\Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException' , $e , '->get() throws a ServiceCircularReferenceException if it contains circular reference' );
2011-02-19 18:30:12 +00:00
$this -> assertStringStartsWith ( 'Circular reference detected for service "circular"' , $e -> getMessage (), '->get() throws a \LogicException if it contains circular reference' );
}
}
2016-09-05 08:18:51 +01:00
/**
2017-01-12 12:28:30 +00:00
* @ expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
* @ expectedExceptionMessage You have requested a non - existent service " request " .
2016-09-05 08:18:51 +01:00
*/
2017-01-12 12:28:30 +00:00
public function testGetSyntheticServiceThrows ()
2016-09-05 08:18:51 +01:00
{
require_once __DIR__ . '/Fixtures/php/services9.php' ;
$container = new \ProjectServiceContainer ();
2017-01-12 12:28:30 +00:00
$container -> get ( 'request' );
2016-09-05 08:18:51 +01:00
}
2010-06-27 17:28:29 +01:00
public function testHas ()
2010-03-18 07:48:03 +00:00
{
2010-06-27 17:28:29 +01:00
$sc = new ProjectServiceContainer ();
$sc -> set ( 'foo' , new \stdClass ());
$this -> assertFalse ( $sc -> has ( 'foo1' ), '->has() returns false if the service does not exist' );
$this -> assertTrue ( $sc -> has ( 'foo' ), '->has() returns true if the service exists' );
$this -> assertTrue ( $sc -> has ( 'bar' ), '->has() returns true if a get*Method() is defined' );
$this -> assertTrue ( $sc -> has ( 'foo_bar' ), '->has() returns true if a get*Method() is defined' );
$this -> assertTrue ( $sc -> has ( 'foo.baz' ), '->has() returns true if a get*Method() is defined' );
2016-09-30 22:26:24 +01:00
}
2012-04-18 18:26:58 +01:00
public function testInitialized ()
{
$sc = new ProjectServiceContainer ();
$sc -> set ( 'foo' , new \stdClass ());
$this -> assertTrue ( $sc -> initialized ( 'foo' ), '->initialized() returns true if service is loaded' );
$this -> assertFalse ( $sc -> initialized ( 'foo1' ), '->initialized() returns false if service is not loaded' );
$this -> assertFalse ( $sc -> initialized ( 'bar' ), '->initialized() returns false if a service is defined, but not currently loaded' );
2014-11-25 09:00:53 +00:00
$this -> assertFalse ( $sc -> initialized ( 'alias' ), '->initialized() returns false if an aliased service is not initialized' );
2017-01-14 09:13:01 +00:00
$sc -> get ( 'bar' );
2014-11-25 09:00:53 +00:00
$this -> assertTrue ( $sc -> initialized ( 'alias' ), '->initialized() returns true for alias if aliased service is initialized' );
2012-04-18 18:26:58 +01:00
}
2017-05-20 15:32:28 +01:00
/**
* @ group legacy
* @ expectedDeprecation Checking for the initialization of the " internal " private service is deprecated since Symfony 3.4 and won ' t be supported anymore in Symfony 4.0 .
*/
public function testInitializedWithPrivateService ()
{
$sc = new ProjectServiceContainer ();
$sc -> get ( 'internal_dependency' );
$this -> assertTrue ( $sc -> initialized ( 'internal' ));
}
2015-07-02 23:05:34 +01:00
public function testReset ()
{
$c = new Container ();
$c -> set ( 'bar' , new \stdClass ());
$c -> reset ();
$this -> assertNull ( $c -> get ( 'bar' , ContainerInterface :: NULL_ON_INVALID_REFERENCE ));
}
2014-08-25 13:14:37 +01:00
/**
2015-09-08 23:15:02 +01:00
* @ expectedException \Exception
2014-08-25 13:14:37 +01:00
* @ expectedExceptionMessage Something went terribly wrong !
*/
2011-03-09 14:38:02 +00:00
public function testGetThrowsException ()
{
$c = new ProjectServiceContainer ();
try {
$c -> get ( 'throw_exception' );
} catch ( \Exception $e ) {
2014-08-25 13:14:37 +01:00
// Do nothing.
2011-03-09 14:38:02 +00:00
}
2014-08-25 13:14:37 +01:00
// Retry, to make sure that get*Service() will be called.
$c -> get ( 'throw_exception' );
2011-03-09 14:38:02 +00:00
}
2012-10-07 19:46:50 +01:00
public function testGetThrowsExceptionOnServiceConfiguration ()
{
$c = new ProjectServiceContainer ();
try {
$c -> get ( 'throws_exception_on_service_configuration' );
} catch ( \Exception $e ) {
2014-08-25 13:14:37 +01:00
// Do nothing.
2012-10-07 19:46:50 +01:00
}
2014-08-25 13:14:37 +01:00
2012-10-11 17:31:20 +01:00
$this -> assertFalse ( $c -> initialized ( 'throws_exception_on_service_configuration' ));
2012-10-07 19:46:50 +01:00
2014-08-25 13:14:37 +01:00
// Retry, to make sure that get*Service() will be called.
2012-10-07 19:46:50 +01:00
try {
$c -> get ( 'throws_exception_on_service_configuration' );
} catch ( \Exception $e ) {
2014-08-25 13:14:37 +01:00
// Do nothing.
2012-10-07 19:46:50 +01:00
}
2012-10-11 17:31:20 +01:00
$this -> assertFalse ( $c -> initialized ( 'throws_exception_on_service_configuration' ));
2012-10-07 19:46:50 +01:00
}
2011-01-17 22:28:59 +00:00
protected function getField ( $obj , $field )
{
$reflection = new \ReflectionProperty ( $obj , $field );
$reflection -> setAccessible ( true );
return $reflection -> getValue ( $obj );
}
2013-06-12 11:05:49 +01:00
public function testAlias ()
{
$c = new ProjectServiceContainer ();
$this -> assertTrue ( $c -> has ( 'alias' ));
$this -> assertSame ( $c -> get ( 'alias' ), $c -> get ( 'bar' ));
}
2015-07-16 09:25:41 +01:00
public function testThatCloningIsNotSupported ()
{
$class = new \ReflectionClass ( 'Symfony\Component\DependencyInjection\Container' );
$clone = $class -> getMethod ( '__clone' );
2015-08-01 08:16:55 +01:00
$this -> assertFalse ( $class -> isCloneable ());
2015-07-16 09:25:41 +01:00
$this -> assertTrue ( $clone -> isPrivate ());
}
2016-06-22 21:01:50 +01:00
2016-07-01 17:06:07 +01:00
/**
* @ group legacy
2016-10-20 14:28:37 +01:00
* @ expectedDeprecation Unsetting the " internal " private service is deprecated since Symfony 3.2 and won ' t be supported anymore in Symfony 4.0 .
2016-07-01 17:06:07 +01:00
*/
2016-06-22 21:01:50 +01:00
public function testUnsetInternalPrivateServiceIsDeprecated ()
{
2016-10-20 14:28:37 +01:00
$c = new ProjectServiceContainer ();
$c -> set ( 'internal' , null );
2016-06-22 21:01:50 +01:00
}
2016-07-01 17:06:07 +01:00
/**
* @ group legacy
2017-01-14 09:13:01 +00:00
* @ expectedDeprecation Setting the " internal " private service is deprecated since Symfony 3.2 and won ' t be supported anymore in Symfony 4.0 .
2016-07-01 17:06:07 +01:00
*/
2016-06-22 21:01:50 +01:00
public function testChangeInternalPrivateServiceIsDeprecated ()
{
2016-10-20 14:28:37 +01:00
$c = new ProjectServiceContainer ();
2017-05-23 08:27:52 +01:00
$c -> set ( 'internal' , $internal = new \stdClass ());
$this -> assertSame ( $c -> get ( 'internal' ), $internal );
2016-06-22 21:01:50 +01:00
}
2016-07-01 17:06:07 +01:00
/**
* @ group legacy
2016-10-20 14:28:37 +01:00
* @ expectedDeprecation Checking for the existence of the " internal " private service is deprecated since Symfony 3.2 and won ' t be supported anymore in Symfony 4.0 .
2016-07-01 17:06:07 +01:00
*/
2016-06-22 21:01:50 +01:00
public function testCheckExistenceOfAnInternalPrivateServiceIsDeprecated ()
{
2016-10-20 14:28:37 +01:00
$c = new ProjectServiceContainer ();
2017-05-23 08:27:52 +01:00
$c -> get ( 'internal_dependency' );
$this -> assertTrue ( $c -> has ( 'internal' ));
2016-06-22 21:01:50 +01:00
}
2016-07-01 17:06:07 +01:00
/**
* @ group legacy
2016-10-20 14:28:37 +01:00
* @ expectedDeprecation Requesting the " internal " private service is deprecated since Symfony 3.2 and won ' t be supported anymore in Symfony 4.0 .
2016-07-01 17:06:07 +01:00
*/
2016-06-22 21:01:50 +01:00
public function testRequestAnInternalSharedPrivateServiceIsDeprecated ()
{
2016-10-20 14:28:37 +01:00
$c = new ProjectServiceContainer ();
2017-05-23 08:27:52 +01:00
$c -> get ( 'internal_dependency' );
2016-10-20 14:28:37 +01:00
$c -> get ( 'internal' );
2016-06-22 21:01:50 +01:00
}
2017-01-14 09:13:01 +00:00
/**
* @ group legacy
* @ expectedDeprecation Setting the " bar " pre - defined service is deprecated since Symfony 3.3 and won ' t be supported anymore in Symfony 4.0 .
*/
public function testReplacingAPreDefinedServiceIsDeprecated ()
{
$c = new ProjectServiceContainer ();
$c -> set ( 'bar' , new \stdClass ());
$c -> set ( 'bar' , $bar = new \stdClass ());
$this -> assertSame ( $bar , $c -> get ( 'bar' ), '->set() replaces a pre-defined service' );
}
2010-05-06 12:25:53 +01:00
}
2010-03-18 07:48:03 +00:00
2010-05-06 12:25:53 +01:00
class ProjectServiceContainer extends Container
2016-09-30 22:26:24 +01:00
{
public $__bar ;
public $__foo_bar ;
public $__foo_baz ;
public $__internal ;
protected $methodMap = array (
'internal' => 'getInternalService' ,
'bar' => 'getBarService' ,
'foo_bar' => 'getFooBarService' ,
'foo.baz' => 'getFoo_BazService' ,
'circular' => 'getCircularService' ,
'throw_exception' => 'getThrowExceptionService' ,
'throws_exception_on_service_configuration' => 'getThrowsExceptionOnServiceConfigurationService' ,
2017-05-20 15:32:28 +01:00
'internal_dependency' => 'getInternalDependencyService' ,
2016-09-30 22:26:24 +01:00
);
public function __construct ()
{
parent :: __construct ();
$this -> __bar = new \stdClass ();
$this -> __foo_bar = new \stdClass ();
$this -> __foo_baz = new \stdClass ();
$this -> __internal = new \stdClass ();
$this -> privates = array ( 'internal' => true );
$this -> aliases = array ( 'alias' => 'bar' );
}
protected function getInternalService ()
{
2017-05-20 15:32:28 +01:00
return $this -> services [ 'internal' ] = $this -> __internal ;
2016-09-30 22:26:24 +01:00
}
protected function getBarService ()
{
2017-01-14 09:13:01 +00:00
return $this -> services [ 'bar' ] = $this -> __bar ;
2016-09-30 22:26:24 +01:00
}
protected function getFooBarService ()
{
return $this -> __foo_bar ;
}
protected function getFoo_BazService ()
{
return $this -> __foo_baz ;
}
protected function getCircularService ()
{
return $this -> get ( 'circular' );
}
protected function getThrowExceptionService ()
{
throw new \Exception ( 'Something went terribly wrong!' );
}
protected function getThrowsExceptionOnServiceConfigurationService ()
{
$this -> services [ 'throws_exception_on_service_configuration' ] = $instance = new \stdClass ();
throw new \Exception ( 'Something was terribly wrong while trying to configure the service!' );
}
2017-05-20 15:32:28 +01:00
protected function getInternalDependencyService ()
{
$this -> services [ 'internal_dependency' ] = $instance = new \stdClass ();
$instance -> internal = isset ( $this -> services [ 'internal' ]) ? $this -> services [ 'internal' ] : $this -> getInternalService ();
return $instance ;
}
2016-09-30 22:26:24 +01:00
}