2010-06-07 08:08:35 +01:00
< ? php
/*
* This file is part of the Symfony package .
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-06-07 08:08:35 +01:00
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2010-07-09 09:05:26 +01:00
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection ;
2010-06-07 08:08:35 +01:00
2017-01-07 16:09:07 +00:00
use Doctrine\Common\Annotations\Annotation ;
2017-02-07 16:17:32 +00:00
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass ;
2010-09-20 20:01:41 +01:00
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension ;
2018-07-26 10:03:18 +01:00
use Symfony\Bundle\FrameworkBundle\Tests\TestCase ;
2018-07-26 10:06:28 +01:00
use Symfony\Bundle\FullStack ;
2017-03-08 19:24:49 +00:00
use Symfony\Component\Cache\Adapter\AdapterInterface ;
2016-02-20 23:25:19 +00:00
use Symfony\Component\Cache\Adapter\ApcuAdapter ;
2017-03-08 19:24:49 +00:00
use Symfony\Component\Cache\Adapter\ArrayAdapter ;
2016-05-05 16:37:21 +01:00
use Symfony\Component\Cache\Adapter\ChainAdapter ;
2016-02-20 23:25:19 +00:00
use Symfony\Component\Cache\Adapter\DoctrineAdapter ;
use Symfony\Component\Cache\Adapter\FilesystemAdapter ;
2016-04-28 17:07:16 +01:00
use Symfony\Component\Cache\Adapter\ProxyAdapter ;
use Symfony\Component\Cache\Adapter\RedisAdapter ;
2016-11-28 07:50:06 +00:00
use Symfony\Component\DependencyInjection\ChildDefinition ;
2018-02-08 09:42:56 +00:00
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\DependencyInjection\ContainerBuilder ;
2018-04-02 09:22:38 +01:00
use Symfony\Component\DependencyInjection\ContainerInterface ;
2017-03-08 00:16:09 +00:00
use Symfony\Component\DependencyInjection\Definition ;
2015-01-17 07:35:04 +00:00
use Symfony\Component\DependencyInjection\Loader\ClosureLoader ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag ;
2014-03-18 16:36:12 +00:00
use Symfony\Component\DependencyInjection\Reference ;
2017-03-30 09:29:34 +01:00
use Symfony\Component\EventDispatcher\EventDispatcherInterface ;
2017-03-08 19:24:49 +00:00
use Symfony\Component\PropertyAccess\PropertyAccessor ;
2017-03-08 00:16:09 +00:00
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader ;
2016-08-02 10:38:04 +01:00
use Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader ;
use Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader ;
2016-01-31 20:58:26 +00:00
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer ;
2018-07-26 10:06:28 +01:00
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer ;
2016-01-31 20:54:05 +00:00
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer ;
2016-01-29 15:26:46 +00:00
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer ;
2018-07-26 10:06:28 +01:00
use Symfony\Component\Serializer\Serializer ;
2017-05-05 11:35:04 +01:00
use Symfony\Component\Translation\DependencyInjection\TranslatorPass ;
2017-02-22 23:37:05 +00:00
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass ;
2017-09-03 11:36:19 +01:00
use Symfony\Component\Workflow\Registry ;
2010-06-07 08:08:35 +01:00
2011-01-24 19:50:31 +00:00
abstract class FrameworkExtensionTest extends TestCase
2010-06-07 08:08:35 +01:00
{
2016-01-16 12:37:00 +00:00
private static $containerCache = array ();
2011-01-24 19:50:31 +00:00
abstract protected function loadFromFile ( ContainerBuilder $container , $file );
2015-11-10 23:41:32 +00:00
public function testFormCsrfProtection ()
2011-01-24 19:50:31 +00:00
{
$container = $this -> createContainerFromFile ( 'full' );
2011-04-28 10:28:44 +01:00
$def = $container -> getDefinition ( 'form.type_extension.csrf' );
2011-05-13 10:57:05 +01:00
$this -> assertTrue ( $container -> getParameter ( 'form.type_extension.csrf.enabled' ));
2012-04-13 13:11:09 +01:00
$this -> assertEquals ( '%form.type_extension.csrf.enabled%' , $def -> getArgument ( 1 ));
2011-05-13 10:57:05 +01:00
$this -> assertEquals ( '_csrf' , $container -> getParameter ( 'form.type_extension.csrf.field_name' ));
2012-04-13 13:11:09 +01:00
$this -> assertEquals ( '%form.type_extension.csrf.field_name%' , $def -> getArgument ( 2 ));
2011-01-24 19:50:31 +00:00
}
2014-08-21 18:05:54 +01:00
public function testPropertyAccessWithDefaultValue ()
{
$container = $this -> createContainerFromFile ( 'full' );
$def = $container -> getDefinition ( 'property_accessor' );
2014-09-20 01:33:54 +01:00
$this -> assertFalse ( $def -> getArgument ( 0 ));
$this -> assertFalse ( $def -> getArgument ( 1 ));
2014-08-21 18:05:54 +01:00
}
public function testPropertyAccessWithOverriddenValues ()
{
$container = $this -> createContainerFromFile ( 'property_accessor' );
$def = $container -> getDefinition ( 'property_accessor' );
2014-09-20 01:33:54 +01:00
$this -> assertTrue ( $def -> getArgument ( 0 ));
$this -> assertTrue ( $def -> getArgument ( 1 ));
2014-08-21 18:05:54 +01:00
}
2017-03-08 19:24:49 +00:00
public function testPropertyAccessCache ()
{
$container = $this -> createContainerFromFile ( 'property_accessor' );
if ( ! method_exists ( PropertyAccessor :: class , 'createCache' )) {
return $this -> assertFalse ( $container -> hasDefinition ( 'cache.property_access' ));
}
$cache = $container -> getDefinition ( 'cache.property_access' );
$this -> assertSame ( array ( PropertyAccessor :: class , 'createCache' ), $cache -> getFactory (), 'PropertyAccessor::createCache() should be used in non-debug mode' );
$this -> assertSame ( AdapterInterface :: class , $cache -> getClass ());
}
public function testPropertyAccessCacheWithDebug ()
{
$container = $this -> createContainerFromFile ( 'property_accessor' , array ( 'kernel.debug' => true ));
if ( ! method_exists ( PropertyAccessor :: class , 'createCache' )) {
return $this -> assertFalse ( $container -> hasDefinition ( 'cache.property_access' ));
}
$cache = $container -> getDefinition ( 'cache.property_access' );
$this -> assertNull ( $cache -> getFactory ());
$this -> assertSame ( ArrayAdapter :: class , $cache -> getClass (), 'ArrayAdapter should be used in debug mode' );
}
2013-10-09 09:42:58 +01:00
/**
* @ expectedException \LogicException
* @ expectedExceptionMessage CSRF protection needs sessions to be enabled .
*/
public function testCsrfProtectionNeedsSessionToBeEnabled ()
{
$this -> createContainerFromFile ( 'csrf_needs_session' );
}
2013-11-30 10:58:54 +00:00
public function testCsrfProtectionForFormsEnablesCsrfProtectionAutomatically ()
2013-10-09 09:42:58 +01:00
{
2013-11-30 10:58:54 +00:00
$container = $this -> createContainerFromFile ( 'csrf' );
$this -> assertTrue ( $container -> hasDefinition ( 'security.csrf.token_manager' ));
2013-10-09 09:42:58 +01:00
}
2013-02-27 13:12:14 +00:00
public function testHttpMethodOverride ()
{
$container = $this -> createContainerFromFile ( 'full' );
$this -> assertFalse ( $container -> getParameter ( 'kernel.http_method_override' ));
}
2011-01-24 19:50:31 +00:00
public function testEsi ()
{
$container = $this -> createContainerFromFile ( 'full' );
$this -> assertTrue ( $container -> hasDefinition ( 'esi' ), '->registerEsiConfiguration() loads esi.xml' );
2017-06-22 20:48:55 +01:00
$this -> assertTrue ( $container -> hasDefinition ( 'fragment.renderer.esi' ), 'The ESI fragment renderer is registered' );
}
public function testEsiDisabled ()
{
$container = $this -> createContainerFromFile ( 'esi_disabled' );
$this -> assertFalse ( $container -> hasDefinition ( 'fragment.renderer.esi' ), 'The ESI fragment renderer is not registered' );
2017-12-13 19:39:50 +00:00
$this -> assertFalse ( $container -> hasDefinition ( 'esi' ));
2011-01-24 19:50:31 +00:00
}
2017-06-22 20:48:55 +01:00
public function testSsi ()
{
$container = $this -> createContainerFromFile ( 'full' );
$this -> assertTrue ( $container -> hasDefinition ( 'ssi' ), '->registerSsiConfiguration() loads ssi.xml' );
2017-06-22 20:48:55 +01:00
$this -> assertTrue ( $container -> hasDefinition ( 'fragment.renderer.ssi' ), 'The SSI fragment renderer is registered' );
}
public function testSsiDisabled ()
{
$container = $this -> createContainerFromFile ( 'ssi_disabled' );
$this -> assertFalse ( $container -> hasDefinition ( 'fragment.renderer.ssi' ), 'The SSI fragment renderer is not registered' );
2017-12-15 09:06:19 +00:00
$this -> assertFalse ( $container -> hasDefinition ( 'ssi' ));
2017-06-22 20:48:55 +01:00
}
public function testEsiAndSsiWithoutFragments ()
{
$container = $this -> createContainerFromFile ( 'esi_and_ssi_without_fragments' );
$this -> assertFalse ( $container -> hasDefinition ( 'fragment.renderer.hinclude' ), 'The HInclude fragment renderer is not registered' );
$this -> assertTrue ( $container -> hasDefinition ( 'fragment.renderer.esi' ), 'The ESI fragment renderer is registered' );
$this -> assertTrue ( $container -> hasDefinition ( 'fragment.renderer.ssi' ), 'The SSI fragment renderer is registered' );
2017-06-22 20:48:55 +01:00
}
2013-04-26 14:53:58 +01:00
public function testEnabledProfiler ()
2011-01-24 19:50:31 +00:00
{
2013-04-26 14:53:58 +01:00
$container = $this -> createContainerFromFile ( 'profiler' );
2011-01-24 19:50:31 +00:00
$this -> assertTrue ( $container -> hasDefinition ( 'profiler' ), '->registerProfilerConfiguration() loads profiling.xml' );
$this -> assertTrue ( $container -> hasDefinition ( 'data_collector.config' ), '->registerProfilerConfiguration() loads collectors.xml' );
2013-02-14 15:42:17 +00:00
}
public function testDisabledProfiler ()
{
2013-04-26 14:53:58 +01:00
$container = $this -> createContainerFromFile ( 'full' );
2012-07-13 14:40:24 +01:00
2013-02-14 15:42:17 +00:00
$this -> assertFalse ( $container -> hasDefinition ( 'profiler' ), '->registerProfilerConfiguration() does not load profiling.xml' );
$this -> assertFalse ( $container -> hasDefinition ( 'data_collector.config' ), '->registerProfilerConfiguration() does not load collectors.xml' );
2011-01-24 19:50:31 +00:00
}
2016-11-10 17:52:15 +00:00
public function testWorkflows ()
2016-03-25 15:43:30 +00:00
{
2016-11-10 17:52:15 +00:00
$container = $this -> createContainerFromFile ( 'workflows' );
2018-07-16 13:56:07 +01:00
$this -> assertTrue ( $container -> hasDefinition ( 'workflow.article' ), 'Workflow is registered as a service' );
$this -> assertTrue ( $container -> hasDefinition ( 'workflow.article.definition' ), 'Workflow definition is registered as a service' );
2016-11-10 17:52:15 +00:00
$workflowDefinition = $container -> getDefinition ( 'workflow.article.definition' );
$this -> assertSame (
array (
'draft' ,
'wait_for_journalist' ,
'approved_by_journalist' ,
'wait_for_spellchecker' ,
'approved_by_spellchecker' ,
'published' ,
),
$workflowDefinition -> getArgument ( 0 ),
'Places are passed to the workflow definition'
);
$this -> assertSame ( array ( 'workflow.definition' => array ( array ( 'name' => 'article' , 'type' => 'workflow' , 'marking_store' => 'multiple_state' ))), $workflowDefinition -> getTags ());
2018-07-16 13:56:07 +01:00
$this -> assertTrue ( $container -> hasDefinition ( 'state_machine.pull_request' ), 'State machine is registered as a service' );
$this -> assertTrue ( $container -> hasDefinition ( 'state_machine.pull_request.definition' ), 'State machine definition is registered as a service' );
2016-11-10 17:52:15 +00:00
$this -> assertCount ( 4 , $workflowDefinition -> getArgument ( 1 ));
$this -> assertSame ( 'draft' , $workflowDefinition -> getArgument ( 2 ));
$stateMachineDefinition = $container -> getDefinition ( 'state_machine.pull_request.definition' );
$this -> assertSame (
array (
'start' ,
'coding' ,
'travis' ,
'review' ,
'merged' ,
'closed' ,
),
$stateMachineDefinition -> getArgument ( 0 ),
'Places are passed to the state machine definition'
);
$this -> assertSame ( array ( 'workflow.definition' => array ( array ( 'name' => 'pull_request' , 'type' => 'state_machine' , 'marking_store' => 'single_state' ))), $stateMachineDefinition -> getTags ());
$this -> assertCount ( 9 , $stateMachineDefinition -> getArgument ( 1 ));
$this -> assertSame ( 'start' , $stateMachineDefinition -> getArgument ( 2 ));
2016-12-05 12:52:39 +00:00
$serviceMarkingStoreWorkflowDefinition = $container -> getDefinition ( 'workflow.service_marking_store_workflow' );
/** @var Reference $markingStoreRef */
$markingStoreRef = $serviceMarkingStoreWorkflowDefinition -> getArgument ( 1 );
$this -> assertInstanceOf ( Reference :: class , $markingStoreRef );
$this -> assertEquals ( 'workflow_service' , ( string ) $markingStoreRef );
2016-12-04 22:08:15 +00:00
$this -> assertTrue ( $container -> hasDefinition ( 'workflow.registry' , 'Workflow registry is registered as a service' ));
$registryDefinition = $container -> getDefinition ( 'workflow.registry' );
2018-07-26 09:45:46 +01:00
$this -> assertGreaterThan ( 0 , \count ( $registryDefinition -> getMethodCalls ()));
2016-03-25 15:43:30 +00:00
}
2017-04-13 10:10:44 +01:00
/**
* @ group legacy
* @ expectedDeprecation The " type " option of the " framework.workflows.missing_type " configuration entry must be defined since Symfony 3.3 . The default value will be " state_machine " in Symfony 4.0 .
*/
public function testDeprecatedWorkflowMissingType ()
{
$container = $this -> createContainerFromFile ( 'workflows_without_type' );
}
2016-11-10 17:55:34 +00:00
/**
* @ expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
* @ expectedExceptionMessage " type " and " service " cannot be used together .
*/
public function testWorkflowCannotHaveBothTypeAndService ()
{
$this -> createContainerFromFile ( 'workflow_with_type_and_service' );
}
2017-01-18 14:08:35 +00:00
/**
* @ expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
* @ expectedExceptionMessage " supports " and " support_strategy " cannot be used together .
*/
public function testWorkflowCannotHaveBothSupportsAndSupportStrategy ()
{
$this -> createContainerFromFile ( 'workflow_with_support_and_support_strategy' );
}
/**
* @ expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
* @ expectedExceptionMessage " supports " or " support_strategy " should be configured .
*/
public function testWorkflowShouldHaveOneOfSupportsAndSupportStrategy ()
{
$this -> createContainerFromFile ( 'workflow_without_support_and_support_strategy' );
}
2016-11-10 17:55:34 +00:00
/**
* @ expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
* @ expectedExceptionMessage " arguments " and " service " cannot be used together .
*/
public function testWorkflowCannotHaveBothArgumentsAndService ()
{
$this -> createContainerFromFile ( 'workflow_with_arguments_and_service' );
}
2016-12-06 19:04:08 +00:00
public function testWorkflowMultipleTransitionsWithSameName ()
{
$container = $this -> createContainerFromFile ( 'workflow_with_multiple_transitions_with_same_name' );
2018-07-16 13:56:07 +01:00
$this -> assertTrue ( $container -> hasDefinition ( 'workflow.article' ), 'Workflow is registered as a service' );
$this -> assertTrue ( $container -> hasDefinition ( 'workflow.article.definition' ), 'Workflow definition is registered as a service' );
2016-12-06 19:04:08 +00:00
$workflowDefinition = $container -> getDefinition ( 'workflow.article.definition' );
$transitions = $workflowDefinition -> getArgument ( 1 );
$this -> assertCount ( 5 , $transitions );
$this -> assertSame ( 'request_review' , $transitions [ 0 ] -> getArgument ( 0 ));
$this -> assertSame ( 'journalist_approval' , $transitions [ 1 ] -> getArgument ( 0 ));
$this -> assertSame ( 'spellchecker_approval' , $transitions [ 2 ] -> getArgument ( 0 ));
$this -> assertSame ( 'publish' , $transitions [ 3 ] -> getArgument ( 0 ));
$this -> assertSame ( 'publish' , $transitions [ 4 ] -> getArgument ( 0 ));
$this -> assertSame ( array ( 'approved_by_journalist' , 'approved_by_spellchecker' ), $transitions [ 3 ] -> getArgument ( 1 ));
$this -> assertSame ( array ( 'draft' ), $transitions [ 4 ] -> getArgument ( 1 ));
}
2017-09-03 11:36:19 +01:00
public function testWorkflowServicesCanBeEnabled ()
{
$container = $this -> createContainerFromFile ( 'workflows_enabled' );
$this -> assertTrue ( $container -> has ( Registry :: class ));
2017-11-18 08:20:00 +00:00
$this -> assertTrue ( $container -> hasDefinition ( 'console.command.workflow_dump' ));
2017-09-03 11:36:19 +01:00
}
2018-04-02 09:22:38 +01:00
public function testEnabledPhpErrorsConfig ()
{
$container = $this -> createContainerFromFile ( 'php_errors_enabled' );
$this -> assertEquals ( new Reference ( 'logger' , ContainerInterface :: NULL_ON_INVALID_REFERENCE ), $container -> getDefinition ( 'debug.debug_handlers_listener' ) -> getArgument ( 1 ));
$this -> assertSame ( - 1 , $container -> getParameter ( 'debug.error_handler.throw_at' ));
}
public function testDisabledPhpErrorsConfig ()
{
$container = $this -> createContainerFromFile ( 'php_errors_disabled' );
$this -> assertNull ( $container -> getDefinition ( 'debug.debug_handlers_listener' ) -> getArgument ( 1 ));
$this -> assertSame ( 0 , $container -> getParameter ( 'debug.error_handler.throw_at' ));
}
2011-01-24 19:50:31 +00:00
public function testRouter ()
{
$container = $this -> createContainerFromFile ( 'full' );
2011-07-18 09:10:04 +01:00
$this -> assertTrue ( $container -> has ( 'router' ), '->registerRouterConfiguration() loads routing.xml' );
$arguments = $container -> findDefinition ( 'router' ) -> getArguments ();
2017-11-17 11:27:24 +00:00
$this -> assertEquals ( $container -> getParameter ( 'kernel.project_dir' ) . '/config/routing.xml' , $container -> getParameter ( 'router.resource' ), '->registerRouterConfiguration() sets routing resource' );
2011-05-13 10:57:05 +01:00
$this -> assertEquals ( '%router.resource%' , $arguments [ 1 ], '->registerRouterConfiguration() sets routing resource' );
2011-04-23 14:27:35 +01:00
$this -> assertEquals ( 'xml' , $arguments [ 2 ][ 'resource_type' ], '->registerRouterConfiguration() sets routing resource type' );
2011-01-24 19:50:31 +00:00
}
/**
2013-01-05 17:52:40 +00:00
* @ expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
2011-01-24 19:50:31 +00:00
*/
public function testRouterRequiresResourceOption ()
2010-06-07 08:08:35 +01:00
{
2011-01-24 19:50:31 +00:00
$container = $this -> createContainer ();
2010-09-20 20:01:41 +01:00
$loader = new FrameworkExtension ();
2011-02-15 04:58:18 +00:00
$loader -> load ( array ( array ( 'router' => true )), $container );
2011-01-24 19:50:31 +00:00
}
public function testSession ()
{
$container = $this -> createContainerFromFile ( 'full' );
$this -> assertTrue ( $container -> hasDefinition ( 'session' ), '->registerSessionConfiguration() loads session.xml' );
2011-10-05 10:09:51 +01:00
$this -> assertEquals ( 'fr' , $container -> getParameter ( 'kernel.default_locale' ));
2012-03-03 09:03:04 +00:00
$this -> assertEquals ( 'session.storage.native' , ( string ) $container -> getAlias ( 'session.storage' ));
$this -> assertEquals ( 'session.handler.native_file' , ( string ) $container -> getAlias ( 'session.handler' ));
2011-03-02 18:51:17 +00:00
2011-04-22 11:35:09 +01:00
$options = $container -> getParameter ( 'session.storage.options' );
2011-01-24 19:50:31 +00:00
$this -> assertEquals ( '_SYMFONY' , $options [ 'name' ]);
2012-02-23 10:53:14 +00:00
$this -> assertEquals ( 86400 , $options [ 'cookie_lifetime' ]);
$this -> assertEquals ( '/' , $options [ 'cookie_path' ]);
$this -> assertEquals ( 'example.com' , $options [ 'cookie_domain' ]);
$this -> assertTrue ( $options [ 'cookie_secure' ]);
2015-07-27 08:36:17 +01:00
$this -> assertFalse ( $options [ 'cookie_httponly' ]);
2015-02-12 15:48:57 +00:00
$this -> assertTrue ( $options [ 'use_cookies' ]);
2012-03-21 03:22:23 +00:00
$this -> assertEquals ( 108 , $options [ 'gc_divisor' ]);
$this -> assertEquals ( 1 , $options [ 'gc_probability' ]);
$this -> assertEquals ( 90000 , $options [ 'gc_maxlifetime' ]);
2012-04-13 09:34:00 +01:00
$this -> assertEquals ( '/path/to/sessions' , $container -> getParameter ( 'session.save_path' ));
2011-01-24 19:50:31 +00:00
}
2013-06-07 23:05:01 +01:00
public function testNullSessionHandler ()
{
$container = $this -> createContainerFromFile ( 'session' );
$this -> assertTrue ( $container -> hasDefinition ( 'session' ), '->registerSessionConfiguration() loads session.xml' );
$this -> assertNull ( $container -> getDefinition ( 'session.storage.native' ) -> getArgument ( 1 ));
$this -> assertNull ( $container -> getDefinition ( 'session.storage.php_bridge' ) -> getArgument ( 0 ));
}
2013-12-25 21:24:54 +00:00
public function testRequest ()
{
$container = $this -> createContainerFromFile ( 'full' );
$this -> assertTrue ( $container -> hasDefinition ( 'request.add_request_formats_listener' ), '->registerRequestConfiguration() loads request.xml' );
$listenerDef = $container -> getDefinition ( 'request.add_request_formats_listener' );
$this -> assertEquals ( array ( 'csv' => array ( 'text/csv' , 'text/plain' ), 'pdf' => array ( 'application/pdf' )), $listenerDef -> getArgument ( 0 ));
}
public function testEmptyRequestFormats ()
{
$container = $this -> createContainerFromFile ( 'request' );
$this -> assertFalse ( $container -> hasDefinition ( 'request.add_request_formats_listener' ), '->registerRequestConfiguration() does not load request.xml when no request formats are defined' );
}
2011-01-24 19:50:31 +00:00
public function testTemplating ()
{
$container = $this -> createContainerFromFile ( 'full' );
2010-06-07 08:08:35 +01:00
2011-01-24 19:50:31 +00:00
$this -> assertTrue ( $container -> hasDefinition ( 'templating.name_parser' ), '->registerTemplatingConfiguration() loads templating.xml' );
2011-05-21 00:08:03 +01:00
2011-01-24 19:50:31 +00:00
$this -> assertEquals ( 'templating.engine.delegating' , ( string ) $container -> getAlias ( 'templating' ), '->registerTemplatingConfiguration() configures delegating loader if multiple engines are provided' );
2011-04-02 16:05:02 +01:00
$this -> assertEquals ( $container -> getDefinition ( 'templating.loader.chain' ), $container -> getDefinition ( 'templating.loader.wrapped' ), '->registerTemplatingConfiguration() configures loader chain if multiple loaders are provided' );
$this -> assertEquals ( $container -> getDefinition ( 'templating.loader' ), $container -> getDefinition ( 'templating.loader.cache' ), '->registerTemplatingConfiguration() configures the loader to use cache' );
2011-05-13 10:57:05 +01:00
$this -> assertEquals ( '%templating.loader.cache.path%' , $container -> getDefinition ( 'templating.loader.cache' ) -> getArgument ( 1 ));
$this -> assertEquals ( '/path/to/cache' , $container -> getParameter ( 'templating.loader.cache.path' ));
2011-02-10 21:05:04 +00:00
$this -> assertEquals ( array ( 'php' , 'twig' ), $container -> getParameter ( 'templating.engines' ), '->registerTemplatingConfiguration() sets a templating.engines parameter' );
2011-06-22 07:27:40 +01:00
$this -> assertEquals ( array ( 'FrameworkBundle:Form' , 'theme1' , 'theme2' ), $container -> getParameter ( 'templating.helper.form.resources' ), '->registerTemplatingConfiguration() registers the theme and adds the base theme' );
2014-08-10 13:44:20 +01:00
$this -> assertEquals ( 'global_hinclude_template' , $container -> getParameter ( 'fragment.renderer.hinclude.global_template' ), '->registerTemplatingConfiguration() registers the global hinclude.js template' );
2011-01-24 19:50:31 +00:00
}
2016-06-20 17:01:23 +01:00
public function testTemplatingCanBeDisabled ()
{
$container = $this -> createContainerFromFile ( 'templating_disabled' );
$this -> assertFalse ( $container -> hasParameter ( 'templating.engines' ), '"templating.engines" container parameter is not registered when templating is disabled.' );
}
2015-02-12 09:20:19 +00:00
public function testAssets ()
2011-09-26 18:19:08 +01:00
{
2015-02-12 09:20:19 +00:00
$container = $this -> createContainerFromFile ( 'assets' );
$packages = $container -> getDefinition ( 'assets.packages' );
2011-09-26 18:19:08 +01:00
2015-02-12 09:20:19 +00:00
// default package
2017-01-10 07:04:52 +00:00
$defaultPackage = $container -> getDefinition (( string ) $packages -> getArgument ( 0 ));
2015-02-12 09:20:19 +00:00
$this -> assertUrlPackage ( $container , $defaultPackage , array ( 'http://cdn.example.com' ), 'SomeVersionScheme' , '%%s?version=%%s' );
2015-01-17 07:35:04 +00:00
2015-02-12 09:20:19 +00:00
// packages
$packages = $packages -> getArgument ( 1 );
2017-03-17 19:10:06 +00:00
$this -> assertCount ( 6 , $packages );
2015-02-12 09:20:19 +00:00
2017-01-10 07:04:52 +00:00
$package = $container -> getDefinition (( string ) $packages [ 'images_path' ]);
2015-02-12 09:20:19 +00:00
$this -> assertPathPackage ( $container , $package , '/foo' , 'SomeVersionScheme' , '%%s?version=%%s' );
2017-01-10 07:04:52 +00:00
$package = $container -> getDefinition (( string ) $packages [ 'images' ]);
2015-02-12 09:20:19 +00:00
$this -> assertUrlPackage ( $container , $package , array ( 'http://images1.example.com' , 'http://images2.example.com' ), '1.0.0' , '%%s?version=%%s' );
2017-01-10 07:04:52 +00:00
$package = $container -> getDefinition (( string ) $packages [ 'foo' ]);
2015-02-12 09:20:19 +00:00
$this -> assertPathPackage ( $container , $package , '' , '1.0.0' , '%%s-%%s' );
2017-01-10 07:04:52 +00:00
$package = $container -> getDefinition (( string ) $packages [ 'bar' ]);
2015-02-12 09:20:19 +00:00
$this -> assertUrlPackage ( $container , $package , array ( 'https://bar2.example.com' ), 'SomeVersionScheme' , '%%s?version=%%s' );
2016-01-25 21:22:29 +00:00
2017-01-10 07:04:52 +00:00
$package = $container -> getDefinition (( string ) $packages [ 'bar_version_strategy' ]);
2016-01-25 21:22:29 +00:00
$this -> assertEquals ( 'assets.custom_version_strategy' , ( string ) $package -> getArgument ( 1 ));
2017-03-17 19:10:06 +00:00
$package = $container -> getDefinition (( string ) $packages [ 'json_manifest_strategy' ]);
$versionStrategy = $container -> getDefinition (( string ) $package -> getArgument ( 1 ));
$this -> assertEquals ( 'assets.json_manifest_version_strategy' , $versionStrategy -> getParent ());
$this -> assertEquals ( '/path/to/manifest.json' , $versionStrategy -> getArgument ( 0 ));
2016-01-25 21:22:29 +00:00
}
public function testAssetsDefaultVersionStrategyAsService ()
{
$container = $this -> createContainerFromFile ( 'assets_version_strategy_as_service' );
$packages = $container -> getDefinition ( 'assets.packages' );
// default package
2017-01-10 07:04:52 +00:00
$defaultPackage = $container -> getDefinition (( string ) $packages -> getArgument ( 0 ));
2016-01-25 21:22:29 +00:00
$this -> assertEquals ( 'assets.custom_version_strategy' , ( string ) $defaultPackage -> getArgument ( 1 ));
2011-09-26 18:19:08 +01:00
}
2017-10-27 13:47:38 +01:00
public function testAssetsCanBeDisabled ()
{
$container = $this -> createContainerFromFile ( 'assets_disabled' );
$this -> assertFalse ( $container -> has ( 'templating.helper.assets' ), 'The templating.helper.assets helper service is removed when assets are disabled.' );
}
2017-04-04 12:58:36 +01:00
public function testWebLink ()
2017-01-31 15:53:28 +00:00
{
2017-04-04 12:58:36 +01:00
$container = $this -> createContainerFromFile ( 'web_link' );
$this -> assertTrue ( $container -> hasDefinition ( 'web_link.add_link_header_listener' ));
2017-01-31 15:53:28 +00:00
}
2011-01-24 19:50:31 +00:00
public function testTranslator ()
{
$container = $this -> createContainerFromFile ( 'full' );
2011-07-19 11:05:51 +01:00
$this -> assertTrue ( $container -> hasDefinition ( 'translator.default' ), '->registerTranslatorConfiguration() loads translation.xml' );
$this -> assertEquals ( 'translator.default' , ( string ) $container -> getAlias ( 'translator' ), '->registerTranslatorConfiguration() redefines translator service from identity to real translator' );
2017-03-15 15:59:02 +00:00
$options = $container -> getDefinition ( 'translator.default' ) -> getArgument ( 4 );
2011-01-24 19:50:31 +00:00
2017-03-14 11:32:10 +00:00
$files = array_map ( 'realpath' , $options [ 'resource_files' ][ 'en' ]);
2015-01-08 16:22:13 +00:00
$ref = new \ReflectionClass ( 'Symfony\Component\Validator\Validation' );
2011-01-24 19:50:31 +00:00
$this -> assertContains (
2018-07-26 12:13:39 +01:00
strtr ( \dirname ( $ref -> getFileName ()) . '/Resources/translations/validators.en.xlf' , '/' , \DIRECTORY_SEPARATOR ),
2012-06-16 12:08:37 +01:00
$files ,
'->registerTranslatorConfiguration() finds Validator translation resources'
);
2013-05-13 03:46:20 +01:00
$ref = new \ReflectionClass ( 'Symfony\Component\Form\Form' );
2012-06-16 12:08:37 +01:00
$this -> assertContains (
2018-07-26 12:13:39 +01:00
strtr ( \dirname ( $ref -> getFileName ()) . '/Resources/translations/validators.en.xlf' , '/' , \DIRECTORY_SEPARATOR ),
2012-06-16 12:08:37 +01:00
$files ,
'->registerTranslatorConfiguration() finds Form translation resources'
2011-01-24 19:50:31 +00:00
);
2015-01-08 16:22:13 +00:00
$ref = new \ReflectionClass ( 'Symfony\Component\Security\Core\Security' );
2012-07-15 14:56:45 +01:00
$this -> assertContains (
2018-07-26 12:13:39 +01:00
strtr ( \dirname ( $ref -> getFileName ()) . '/Resources/translations/security.en.xlf' , '/' , \DIRECTORY_SEPARATOR ),
2012-07-15 14:56:45 +01:00
$files ,
'->registerTranslatorConfiguration() finds Security translation resources'
);
2015-05-05 20:36:55 +01:00
$this -> assertContains (
2018-07-26 12:13:39 +01:00
strtr ( __DIR__ . '/Fixtures/translations/test_paths.en.yml' , '/' , \DIRECTORY_SEPARATOR ),
2015-05-05 20:36:55 +01:00
$files ,
'->registerTranslatorConfiguration() finds translation resources in custom paths'
);
2017-11-07 14:35:08 +00:00
$this -> assertContains (
2018-07-26 12:19:56 +01:00
strtr ( __DIR__ . '/translations/test_default.en.xlf' , '/' , \DIRECTORY_SEPARATOR ),
2017-11-07 14:35:08 +00:00
$files ,
'->registerTranslatorConfiguration() finds translation resources in default path'
);
2011-01-24 19:50:31 +00:00
2011-07-19 11:05:51 +01:00
$calls = $container -> getDefinition ( 'translator.default' ) -> getMethodCalls ();
2015-09-09 12:50:25 +01:00
$this -> assertEquals ( array ( 'fr' ), $calls [ 1 ][ 1 ][ 0 ]);
2011-01-24 19:50:31 +00:00
}
2015-02-04 07:25:10 +00:00
public function testTranslatorMultipleFallbacks ()
2015-01-12 11:17:42 +00:00
{
$container = $this -> createContainerFromFile ( 'translator_fallbacks' );
$calls = $container -> getDefinition ( 'translator.default' ) -> getMethodCalls ();
2015-09-09 12:50:25 +01:00
$this -> assertEquals ( array ( 'en' , 'fr' ), $calls [ 1 ][ 1 ][ 0 ]);
2015-01-12 11:17:42 +00:00
}
2017-03-15 10:56:07 +00:00
public function testTranslatorHelperIsRegisteredWhenTranslatorIsEnabled ()
{
$container = $this -> createContainerFromFile ( 'templating_php_translator_enabled' );
$this -> assertTrue ( $container -> has ( 'templating.helper.translator' ));
}
public function testTranslatorHelperIsNotRegisteredWhenTranslatorIsDisabled ()
{
$container = $this -> createContainerFromFile ( 'templating_php_translator_disabled' );
$this -> assertFalse ( $container -> has ( 'templating.helper.translator' ));
}
2011-01-24 19:50:31 +00:00
/**
2013-01-05 17:52:40 +00:00
* @ expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
2011-01-24 19:50:31 +00:00
*/
public function testTemplatingRequiresAtLeastOneEngine ()
{
$container = $this -> createContainer ();
2010-09-20 20:01:41 +01:00
$loader = new FrameworkExtension ();
2011-02-15 04:58:18 +00:00
$loader -> load ( array ( array ( 'templating' => null )), $container );
2011-01-24 19:50:31 +00:00
}
public function testValidation ()
{
$container = $this -> createContainerFromFile ( 'full' );
2017-11-07 12:03:09 +00:00
$projectDir = $container -> getParameter ( 'kernel.project_dir' );
2010-06-16 13:19:46 +01:00
2013-05-13 03:46:20 +01:00
$ref = new \ReflectionClass ( 'Symfony\Component\Form\Form' );
2017-11-07 12:03:09 +00:00
$xmlMappings = array (
2018-07-26 09:45:46 +01:00
\dirname ( $ref -> getFileName ()) . '/Resources/config/validation.xml' ,
2018-07-26 12:19:56 +01:00
strtr ( $projectDir . '/config/validator/foo.xml' , '/' , \DIRECTORY_SEPARATOR ),
2017-11-07 12:03:09 +00:00
);
2014-03-18 16:36:12 +00:00
$calls = $container -> getDefinition ( 'validator.builder' ) -> getMethodCalls ();
2017-01-07 16:09:07 +00:00
$annotations = ! class_exists ( FullStack :: class ) && class_exists ( Annotation :: class );
$this -> assertCount ( $annotations ? 7 : 6 , $calls );
2014-03-18 17:23:55 +00:00
$this -> assertSame ( 'setConstraintValidatorFactory' , $calls [ 0 ][ 0 ]);
2014-03-18 16:36:12 +00:00
$this -> assertEquals ( array ( new Reference ( 'validator.validator_factory' )), $calls [ 0 ][ 1 ]);
$this -> assertSame ( 'setTranslator' , $calls [ 1 ][ 0 ]);
$this -> assertEquals ( array ( new Reference ( 'translator' )), $calls [ 1 ][ 1 ]);
$this -> assertSame ( 'setTranslationDomain' , $calls [ 2 ][ 0 ]);
$this -> assertSame ( array ( '%validator.translation_domain%' ), $calls [ 2 ][ 1 ]);
$this -> assertSame ( 'addXmlMappings' , $calls [ 3 ][ 0 ]);
$this -> assertSame ( array ( $xmlMappings ), $calls [ 3 ][ 1 ]);
2017-01-07 16:09:07 +00:00
$i = 3 ;
if ( $annotations ) {
$this -> assertSame ( 'enableAnnotationMapping' , $calls [ ++ $i ][ 0 ]);
}
$this -> assertSame ( 'addMethodMapping' , $calls [ ++ $i ][ 0 ]);
$this -> assertSame ( array ( 'loadValidatorMetadata' ), $calls [ $i ][ 1 ]);
$this -> assertSame ( 'setMetadataCache' , $calls [ ++ $i ][ 0 ]);
$this -> assertEquals ( array ( new Reference ( 'validator.mapping.cache.symfony' )), $calls [ $i ][ 1 ]);
2014-04-03 17:10:06 +01:00
}
public function testValidationService ()
{
2016-04-14 11:03:03 +01:00
$container = $this -> createContainerFromFile ( 'validation_annotations' , array ( 'kernel.charset' => 'UTF-8' ), false );
2014-04-03 17:10:06 +01:00
2015-01-19 17:16:09 +00:00
$this -> assertInstanceOf ( 'Symfony\Component\Validator\Validator\ValidatorInterface' , $container -> get ( 'validator' ));
2010-06-24 09:40:05 +01:00
}
2011-05-03 13:36:42 +01:00
public function testAnnotations ()
{
2018-02-08 09:42:56 +00:00
$container = $this -> createContainerFromFile ( 'full' , array (), true , false );
$container -> addCompilerPass ( new TestAnnotationsPass ());
$container -> compile ();
2011-05-03 13:36:42 +01:00
2015-10-08 10:44:44 +01:00
$this -> assertEquals ( $container -> getParameter ( 'kernel.cache_dir' ) . '/annotations' , $container -> getDefinition ( 'annotations.filesystem_cache' ) -> getArgument ( 0 ));
2018-02-08 09:42:56 +00:00
$this -> assertSame ( 'annotations.filesystem_cache' , ( string ) $container -> getDefinition ( 'annotation_reader' ) -> getArgument ( 1 ));
2011-05-03 13:36:42 +01:00
}
2011-07-12 18:01:49 +01:00
public function testFileLinkFormat ()
{
2017-01-12 18:45:33 +00:00
if ( ini_get ( 'xdebug.file_link_format' ) || get_cfg_var ( 'xdebug.file_link_format' )) {
$this -> markTestSkipped ( 'A custom file_link_format is defined.' );
}
2011-07-12 18:01:49 +01:00
$container = $this -> createContainerFromFile ( 'full' );
2016-08-31 09:43:03 +01:00
$this -> assertEquals ( 'file%link%format' , $container -> getParameter ( 'debug.file_link_format' ));
2011-07-12 18:01:49 +01:00
}
2011-01-24 19:50:31 +00:00
public function testValidationAnnotations ()
{
$container = $this -> createContainerFromFile ( 'validation_annotations' );
2014-03-18 16:36:12 +00:00
$calls = $container -> getDefinition ( 'validator.builder' ) -> getMethodCalls ();
2016-04-14 11:03:03 +01:00
$this -> assertCount ( 7 , $calls );
2014-04-02 17:29:34 +01:00
$this -> assertSame ( 'enableAnnotationMapping' , $calls [ 4 ][ 0 ]);
2014-03-18 16:36:12 +00:00
$this -> assertEquals ( array ( new Reference ( 'annotation_reader' )), $calls [ 4 ][ 1 ]);
$this -> assertSame ( 'addMethodMapping' , $calls [ 5 ][ 0 ]);
2014-06-03 15:40:53 +01:00
$this -> assertSame ( array ( 'loadValidatorMetadata' ), $calls [ 5 ][ 1 ]);
2016-04-14 11:03:03 +01:00
$this -> assertSame ( 'setMetadataCache' , $calls [ 6 ][ 0 ]);
$this -> assertEquals ( array ( new Reference ( 'validator.mapping.cache.symfony' )), $calls [ 6 ][ 1 ]);
2014-03-18 16:36:12 +00:00
// no cache this time
2011-01-24 19:50:31 +00:00
}
2011-04-11 22:26:11 +01:00
public function testValidationPaths ()
2010-08-10 14:55:05 +01:00
{
2015-03-21 10:51:07 +00:00
require_once __DIR__ . '/Fixtures/TestBundle/TestBundle.php' ;
2011-04-15 20:12:02 +01:00
2011-04-11 22:26:11 +01:00
$container = $this -> createContainerFromFile ( 'validation_annotations' , array (
2016-12-31 11:06:43 +00:00
'kernel.bundles' => array ( 'TestBundle' => 'Symfony\\Bundle\\FrameworkBundle\\Tests\\TestBundle' ),
'kernel.bundles_metadata' => array ( 'TestBundle' => array ( 'namespace' => 'Symfony\\Bundle\\FrameworkBundle\\Tests' , 'parent' => null , 'path' => __DIR__ . '/Fixtures/TestBundle' )),
2011-04-11 22:26:11 +01:00
));
2014-03-18 16:36:12 +00:00
$calls = $container -> getDefinition ( 'validator.builder' ) -> getMethodCalls ();
2016-04-14 11:03:03 +01:00
$this -> assertCount ( 8 , $calls );
2014-03-18 16:36:12 +00:00
$this -> assertSame ( 'addXmlMappings' , $calls [ 3 ][ 0 ]);
$this -> assertSame ( 'addYamlMappings' , $calls [ 4 ][ 0 ]);
2014-04-02 17:29:34 +01:00
$this -> assertSame ( 'enableAnnotationMapping' , $calls [ 5 ][ 0 ]);
2014-03-18 16:36:12 +00:00
$this -> assertSame ( 'addMethodMapping' , $calls [ 6 ][ 0 ]);
2014-06-03 15:40:53 +01:00
$this -> assertSame ( array ( 'loadValidatorMetadata' ), $calls [ 6 ][ 1 ]);
2016-04-14 11:03:03 +01:00
$this -> assertSame ( 'setMetadataCache' , $calls [ 7 ][ 0 ]);
$this -> assertEquals ( array ( new Reference ( 'validator.mapping.cache.symfony' )), $calls [ 7 ][ 1 ]);
2014-03-18 16:36:12 +00:00
$xmlMappings = $calls [ 3 ][ 1 ][ 0 ];
2017-11-07 12:03:09 +00:00
$this -> assertCount ( 3 , $xmlMappings );
2015-04-24 20:21:36 +01:00
try {
// Testing symfony/symfony
2018-07-26 12:13:39 +01:00
$this -> assertStringEndsWith ( 'Component' . \DIRECTORY_SEPARATOR . 'Form/Resources/config/validation.xml' , $xmlMappings [ 0 ]);
2015-04-24 20:21:36 +01:00
} catch ( \Exception $e ) {
// Testing symfony/framework-bundle with deps=high
2018-07-26 12:13:39 +01:00
$this -> assertStringEndsWith ( 'symfony' . \DIRECTORY_SEPARATOR . 'form/Resources/config/validation.xml' , $xmlMappings [ 0 ]);
2015-04-24 20:21:36 +01:00
}
2016-10-25 09:15:38 +01:00
$this -> assertStringEndsWith ( 'TestBundle/Resources/config/validation.xml' , $xmlMappings [ 1 ]);
2014-03-18 16:36:12 +00:00
$yamlMappings = $calls [ 4 ][ 1 ][ 0 ];
$this -> assertCount ( 1 , $yamlMappings );
2016-10-25 09:15:38 +01:00
$this -> assertStringEndsWith ( 'TestBundle/Resources/config/validation.yml' , $yamlMappings [ 0 ]);
2014-03-18 16:36:12 +00:00
}
2016-12-31 11:06:43 +00:00
public function testValidationPathsUsingCustomBundlePath ()
{
require_once __DIR__ . '/Fixtures/CustomPathBundle/src/CustomPathBundle.php' ;
$container = $this -> createContainerFromFile ( 'validation_annotations' , array (
'kernel.bundles' => array ( 'CustomPathBundle' => 'Symfony\\Bundle\\FrameworkBundle\\Tests\\CustomPathBundle' ),
'kernel.bundles_metadata' => array ( 'TestBundle' => array ( 'namespace' => 'Symfony\\Bundle\\FrameworkBundle\\Tests' , 'parent' => null , 'path' => __DIR__ . '/Fixtures/CustomPathBundle' )),
));
$calls = $container -> getDefinition ( 'validator.builder' ) -> getMethodCalls ();
$xmlMappings = $calls [ 3 ][ 1 ][ 0 ];
2017-11-07 12:03:09 +00:00
$this -> assertCount ( 3 , $xmlMappings );
2016-12-31 11:06:43 +00:00
try {
// Testing symfony/symfony
2018-07-26 12:13:39 +01:00
$this -> assertStringEndsWith ( 'Component' . \DIRECTORY_SEPARATOR . 'Form/Resources/config/validation.xml' , $xmlMappings [ 0 ]);
2016-12-31 11:06:43 +00:00
} catch ( \Exception $e ) {
// Testing symfony/framework-bundle with deps=high
2018-07-26 12:13:39 +01:00
$this -> assertStringEndsWith ( 'symfony' . \DIRECTORY_SEPARATOR . 'form/Resources/config/validation.xml' , $xmlMappings [ 0 ]);
2016-12-31 11:06:43 +00:00
}
$this -> assertStringEndsWith ( 'CustomPathBundle/Resources/config/validation.xml' , $xmlMappings [ 1 ]);
$yamlMappings = $calls [ 4 ][ 1 ][ 0 ];
$this -> assertCount ( 1 , $yamlMappings );
$this -> assertStringEndsWith ( 'CustomPathBundle/Resources/config/validation.yml' , $yamlMappings [ 0 ]);
}
2014-03-18 16:36:12 +00:00
public function testValidationNoStaticMethod ()
{
$container = $this -> createContainerFromFile ( 'validation_no_static_method' );
$calls = $container -> getDefinition ( 'validator.builder' ) -> getMethodCalls ();
2017-01-07 16:09:07 +00:00
$annotations = ! class_exists ( FullStack :: class ) && class_exists ( Annotation :: class );
$this -> assertCount ( $annotations ? 6 : 5 , $calls );
2014-03-18 16:36:12 +00:00
$this -> assertSame ( 'addXmlMappings' , $calls [ 3 ][ 0 ]);
2017-01-07 16:09:07 +00:00
$i = 3 ;
if ( $annotations ) {
$this -> assertSame ( 'enableAnnotationMapping' , $calls [ ++ $i ][ 0 ]);
}
$this -> assertSame ( 'setMetadataCache' , $calls [ ++ $i ][ 0 ]);
$this -> assertEquals ( array ( new Reference ( 'validator.mapping.cache.symfony' )), $calls [ $i ][ 1 ]);
2014-03-18 16:36:12 +00:00
// no cache, no annotations, no static methods
}
2017-12-13 07:51:34 +00:00
public function testValidationTranslationDomain ()
{
$container = $this -> createContainerFromFile ( 'validation_translation_domain' );
$this -> assertSame ( 'messages' , $container -> getParameter ( 'validator.translation_domain' ));
}
public function testValidationStrictEmail ()
{
$container = $this -> createContainerFromFile ( 'validation_strict_email' );
$this -> assertTrue ( $container -> getDefinition ( 'validator.email' ) -> getArgument ( 0 ));
}
2017-01-23 14:03:11 +00:00
public function testValidationMapping ()
{
$container = $this -> createContainerFromFile ( 'validation_mapping' );
$calls = $container -> getDefinition ( 'validator.builder' ) -> getMethodCalls ();
$this -> assertSame ( 'addXmlMappings' , $calls [ 3 ][ 0 ]);
2017-11-07 12:03:09 +00:00
$this -> assertCount ( 3 , $calls [ 3 ][ 1 ][ 0 ]);
2017-01-23 14:03:11 +00:00
$this -> assertSame ( 'addYamlMappings' , $calls [ 4 ][ 0 ]);
$this -> assertCount ( 3 , $calls [ 4 ][ 1 ][ 0 ]);
$this -> assertContains ( 'foo.yml' , $calls [ 4 ][ 1 ][ 0 ][ 0 ]);
$this -> assertContains ( 'validation.yml' , $calls [ 4 ][ 1 ][ 0 ][ 1 ]);
$this -> assertContains ( 'validation.yaml' , $calls [ 4 ][ 1 ][ 0 ][ 2 ]);
}
2013-10-09 09:42:58 +01:00
public function testFormsCanBeEnabledWithoutCsrfProtection ()
{
$container = $this -> createContainerFromFile ( 'form_no_csrf' );
$this -> assertFalse ( $container -> getParameter ( 'form.type_extension.csrf.enabled' ));
}
2014-08-02 10:58:38 +01:00
public function testStopwatchEnabledWithDebugModeEnabled ()
{
$container = $this -> createContainerFromFile ( 'default_config' , array (
'kernel.container_class' => 'foo' ,
'kernel.debug' => true ,
));
$this -> assertTrue ( $container -> has ( 'debug.stopwatch' ));
}
public function testStopwatchEnabledWithDebugModeDisabled ()
{
$container = $this -> createContainerFromFile ( 'default_config' , array (
'kernel.container_class' => 'foo' ,
));
$this -> assertTrue ( $container -> has ( 'debug.stopwatch' ));
}
2014-12-25 03:17:33 +00:00
public function testSerializerDisabled ()
{
$container = $this -> createContainerFromFile ( 'default_config' );
2017-01-07 16:09:07 +00:00
$this -> assertSame ( ! class_exists ( FullStack :: class ) && class_exists ( Serializer :: class ), $container -> has ( 'serializer' ));
2014-12-25 03:17:33 +00:00
}
public function testSerializerEnabled ()
{
$container = $this -> createContainerFromFile ( 'full' );
$this -> assertTrue ( $container -> has ( 'serializer' ));
2015-06-15 08:35:28 +01:00
$argument = $container -> getDefinition ( 'serializer.mapping.chain_loader' ) -> getArgument ( 0 );
2017-11-06 02:41:09 +00:00
$this -> assertCount ( 2 , $argument );
2015-06-15 08:35:28 +01:00
$this -> assertEquals ( 'Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader' , $argument [ 0 ] -> getClass ());
2016-04-25 18:10:03 +01:00
$this -> assertNull ( $container -> getDefinition ( 'serializer.mapping.class_metadata_factory' ) -> getArgument ( 1 ));
2015-06-15 08:35:28 +01:00
$this -> assertEquals ( new Reference ( 'serializer.name_converter.camel_case_to_snake_case' ), $container -> getDefinition ( 'serializer.normalizer.object' ) -> getArgument ( 1 ));
2016-07-26 15:19:03 +01:00
$this -> assertEquals ( new Reference ( 'property_info' , ContainerBuilder :: IGNORE_ON_INVALID_REFERENCE ), $container -> getDefinition ( 'serializer.normalizer.object' ) -> getArgument ( 3 ));
2018-02-19 15:01:42 +00:00
$this -> assertEquals ( array ( 'setCircularReferenceHandler' , array ( new Reference ( 'my.circular.reference.handler' ))), $container -> getDefinition ( 'serializer.normalizer.object' ) -> getMethodCalls ()[ 0 ]);
2014-12-25 03:17:33 +00:00
}
2015-12-10 14:53:36 +00:00
public function testRegisterSerializerExtractor ()
{
$container = $this -> createContainerFromFile ( 'full' );
$serializerExtractorDefinition = $container -> getDefinition ( 'property_info.serializer_extractor' );
$this -> assertEquals ( 'serializer.mapping.class_metadata_factory' , $serializerExtractorDefinition -> getArgument ( 0 ) -> __toString ());
$this -> assertFalse ( $serializerExtractorDefinition -> isPublic ());
$tag = $serializerExtractorDefinition -> getTag ( 'property_info.list_extractor' );
$this -> assertEquals ( array ( 'priority' => - 999 ), $tag [ 0 ]);
}
2016-01-31 20:58:26 +00:00
public function testDataUriNormalizerRegistered ()
{
$container = $this -> createContainerFromFile ( 'full' );
$definition = $container -> getDefinition ( 'serializer.normalizer.data_uri' );
$tag = $definition -> getTag ( 'serializer.normalizer' );
$this -> assertEquals ( DataUriNormalizer :: class , $definition -> getClass ());
$this -> assertEquals ( - 920 , $tag [ 0 ][ 'priority' ]);
}
2017-08-01 16:22:43 +01:00
public function testDateIntervalNormalizerRegistered ()
{
if ( ! class_exists ( DateIntervalNormalizer :: class )) {
$this -> markTestSkipped ( 'The DateIntervalNormalizer has been introduced in the Serializer Component version 3.4.' );
}
$container = $this -> createContainerFromFile ( 'full' );
$definition = $container -> getDefinition ( 'serializer.normalizer.dateinterval' );
$tag = $definition -> getTag ( 'serializer.normalizer' );
$this -> assertEquals ( DateIntervalNormalizer :: class , $definition -> getClass ());
$this -> assertEquals ( - 915 , $tag [ 0 ][ 'priority' ]);
}
2016-01-31 20:54:05 +00:00
public function testDateTimeNormalizerRegistered ()
{
$container = $this -> createContainerFromFile ( 'full' );
$definition = $container -> getDefinition ( 'serializer.normalizer.datetime' );
$tag = $definition -> getTag ( 'serializer.normalizer' );
$this -> assertEquals ( DateTimeNormalizer :: class , $definition -> getClass ());
$this -> assertEquals ( - 910 , $tag [ 0 ][ 'priority' ]);
}
2016-02-26 17:18:07 +00:00
public function testJsonSerializableNormalizerRegistered ()
2016-01-29 15:26:46 +00:00
{
$container = $this -> createContainerFromFile ( 'full' );
2016-02-26 17:18:07 +00:00
$definition = $container -> getDefinition ( 'serializer.normalizer.json_serializable' );
2016-01-29 15:26:46 +00:00
$tag = $definition -> getTag ( 'serializer.normalizer' );
$this -> assertEquals ( JsonSerializableNormalizer :: class , $definition -> getClass ());
$this -> assertEquals ( - 900 , $tag [ 0 ][ 'priority' ]);
}
2016-01-31 21:03:33 +00:00
public function testObjectNormalizerRegistered ()
{
$container = $this -> createContainerFromFile ( 'full' );
$definition = $container -> getDefinition ( 'serializer.normalizer.object' );
$tag = $definition -> getTag ( 'serializer.normalizer' );
2016-03-02 12:43:59 +00:00
$this -> assertEquals ( 'Symfony\Component\Serializer\Normalizer\ObjectNormalizer' , $definition -> getClass ());
2016-01-31 21:03:33 +00:00
$this -> assertEquals ( - 1000 , $tag [ 0 ][ 'priority' ]);
}
2016-04-25 18:10:03 +01:00
public function testSerializerCacheActivated ()
{
$container = $this -> createContainerFromFile ( 'serializer_enabled' );
2016-08-02 10:38:04 +01:00
2016-04-25 18:10:03 +01:00
$this -> assertTrue ( $container -> hasDefinition ( 'serializer.mapping.cache_class_metadata_factory' ));
2016-08-02 10:38:04 +01:00
$cache = $container -> getDefinition ( 'serializer.mapping.cache_class_metadata_factory' ) -> getArgument ( 1 );
$this -> assertEquals ( new Reference ( 'serializer.mapping.cache.symfony' ), $cache );
2016-04-25 18:10:03 +01:00
}
public function testSerializerCacheDisabled ()
{
$container = $this -> createContainerFromFile ( 'serializer_enabled' , array ( 'kernel.debug' => true , 'kernel.container_class' => __CLASS__ ));
$this -> assertFalse ( $container -> hasDefinition ( 'serializer.mapping.cache_class_metadata_factory' ));
}
/**
* @ group legacy
2016-10-20 14:28:37 +01:00
* @ expectedDeprecation The " framework.serializer.cache " option is deprecated % s .
2016-04-25 18:10:03 +01:00
*/
public function testDeprecatedSerializerCacheOption ()
{
2016-10-20 14:28:37 +01:00
$container = $this -> createContainerFromFile ( 'serializer_legacy_cache' , array ( 'kernel.debug' => true , 'kernel.container_class' => __CLASS__ ));
2016-04-25 18:10:03 +01:00
2016-10-20 14:28:37 +01:00
$this -> assertFalse ( $container -> hasDefinition ( 'serializer.mapping.cache_class_metadata_factory' ));
$this -> assertTrue ( $container -> hasDefinition ( 'serializer.mapping.class_metadata_factory' ));
2016-08-02 10:38:04 +01:00
2016-10-20 14:28:37 +01:00
$cache = $container -> getDefinition ( 'serializer.mapping.class_metadata_factory' ) -> getArgument ( 1 );
$this -> assertEquals ( new Reference ( 'foo' ), $cache );
2016-04-25 18:10:03 +01:00
}
2017-03-08 00:16:09 +00:00
public function testSerializerMapping ()
{
$container = $this -> createContainerFromFile ( 'serializer_mapping' , array ( 'kernel.bundles_metadata' => array ( 'TestBundle' => array ( 'namespace' => 'Symfony\\Bundle\\FrameworkBundle\\Tests' , 'path' => __DIR__ . '/Fixtures/TestBundle' , 'parent' => null ))));
2017-11-06 02:41:09 +00:00
$projectDir = $container -> getParameter ( 'kernel.project_dir' );
2017-03-08 00:16:09 +00:00
$configDir = __DIR__ . '/Fixtures/TestBundle/Resources/config' ;
$expectedLoaders = array (
new Definition ( AnnotationLoader :: class , array ( new Reference ( 'annotation_reader' ))),
new Definition ( XmlFileLoader :: class , array ( $configDir . '/serialization.xml' )),
new Definition ( YamlFileLoader :: class , array ( $configDir . '/serialization.yml' )),
2017-11-06 02:41:09 +00:00
new Definition ( YamlFileLoader :: class , array ( $projectDir . '/config/serializer/foo.yml' )),
2017-03-08 00:16:09 +00:00
new Definition ( XmlFileLoader :: class , array ( $configDir . '/serializer_mapping/files/foo.xml' )),
new Definition ( YamlFileLoader :: class , array ( $configDir . '/serializer_mapping/files/foo.yml' )),
new Definition ( YamlFileLoader :: class , array ( $configDir . '/serializer_mapping/serialization.yml' )),
new Definition ( YamlFileLoader :: class , array ( $configDir . '/serializer_mapping/serialization.yaml' )),
);
foreach ( $expectedLoaders as $definition ) {
2017-11-06 02:41:09 +00:00
if ( is_file ( $arg = $definition -> getArgument ( 0 ))) {
2018-07-26 12:19:56 +01:00
$definition -> replaceArgument ( 0 , strtr ( $arg , '/' , \DIRECTORY_SEPARATOR ));
2017-11-06 02:41:09 +00:00
}
2017-03-08 00:16:09 +00:00
$definition -> setPublic ( false );
}
$loaders = $container -> getDefinition ( 'serializer.mapping.chain_loader' ) -> getArgument ( 0 );
2017-11-06 02:41:09 +00:00
foreach ( $loaders as $loader ) {
if ( is_file ( $arg = $loader -> getArgument ( 0 ))) {
2018-07-26 12:19:56 +01:00
$loader -> replaceArgument ( 0 , strtr ( $arg , '/' , \DIRECTORY_SEPARATOR ));
2017-11-06 02:41:09 +00:00
}
}
$this -> assertEquals ( $expectedLoaders , $loaders );
2017-03-08 00:16:09 +00:00
}
2015-04-20 17:28:31 +01:00
public function testAssetHelperWhenAssetsAreEnabled ()
{
$container = $this -> createContainerFromFile ( 'full' );
$packages = $container -> getDefinition ( 'templating.helper.assets' ) -> getArgument ( 0 );
$this -> assertSame ( 'assets.packages' , ( string ) $packages );
}
2016-02-20 16:27:18 +00:00
public function testAssetHelperWhenTemplatesAreEnabledAndNoAssetsConfiguration ()
2015-04-20 17:28:31 +01:00
{
2016-02-20 16:27:18 +00:00
$container = $this -> createContainerFromFile ( 'templating_no_assets' );
2016-02-02 20:19:07 +00:00
$packages = $container -> getDefinition ( 'templating.helper.assets' ) -> getArgument ( 0 );
$this -> assertSame ( 'assets.packages' , ( string ) $packages );
}
2016-02-20 16:27:18 +00:00
public function testAssetsHelperIsRemovedWhenPhpTemplatingEngineIsEnabledAndAssetsAreDisabled ()
{
$container = $this -> createContainerFromFile ( 'templating_php_assets_disabled' );
$this -> assertTrue ( ! $container -> has ( 'templating.helper.assets' ), 'The templating.helper.assets helper service is removed when assets are disabled.' );
}
2016-02-02 20:19:07 +00:00
public function testAssetHelperWhenAssetsAndTemplatesAreDisabled ()
{
$container = $this -> createContainerFromFile ( 'default_config' );
2015-04-20 17:28:31 +01:00
2015-05-06 01:54:25 +01:00
$this -> assertFalse ( $container -> hasDefinition ( 'templating.helper.assets' ));
2015-04-20 17:28:31 +01:00
}
2015-08-05 20:44:23 +01:00
public function testSerializerServiceIsRegisteredWhenEnabled ()
{
$container = $this -> createContainerFromFile ( 'serializer_enabled' );
$this -> assertTrue ( $container -> hasDefinition ( 'serializer' ));
}
public function testSerializerServiceIsNotRegisteredWhenDisabled ()
{
$container = $this -> createContainerFromFile ( 'serializer_disabled' );
$this -> assertFalse ( $container -> hasDefinition ( 'serializer' ));
}
2015-09-28 12:22:50 +01:00
public function testPropertyInfoEnabled ()
{
$container = $this -> createContainerFromFile ( 'property_info' );
$this -> assertTrue ( $container -> has ( 'property_info' ));
}
2017-03-30 09:29:34 +01:00
public function testEventDispatcherService ()
{
$container = $this -> createContainer ( array ( 'kernel.charset' => 'UTF-8' , 'kernel.secret' => 'secret' ));
$container -> registerExtension ( new FrameworkExtension ());
$this -> loadFromFile ( $container , 'default_config' );
$container
-> register ( 'foo' , \stdClass :: class )
2017-09-19 21:53:21 +01:00
-> setPublic ( true )
2017-03-30 09:29:34 +01:00
-> setProperty ( 'dispatcher' , new Reference ( 'event_dispatcher' ));
$container -> compile ();
$this -> assertInstanceOf ( EventDispatcherInterface :: class , $container -> get ( 'foo' ) -> dispatcher );
}
2016-12-13 11:21:30 +00:00
public function testCacheDefaultRedisProvider ()
{
$container = $this -> createContainerFromFile ( 'cache' );
$redisUrl = 'redis://localhost' ;
2017-08-02 13:30:55 +01:00
$providerId = 'cache_connection.' . ContainerBuilder :: hash ( $redisUrl );
2016-12-13 11:21:30 +00:00
$this -> assertTrue ( $container -> hasDefinition ( $providerId ));
$url = $container -> getDefinition ( $providerId ) -> getArgument ( 0 );
$this -> assertSame ( $redisUrl , $url );
}
public function testCacheDefaultRedisProviderWithEnvVar ()
{
$container = $this -> createContainerFromFile ( 'cache_env_var' );
$redisUrl = 'redis://paas.com' ;
2017-08-02 13:30:55 +01:00
$providerId = 'cache_connection.' . ContainerBuilder :: hash ( $redisUrl );
2016-12-13 11:21:30 +00:00
$this -> assertTrue ( $container -> hasDefinition ( $providerId ));
$url = $container -> getDefinition ( $providerId ) -> getArgument ( 0 );
$this -> assertSame ( $redisUrl , $url );
}
2016-03-11 08:48:42 +00:00
public function testCachePoolServices ()
2016-02-20 23:25:19 +00:00
{
$container = $this -> createContainerFromFile ( 'cache' );
2016-04-28 17:07:16 +01:00
$this -> assertCachePoolServiceDefinitionIsCreated ( $container , 'cache.foo' , 'cache.adapter.apcu' , 30 );
$this -> assertCachePoolServiceDefinitionIsCreated ( $container , 'cache.bar' , 'cache.adapter.doctrine' , 5 );
$this -> assertCachePoolServiceDefinitionIsCreated ( $container , 'cache.baz' , 'cache.adapter.filesystem' , 7 );
$this -> assertCachePoolServiceDefinitionIsCreated ( $container , 'cache.foobar' , 'cache.adapter.psr6' , 10 );
$this -> assertCachePoolServiceDefinitionIsCreated ( $container , 'cache.def' , 'cache.app' , 11 );
2016-02-20 23:25:19 +00:00
}
2017-11-05 13:56:21 +00:00
public function testRemovesResourceCheckerConfigCacheFactoryArgumentOnlyIfNoDebug ()
{
$container = $this -> createContainer ( array ( 'kernel.debug' => true ));
( new FrameworkExtension ()) -> load ( array (), $container );
$this -> assertCount ( 1 , $container -> getDefinition ( 'config_cache_factory' ) -> getArguments ());
$container = $this -> createContainer ( array ( 'kernel.debug' => false ));
( new FrameworkExtension ()) -> load ( array (), $container );
$this -> assertEmpty ( $container -> getDefinition ( 'config_cache_factory' ) -> getArguments ());
}
2011-04-11 22:26:11 +01:00
protected function createContainer ( array $data = array ())
{
return new ContainerBuilder ( new ParameterBag ( array_merge ( array (
2014-10-22 19:27:13 +01:00
'kernel.bundles' => array ( 'FrameworkBundle' => 'Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle' ),
2016-12-31 11:06:43 +00:00
'kernel.bundles_metadata' => array ( 'FrameworkBundle' => array ( 'namespace' => 'Symfony\\Bundle\\FrameworkBundle' , 'path' => __DIR__ . '/../..' , 'parent' => null )),
2014-10-22 19:27:13 +01:00
'kernel.cache_dir' => __DIR__ ,
2017-07-22 10:58:19 +01:00
'kernel.project_dir' => __DIR__ ,
2014-10-22 19:27:13 +01:00
'kernel.debug' => false ,
2013-09-12 05:41:55 +01:00
'kernel.environment' => 'test' ,
2014-10-22 19:27:13 +01:00
'kernel.name' => 'kernel' ,
'kernel.root_dir' => __DIR__ ,
2016-10-04 08:25:27 +01:00
'kernel.container_class' => 'testContainer' ,
2018-01-03 11:52:04 +00:00
'container.build_hash' => 'Abc1234' ,
'container.build_id' => hash ( 'crc32' , 'Abc123423456789' ),
'container.build_time' => 23456789 ,
2011-04-11 22:26:11 +01:00
), $data )));
2010-08-10 14:55:05 +01:00
}
2011-01-24 19:50:31 +00:00
2018-02-08 09:42:56 +00:00
protected function createContainerFromFile ( $file , $data = array (), $resetCompilerPasses = true , $compile = true )
2011-01-24 19:50:31 +00:00
{
2018-07-05 12:24:53 +01:00
$cacheKey = md5 ( \get_class ( $this ) . $file . serialize ( $data ));
2018-02-08 09:42:56 +00:00
if ( $compile && isset ( self :: $containerCache [ $cacheKey ])) {
2016-01-16 12:37:00 +00:00
return self :: $containerCache [ $cacheKey ];
}
2011-04-11 22:26:11 +01:00
$container = $this -> createContainer ( $data );
2011-01-24 19:50:31 +00:00
$container -> registerExtension ( new FrameworkExtension ());
$this -> loadFromFile ( $container , $file );
2016-04-14 11:03:03 +01:00
if ( $resetCompilerPasses ) {
$container -> getCompilerPassConfig () -> setOptimizationPasses ( array ());
$container -> getCompilerPassConfig () -> setRemovingPasses ( array ());
}
2018-02-08 09:42:56 +00:00
$container -> getCompilerPassConfig () -> setBeforeRemovingPasses ( array ( new AddConstraintValidatorsPass (), new TranslatorPass ( 'translator.default' , 'translation.reader' )));
$container -> getCompilerPassConfig () -> setAfterRemovingPasses ( array ( new AddAnnotationsCachedReaderPass ()));
if ( ! $compile ) {
return $container ;
}
2011-01-24 19:50:31 +00:00
$container -> compile ();
2016-01-16 12:37:00 +00:00
return self :: $containerCache [ $cacheKey ] = $container ;
2011-01-24 19:50:31 +00:00
}
2015-01-17 07:35:04 +00:00
protected function createContainerFromClosure ( $closure , $data = array ())
{
$container = $this -> createContainer ( $data );
$container -> registerExtension ( new FrameworkExtension ());
$loader = new ClosureLoader ( $container );
$loader -> load ( $closure );
$container -> getCompilerPassConfig () -> setOptimizationPasses ( array ());
$container -> getCompilerPassConfig () -> setRemovingPasses ( array ());
$container -> compile ();
return $container ;
}
2016-11-28 07:50:06 +00:00
private function assertPathPackage ( ContainerBuilder $container , ChildDefinition $package , $basePath , $version , $format )
2015-01-17 07:35:04 +00:00
{
$this -> assertEquals ( 'assets.path_package' , $package -> getParent ());
$this -> assertEquals ( $basePath , $package -> getArgument ( 0 ));
$this -> assertVersionStrategy ( $container , $package -> getArgument ( 1 ), $version , $format );
}
2016-11-28 07:50:06 +00:00
private function assertUrlPackage ( ContainerBuilder $container , ChildDefinition $package , $baseUrls , $version , $format )
2015-01-17 07:35:04 +00:00
{
$this -> assertEquals ( 'assets.url_package' , $package -> getParent ());
$this -> assertEquals ( $baseUrls , $package -> getArgument ( 0 ));
$this -> assertVersionStrategy ( $container , $package -> getArgument ( 1 ), $version , $format );
}
private function assertVersionStrategy ( ContainerBuilder $container , Reference $reference , $version , $format )
{
2017-01-10 10:21:41 +00:00
$versionStrategy = $container -> getDefinition (( string ) $reference );
2015-01-17 07:35:04 +00:00
if ( null === $version ) {
$this -> assertEquals ( 'assets.empty_version_strategy' , ( string ) $reference );
} else {
$this -> assertEquals ( 'assets.static_version_strategy' , $versionStrategy -> getParent ());
$this -> assertEquals ( $version , $versionStrategy -> getArgument ( 0 ));
$this -> assertEquals ( $format , $versionStrategy -> getArgument ( 1 ));
}
}
2016-02-20 23:25:19 +00:00
2016-04-28 17:07:16 +01:00
private function assertCachePoolServiceDefinitionIsCreated ( ContainerBuilder $container , $id , $adapter , $defaultLifetime )
2016-02-20 23:25:19 +00:00
{
2016-03-14 09:01:08 +00:00
$this -> assertTrue ( $container -> has ( $id ), sprintf ( 'Service definition "%s" for cache pool of type "%s" is registered' , $id , $adapter ));
2016-02-20 23:25:19 +00:00
2016-03-11 08:48:42 +00:00
$poolDefinition = $container -> getDefinition ( $id );
2016-11-28 07:50:06 +00:00
$this -> assertInstanceOf ( ChildDefinition :: class , $poolDefinition , sprintf ( 'Cache pool "%s" is based on an abstract cache pool.' , $id ));
2016-03-11 08:48:42 +00:00
2016-03-14 09:01:08 +00:00
$this -> assertTrue ( $poolDefinition -> hasTag ( 'cache.pool' ), sprintf ( 'Service definition "%s" is tagged with the "cache.pool" tag.' , $id ));
$this -> assertFalse ( $poolDefinition -> isAbstract (), sprintf ( 'Service definition "%s" is not abstract.' , $id ));
2016-02-20 23:25:19 +00:00
2016-03-14 09:01:08 +00:00
$tag = $poolDefinition -> getTag ( 'cache.pool' );
2018-02-01 05:55:42 +00:00
$this -> assertArrayHasKey ( 'default_lifetime' , $tag [ 0 ], 'The default lifetime is stored as an attribute of the "cache.pool" tag.' );
2016-03-14 09:01:08 +00:00
$this -> assertSame ( $defaultLifetime , $tag [ 0 ][ 'default_lifetime' ], 'The default lifetime is stored as an attribute of the "cache.pool" tag.' );
2016-04-28 17:07:16 +01:00
$parentDefinition = $poolDefinition ;
do {
$parentId = $parentDefinition -> getParent ();
$parentDefinition = $container -> findDefinition ( $parentId );
2016-11-28 07:50:06 +00:00
} while ( $parentDefinition instanceof ChildDefinition );
2016-03-14 09:01:08 +00:00
switch ( $adapter ) {
case 'cache.adapter.apcu' :
2016-04-28 17:07:16 +01:00
$this -> assertSame ( ApcuAdapter :: class , $parentDefinition -> getClass ());
2016-02-20 23:25:19 +00:00
break ;
2016-03-14 09:01:08 +00:00
case 'cache.adapter.doctrine' :
2016-04-28 17:07:16 +01:00
$this -> assertSame ( DoctrineAdapter :: class , $parentDefinition -> getClass ());
2016-02-20 23:25:19 +00:00
break ;
2016-04-28 17:07:16 +01:00
case 'cache.app' :
2016-05-05 16:37:21 +01:00
if ( ChainAdapter :: class === $parentDefinition -> getClass ()) {
break ;
}
2017-09-17 11:10:12 +01:00
// no break
2016-03-14 09:01:08 +00:00
case 'cache.adapter.filesystem' :
2016-04-28 17:07:16 +01:00
$this -> assertSame ( FilesystemAdapter :: class , $parentDefinition -> getClass ());
break ;
case 'cache.adapter.psr6' :
$this -> assertSame ( ProxyAdapter :: class , $parentDefinition -> getClass ());
break ;
case 'cache.adapter.redis' :
$this -> assertSame ( RedisAdapter :: class , $parentDefinition -> getClass ());
2016-02-20 23:25:19 +00:00
break ;
2016-04-28 17:07:16 +01:00
default :
$this -> fail ( 'Unresolved adapter: ' . $adapter );
2016-02-20 23:25:19 +00:00
}
}
2010-06-07 08:08:35 +01:00
}
2018-02-08 09:42:56 +00:00
/**
* Simulates ReplaceAliasByActualDefinitionPass .
*/
class TestAnnotationsPass implements CompilerPassInterface
{
public function process ( ContainerBuilder $container )
{
$container -> setDefinition ( 'annotation_reader' , $container -> getDefinition ( 'annotations.cached_reader' ));
$container -> removeDefinition ( 'annotations.cached_reader' );
}
}