summaryrefslogtreecommitdiff
path: root/vendor/symfony/event-dispatcher
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/symfony/event-dispatcher')
-rw-r--r--vendor/symfony/event-dispatcher/CHANGELOG.md19
-rw-r--r--vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php50
-rw-r--r--vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php135
-rw-r--r--vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php2
-rw-r--r--vendor/symfony/event-dispatcher/Debug/WrappedListener.php43
-rw-r--r--vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php102
-rw-r--r--vendor/symfony/event-dispatcher/Event.php64
-rw-r--r--vendor/symfony/event-dispatcher/EventDispatcher.php89
-rw-r--r--vendor/symfony/event-dispatcher/EventDispatcherInterface.php23
-rw-r--r--vendor/symfony/event-dispatcher/GenericEvent.php47
-rw-r--r--vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php18
-rw-r--r--vendor/symfony/event-dispatcher/LICENSE2
-rw-r--r--vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php108
-rw-r--r--vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php85
-rw-r--r--vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php102
-rw-r--r--vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php83
-rw-r--r--vendor/symfony/event-dispatcher/Tests/EventTest.php45
-rw-r--r--vendor/symfony/event-dispatcher/Tests/GenericEventTest.php9
-rw-r--r--vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php9
-rw-r--r--vendor/symfony/event-dispatcher/composer.json15
-rw-r--r--vendor/symfony/event-dispatcher/phpunit.xml.dist2
21 files changed, 564 insertions, 488 deletions
diff --git a/vendor/symfony/event-dispatcher/CHANGELOG.md b/vendor/symfony/event-dispatcher/CHANGELOG.md
index bb42ee19..c6aa5389 100644
--- a/vendor/symfony/event-dispatcher/CHANGELOG.md
+++ b/vendor/symfony/event-dispatcher/CHANGELOG.md
@@ -1,6 +1,25 @@
CHANGELOG
=========
+3.4.0
+-----
+
+ * Implementing `TraceableEventDispatcherInterface` without the `reset()` method has been deprecated.
+
+3.3.0
+-----
+
+ * The ContainerAwareEventDispatcher class has been deprecated. Use EventDispatcher with closure factories instead.
+
+3.0.0
+-----
+
+ * The method `getListenerPriority($eventName, $listener)` has been added to the
+ `EventDispatcherInterface`.
+ * The methods `Event::setDispatcher()`, `Event::getDispatcher()`, `Event::setName()`
+ and `Event::getName()` have been removed.
+ The event dispatcher and the event name are passed to the listener call.
+
2.5.0
-----
diff --git a/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php b/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
index b92defe6..7a2b68be 100644
--- a/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
+++ b/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
@@ -20,38 +20,34 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
* @author Fabien Potencier <fabien@symfony.com>
* @author Bernhard Schussek <bschussek@gmail.com>
* @author Jordan Alliot <jordan.alliot@gmail.com>
+ *
+ * @deprecated since 3.3, to be removed in 4.0. Use EventDispatcher with closure factories instead.
*/
class ContainerAwareEventDispatcher extends EventDispatcher
{
- /**
- * The container from where services are loaded.
- *
- * @var ContainerInterface
- */
private $container;
/**
* The service IDs of the event listeners and subscribers.
- *
- * @var array
*/
private $listenerIds = array();
/**
* The services registered as listeners.
- *
- * @var array
*/
private $listeners = array();
- /**
- * Constructor.
- *
- * @param ContainerInterface $container A ContainerInterface instance
- */
public function __construct(ContainerInterface $container)
{
$this->container = $container;
+
+ $class = get_class($this);
+ if ($this instanceof \PHPUnit_Framework_MockObject_MockObject || $this instanceof \Prophecy\Doubler\DoubleInterface) {
+ $class = get_parent_class($class);
+ }
+ if (__CLASS__ !== $class) {
+ @trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), E_USER_DEPRECATED);
+ }
}
/**
@@ -68,6 +64,8 @@ class ContainerAwareEventDispatcher extends EventDispatcher
*/
public function addListenerService($eventName, $callback, $priority = 0)
{
+ @trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), E_USER_DEPRECATED);
+
if (!is_array($callback) || 2 !== count($callback)) {
throw new \InvalidArgumentException('Expected an array("service", "method") argument');
}
@@ -80,8 +78,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher
$this->lazyLoad($eventName);
if (isset($this->listenerIds[$eventName])) {
- foreach ($this->listenerIds[$eventName] as $i => $args) {
- list($serviceId, $method, $priority) = $args;
+ foreach ($this->listenerIds[$eventName] as $i => list($serviceId, $method)) {
$key = $serviceId.'.'.$method;
if (isset($this->listeners[$eventName][$key]) && $listener === array($this->listeners[$eventName][$key], $method)) {
unset($this->listeners[$eventName][$key]);
@@ -105,7 +102,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher
public function hasListeners($eventName = null)
{
if (null === $eventName) {
- return (bool) count($this->listenerIds) || (bool) count($this->listeners);
+ return $this->listenerIds || $this->listeners || parent::hasListeners();
}
if (isset($this->listenerIds[$eventName])) {
@@ -132,6 +129,16 @@ class ContainerAwareEventDispatcher extends EventDispatcher
}
/**
+ * {@inheritdoc}
+ */
+ public function getListenerPriority($eventName, $listener)
+ {
+ $this->lazyLoad($eventName);
+
+ return parent::getListenerPriority($eventName, $listener);
+ }
+
+ /**
* Adds a service as event subscriber.
*
* @param string $serviceId The service ID of the subscriber service
@@ -139,6 +146,8 @@ class ContainerAwareEventDispatcher extends EventDispatcher
*/
public function addSubscriberService($serviceId, $class)
{
+ @trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), E_USER_DEPRECATED);
+
foreach ($class::getSubscribedEvents() as $eventName => $params) {
if (is_string($params)) {
$this->listenerIds[$eventName][] = array($serviceId, $params, 0);
@@ -154,6 +163,8 @@ class ContainerAwareEventDispatcher extends EventDispatcher
public function getContainer()
{
+ @trigger_error('The '.__METHOD__.'() method is deprecated since version 3.3 as its class will be removed in 4.0. Inject the container or the services you need in your listeners/subscribers instead.', E_USER_DEPRECATED);
+
return $this->container;
}
@@ -168,14 +179,13 @@ class ContainerAwareEventDispatcher extends EventDispatcher
protected function lazyLoad($eventName)
{
if (isset($this->listenerIds[$eventName])) {
- foreach ($this->listenerIds[$eventName] as $args) {
- list($serviceId, $method, $priority) = $args;
+ foreach ($this->listenerIds[$eventName] as list($serviceId, $method, $priority)) {
$listener = $this->container->get($serviceId);
$key = $serviceId.'.'.$method;
if (!isset($this->listeners[$eventName][$key])) {
$this->addListener($eventName, array($listener, $method), $priority);
- } elseif ($listener !== $this->listeners[$eventName][$key]) {
+ } elseif ($this->listeners[$eventName][$key] !== $listener) {
parent::removeListener($eventName, array($this->listeners[$eventName][$key], $method));
$this->addListener($eventName, array($listener, $method), $priority);
}
diff --git a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php b/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php
index 12e2b1c6..9b5c689a 100644
--- a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php
+++ b/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php
@@ -33,13 +33,6 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
private $dispatcher;
private $wrappedListeners;
- /**
- * Constructor.
- *
- * @param EventDispatcherInterface $dispatcher An EventDispatcherInterface instance
- * @param Stopwatch $stopwatch A Stopwatch instance
- * @param LoggerInterface $logger A LoggerInterface instance
- */
public function __construct(EventDispatcherInterface $dispatcher, Stopwatch $stopwatch, LoggerInterface $logger = null)
{
$this->dispatcher = $dispatcher;
@@ -102,6 +95,24 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
/**
* {@inheritdoc}
*/
+ public function getListenerPriority($eventName, $listener)
+ {
+ // we might have wrapped listeners for the event (if called while dispatching)
+ // in that case get the priority by wrapper
+ if (isset($this->wrappedListeners[$eventName])) {
+ foreach ($this->wrappedListeners[$eventName] as $index => $wrappedListener) {
+ if ($wrappedListener->getWrappedListener() === $listener) {
+ return $this->dispatcher->getListenerPriority($eventName, $wrappedListener);
+ }
+ }
+ }
+
+ return $this->dispatcher->getListenerPriority($eventName, $listener);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function hasListeners($eventName = null)
{
return $this->dispatcher->hasListeners($eventName);
@@ -145,8 +156,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
$called = array();
foreach ($this->called as $eventName => $listeners) {
foreach ($listeners as $listener) {
- $info = $this->getListenerInfo($listener->getWrappedListener(), $eventName);
- $called[$eventName.'.'.$info['pretty']] = $info;
+ $called[$eventName.'.'.$listener->getPretty()] = $listener->getInfo($eventName);
}
}
@@ -184,15 +194,24 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
}
if (!$called) {
- $info = $this->getListenerInfo($listener, $eventName);
- $notCalled[$eventName.'.'.$info['pretty']] = $info;
+ if (!$listener instanceof WrappedListener) {
+ $listener = new WrappedListener($listener, null, $this->stopwatch, $this);
+ }
+ $notCalled[$eventName.'.'.$listener->getPretty()] = $listener->getInfo($eventName);
}
}
}
+ uasort($notCalled, array($this, 'sortListenersByPriority'));
+
return $notCalled;
}
+ public function reset()
+ {
+ $this->called = array();
+ }
+
/**
* Proxies all method calls to the original event dispatcher.
*
@@ -229,12 +248,11 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
private function preProcess($eventName)
{
foreach ($this->dispatcher->getListeners($eventName) as $listener) {
- $this->dispatcher->removeListener($eventName, $listener);
- $info = $this->getListenerInfo($listener, $eventName);
- $name = isset($info['class']) ? $info['class'] : $info['type'];
- $wrappedListener = new WrappedListener($listener, $name, $this->stopwatch, $this);
+ $priority = $this->getListenerPriority($eventName, $listener);
+ $wrappedListener = new WrappedListener($listener, null, $this->stopwatch, $this);
$this->wrappedListeners[$eventName][] = $wrappedListener;
- $this->dispatcher->addListener($eventName, $wrappedListener);
+ $this->dispatcher->removeListener($eventName, $listener);
+ $this->dispatcher->addListener($eventName, $wrappedListener, $priority);
}
}
@@ -247,13 +265,17 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
continue;
}
// Unwrap listener
+ $priority = $this->getListenerPriority($eventName, $listener);
$this->dispatcher->removeListener($eventName, $listener);
- $this->dispatcher->addListener($eventName, $listener->getWrappedListener());
+ $this->dispatcher->addListener($eventName, $listener->getWrappedListener(), $priority);
+
+ if (null !== $this->logger) {
+ $context = array('event' => $eventName, 'listener' => $listener->getPretty());
+ }
- $info = $this->getListenerInfo($listener->getWrappedListener(), $eventName);
if ($listener->wasCalled()) {
if (null !== $this->logger) {
- $this->logger->debug(sprintf('Notified event "%s" to listener "%s".', $eventName, $info['pretty']));
+ $this->logger->debug('Notified event "{event}" to listener "{listener}".', $context);
}
if (!isset($this->called[$eventName])) {
@@ -264,12 +286,12 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
}
if (null !== $this->logger && $skipped) {
- $this->logger->debug(sprintf('Listener "%s" was not called for event "%s".', $info['pretty'], $eventName));
+ $this->logger->debug('Listener "{listener}" was not called for event "{event}".', $context);
}
if ($listener->stoppedPropagation()) {
if (null !== $this->logger) {
- $this->logger->debug(sprintf('Listener "%s" stopped propagation of the event "%s".', $info['pretty'], $eventName));
+ $this->logger->debug('Listener "{listener}" stopped propagation of the event "{event}".', $context);
}
$skipped = true;
@@ -277,63 +299,24 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
}
}
- /**
- * Returns information about the listener.
- *
- * @param object $listener The listener
- * @param string $eventName The event name
- *
- * @return array Information about the listener
- */
- private function getListenerInfo($listener, $eventName)
+ private function sortListenersByPriority($a, $b)
{
- $info = array(
- 'event' => $eventName,
- );
- if ($listener instanceof \Closure) {
- $info += array(
- 'type' => 'Closure',
- 'pretty' => 'closure',
- );
- } elseif (is_string($listener)) {
- try {
- $r = new \ReflectionFunction($listener);
- $file = $r->getFileName();
- $line = $r->getStartLine();
- } catch (\ReflectionException $e) {
- $file = null;
- $line = null;
- }
- $info += array(
- 'type' => 'Function',
- 'function' => $listener,
- 'file' => $file,
- 'line' => $line,
- 'pretty' => $listener,
- );
- } elseif (is_array($listener) || (is_object($listener) && is_callable($listener))) {
- if (!is_array($listener)) {
- $listener = array($listener, '__invoke');
- }
- $class = is_object($listener[0]) ? get_class($listener[0]) : $listener[0];
- try {
- $r = new \ReflectionMethod($class, $listener[1]);
- $file = $r->getFileName();
- $line = $r->getStartLine();
- } catch (\ReflectionException $e) {
- $file = null;
- $line = null;
- }
- $info += array(
- 'type' => 'Method',
- 'class' => $class,
- 'method' => $listener[1],
- 'file' => $file,
- 'line' => $line,
- 'pretty' => $class.'::'.$listener[1],
- );
+ if (is_int($a['priority']) && !is_int($b['priority'])) {
+ return 1;
+ }
+
+ if (!is_int($a['priority']) && is_int($b['priority'])) {
+ return -1;
+ }
+
+ if ($a['priority'] === $b['priority']) {
+ return 0;
+ }
+
+ if ($a['priority'] > $b['priority']) {
+ return -1;
}
- return $info;
+ return 1;
}
}
diff --git a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php b/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php
index 5483e815..f0212753 100644
--- a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php
+++ b/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php
@@ -15,6 +15,8 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
/**
* @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @method reset() Resets the trace.
*/
interface TraceableEventDispatcherInterface extends EventDispatcherInterface
{
diff --git a/vendor/symfony/event-dispatcher/Debug/WrappedListener.php b/vendor/symfony/event-dispatcher/Debug/WrappedListener.php
index e16627d6..f7b0273e 100644
--- a/vendor/symfony/event-dispatcher/Debug/WrappedListener.php
+++ b/vendor/symfony/event-dispatcher/Debug/WrappedListener.php
@@ -14,6 +14,7 @@ namespace Symfony\Component\EventDispatcher\Debug;
use Symfony\Component\Stopwatch\Stopwatch;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\VarDumper\Caster\ClassStub;
/**
* @author Fabien Potencier <fabien@symfony.com>
@@ -26,6 +27,9 @@ class WrappedListener
private $stoppedPropagation;
private $stopwatch;
private $dispatcher;
+ private $pretty;
+ private $stub;
+ private static $hasClassStub;
public function __construct($listener, $name, Stopwatch $stopwatch, EventDispatcherInterface $dispatcher = null)
{
@@ -35,6 +39,26 @@ class WrappedListener
$this->dispatcher = $dispatcher;
$this->called = false;
$this->stoppedPropagation = false;
+
+ if (is_array($listener)) {
+ $this->name = is_object($listener[0]) ? get_class($listener[0]) : $listener[0];
+ $this->pretty = $this->name.'::'.$listener[1];
+ } elseif ($listener instanceof \Closure) {
+ $this->pretty = $this->name = 'closure';
+ } elseif (is_string($listener)) {
+ $this->pretty = $this->name = $listener;
+ } else {
+ $this->name = get_class($listener);
+ $this->pretty = $this->name.'::__invoke';
+ }
+
+ if (null !== $name) {
+ $this->name = $name;
+ }
+
+ if (null === self::$hasClassStub) {
+ self::$hasClassStub = class_exists(ClassStub::class);
+ }
}
public function getWrappedListener()
@@ -52,6 +76,25 @@ class WrappedListener
return $this->stoppedPropagation;
}
+ public function getPretty()
+ {
+ return $this->pretty;
+ }
+
+ public function getInfo($eventName)
+ {
+ if (null === $this->stub) {
+ $this->stub = self::$hasClassStub ? new ClassStub($this->pretty.'()', $this->listener) : $this->pretty.'()';
+ }
+
+ return array(
+ 'event' => $eventName,
+ 'priority' => null !== $this->dispatcher ? $this->dispatcher->getListenerPriority($eventName, $this->listener) : null,
+ 'pretty' => $this->pretty,
+ 'stub' => $this->stub,
+ );
+ }
+
public function __invoke(Event $event, $eventName, EventDispatcherInterface $dispatcher)
{
$this->called = true;
diff --git a/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php b/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php
index ebfe435f..9f9c09c5 100644
--- a/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php
+++ b/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php
@@ -11,32 +11,27 @@
namespace Symfony\Component\EventDispatcher\DependencyInjection;
+use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\EventDispatcher\EventDispatcher;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Compiler pass to register tagged services for an event dispatcher.
*/
class RegisterListenersPass implements CompilerPassInterface
{
- /**
- * @var string
- */
protected $dispatcherService;
-
- /**
- * @var string
- */
protected $listenerTag;
-
- /**
- * @var string
- */
protected $subscriberTag;
+ private $hotPathEvents = array();
+ private $hotPathTagName;
+
/**
- * Constructor.
- *
* @param string $dispatcherService Service name of the event dispatcher in processed container
* @param string $listenerTag Tag name used for listener
* @param string $subscriberTag Tag name used for subscribers
@@ -48,6 +43,14 @@ class RegisterListenersPass implements CompilerPassInterface
$this->subscriberTag = $subscriberTag;
}
+ public function setHotPathEvents(array $hotPathEvents, $tagName = 'container.hot_path')
+ {
+ $this->hotPathEvents = array_flip($hotPathEvents);
+ $this->hotPathTagName = $tagName;
+
+ return $this;
+ }
+
public function process(ContainerBuilder $container)
{
if (!$container->hasDefinition($this->dispatcherService) && !$container->hasAlias($this->dispatcherService)) {
@@ -56,21 +59,12 @@ class RegisterListenersPass implements CompilerPassInterface
$definition = $container->findDefinition($this->dispatcherService);
- foreach ($container->findTaggedServiceIds($this->listenerTag) as $id => $events) {
- $def = $container->getDefinition($id);
- if (!$def->isPublic()) {
- throw new \InvalidArgumentException(sprintf('The service "%s" must be public as event listeners are lazy-loaded.', $id));
- }
-
- if ($def->isAbstract()) {
- throw new \InvalidArgumentException(sprintf('The service "%s" must not be abstract as event listeners are lazy-loaded.', $id));
- }
-
+ foreach ($container->findTaggedServiceIds($this->listenerTag, true) as $id => $events) {
foreach ($events as $event) {
$priority = isset($event['priority']) ? $event['priority'] : 0;
if (!isset($event['event'])) {
- throw new \InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $id, $this->listenerTag));
+ throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $id, $this->listenerTag));
}
if (!isset($event['method'])) {
@@ -81,29 +75,65 @@ class RegisterListenersPass implements CompilerPassInterface
$event['method'] = preg_replace('/[^a-z0-9]/i', '', $event['method']);
}
- $definition->addMethodCall('addListenerService', array($event['event'], array($id, $event['method']), $priority));
+ $definition->addMethodCall('addListener', array($event['event'], array(new ServiceClosureArgument(new Reference($id)), $event['method']), $priority));
+
+ if (isset($this->hotPathEvents[$event['event']])) {
+ $container->getDefinition($id)->addTag($this->hotPathTagName);
+ }
}
}
- foreach ($container->findTaggedServiceIds($this->subscriberTag) as $id => $attributes) {
- $def = $container->getDefinition($id);
- if (!$def->isPublic()) {
- throw new \InvalidArgumentException(sprintf('The service "%s" must be public as event subscribers are lazy-loaded.', $id));
- }
+ $extractingDispatcher = new ExtractingEventDispatcher();
- if ($def->isAbstract()) {
- throw new \InvalidArgumentException(sprintf('The service "%s" must not be abstract as event subscribers are lazy-loaded.', $id));
- }
+ foreach ($container->findTaggedServiceIds($this->subscriberTag, true) as $id => $attributes) {
+ $def = $container->getDefinition($id);
// We must assume that the class value has been correctly filled, even if the service is created by a factory
$class = $container->getParameterBag()->resolveValue($def->getClass());
-
$interface = 'Symfony\Component\EventDispatcher\EventSubscriberInterface';
+
if (!is_subclass_of($class, $interface)) {
- throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
+ if (!class_exists($class, false)) {
+ throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
+ }
+
+ throw new InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
}
+ $container->addObjectResource($class);
- $definition->addMethodCall('addSubscriberService', array($id, $class));
+ ExtractingEventDispatcher::$subscriber = $class;
+ $extractingDispatcher->addSubscriber($extractingDispatcher);
+ foreach ($extractingDispatcher->listeners as $args) {
+ $args[1] = array(new ServiceClosureArgument(new Reference($id)), $args[1]);
+ $definition->addMethodCall('addListener', $args);
+
+ if (isset($this->hotPathEvents[$args[0]])) {
+ $container->getDefinition($id)->addTag('container.hot_path');
+ }
+ }
+ $extractingDispatcher->listeners = array();
}
}
}
+
+/**
+ * @internal
+ */
+class ExtractingEventDispatcher extends EventDispatcher implements EventSubscriberInterface
+{
+ public $listeners = array();
+
+ public static $subscriber;
+
+ public function addListener($eventName, $listener, $priority = 0)
+ {
+ $this->listeners[] = array($eventName, $listener[1], $priority);
+ }
+
+ public static function getSubscribedEvents()
+ {
+ $callback = array(self::$subscriber, 'getSubscribedEvents');
+
+ return $callback();
+ }
+}
diff --git a/vendor/symfony/event-dispatcher/Event.php b/vendor/symfony/event-dispatcher/Event.php
index 4a563495..9c56b2f5 100644
--- a/vendor/symfony/event-dispatcher/Event.php
+++ b/vendor/symfony/event-dispatcher/Event.php
@@ -33,21 +33,11 @@ class Event
private $propagationStopped = false;
/**
- * @var EventDispatcher Dispatcher that dispatched this event
- */
- private $dispatcher;
-
- /**
- * @var string This event's name
- */
- private $name;
-
- /**
* Returns whether further event listeners should be triggered.
*
* @see Event::stopPropagation()
*
- * @return bool Whether propagation was already stopped for this event.
+ * @return bool Whether propagation was already stopped for this event
*/
public function isPropagationStopped()
{
@@ -65,56 +55,4 @@ class Event
{
$this->propagationStopped = true;
}
-
- /**
- * Stores the EventDispatcher that dispatches this Event.
- *
- * @param EventDispatcherInterface $dispatcher
- *
- * @deprecated since version 2.4, to be removed in 3.0. The event dispatcher is passed to the listener call.
- */
- public function setDispatcher(EventDispatcherInterface $dispatcher)
- {
- $this->dispatcher = $dispatcher;
- }
-
- /**
- * Returns the EventDispatcher that dispatches this Event.
- *
- * @return EventDispatcherInterface
- *
- * @deprecated since version 2.4, to be removed in 3.0. The event dispatcher is passed to the listener call.
- */
- public function getDispatcher()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event dispatcher instance can be received in the listener call instead.', E_USER_DEPRECATED);
-
- return $this->dispatcher;
- }
-
- /**
- * Gets the event's name.
- *
- * @return string
- *
- * @deprecated since version 2.4, to be removed in 3.0. The event name is passed to the listener call.
- */
- public function getName()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event name can be received in the listener call instead.', E_USER_DEPRECATED);
-
- return $this->name;
- }
-
- /**
- * Sets the event's name property.
- *
- * @param string $name The event name.
- *
- * @deprecated since version 2.4, to be removed in 3.0. The event name is passed to the listener call.
- */
- public function setName($name)
- {
- $this->name = $name;
- }
}
diff --git a/vendor/symfony/event-dispatcher/EventDispatcher.php b/vendor/symfony/event-dispatcher/EventDispatcher.php
index f1b63f70..bc79a958 100644
--- a/vendor/symfony/event-dispatcher/EventDispatcher.php
+++ b/vendor/symfony/event-dispatcher/EventDispatcher.php
@@ -24,6 +24,7 @@ namespace Symfony\Component\EventDispatcher;
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author Jordan Alliot <jordan.alliot@gmail.com>
+ * @author Nicolas Grekas <p@tchwork.com>
*/
class EventDispatcher implements EventDispatcherInterface
{
@@ -39,9 +40,6 @@ class EventDispatcher implements EventDispatcherInterface
$event = new Event();
}
- $event->setDispatcher($this);
- $event->setName($eventName);
-
if ($listeners = $this->getListeners($eventName)) {
$this->doDispatch($listeners, $eventName, $event);
}
@@ -55,7 +53,7 @@ class EventDispatcher implements EventDispatcherInterface
public function getListeners($eventName = null)
{
if (null !== $eventName) {
- if (!isset($this->listeners[$eventName])) {
+ if (empty($this->listeners[$eventName])) {
return array();
}
@@ -78,9 +76,45 @@ class EventDispatcher implements EventDispatcherInterface
/**
* {@inheritdoc}
*/
+ public function getListenerPriority($eventName, $listener)
+ {
+ if (empty($this->listeners[$eventName])) {
+ return;
+ }
+
+ if (is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) {
+ $listener[0] = $listener[0]();
+ }
+
+ foreach ($this->listeners[$eventName] as $priority => $listeners) {
+ foreach ($listeners as $k => $v) {
+ if ($v !== $listener && is_array($v) && isset($v[0]) && $v[0] instanceof \Closure) {
+ $v[0] = $v[0]();
+ $this->listeners[$eventName][$priority][$k] = $v;
+ }
+ if ($v === $listener) {
+ return $priority;
+ }
+ }
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function hasListeners($eventName = null)
{
- return (bool) count($this->getListeners($eventName));
+ if (null !== $eventName) {
+ return !empty($this->listeners[$eventName]);
+ }
+
+ foreach ($this->listeners as $eventListeners) {
+ if ($eventListeners) {
+ return true;
+ }
+ }
+
+ return false;
}
/**
@@ -97,13 +131,30 @@ class EventDispatcher implements EventDispatcherInterface
*/
public function removeListener($eventName, $listener)
{
- if (!isset($this->listeners[$eventName])) {
+ if (empty($this->listeners[$eventName])) {
return;
}
+ if (is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) {
+ $listener[0] = $listener[0]();
+ }
+
foreach ($this->listeners[$eventName] as $priority => $listeners) {
- if (false !== ($key = array_search($listener, $listeners, true))) {
- unset($this->listeners[$eventName][$priority][$key], $this->sorted[$eventName]);
+ foreach ($listeners as $k => $v) {
+ if ($v !== $listener && is_array($v) && isset($v[0]) && $v[0] instanceof \Closure) {
+ $v[0] = $v[0]();
+ }
+ if ($v === $listener) {
+ unset($listeners[$k], $this->sorted[$eventName]);
+ } else {
+ $listeners[$k] = $v;
+ }
+ }
+
+ if ($listeners) {
+ $this->listeners[$eventName][$priority] = $listeners;
+ } else {
+ unset($this->listeners[$eventName][$priority]);
}
}
}
@@ -148,9 +199,9 @@ class EventDispatcher implements EventDispatcherInterface
* This method can be overridden to add functionality that is executed
* for each listener.
*
- * @param callable[] $listeners The event listeners.
- * @param string $eventName The name of the event to dispatch.
- * @param Event $event The event object to pass to the event handlers/listeners.
+ * @param callable[] $listeners The event listeners
+ * @param string $eventName The name of the event to dispatch
+ * @param Event $event The event object to pass to the event handlers/listeners
*/
protected function doDispatch($listeners, $eventName, Event $event)
{
@@ -158,20 +209,28 @@ class EventDispatcher implements EventDispatcherInterface
if ($event->isPropagationStopped()) {
break;
}
- call_user_func($listener, $event, $eventName, $this);
+ \call_user_func($listener, $event, $eventName, $this);
}
}
/**
* Sorts the internal list of listeners for the given event by priority.
*
- * @param string $eventName The name of the event.
+ * @param string $eventName The name of the event
*/
private function sortListeners($eventName)
{
+ krsort($this->listeners[$eventName]);
$this->sorted[$eventName] = array();
- krsort($this->listeners[$eventName]);
- $this->sorted[$eventName] = call_user_func_array('array_merge', $this->listeners[$eventName]);
+ foreach ($this->listeners[$eventName] as $priority => $listeners) {
+ foreach ($listeners as $k => $listener) {
+ if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) {
+ $listener[0] = $listener[0]();
+ $this->listeners[$eventName][$priority][$k] = $listener;
+ }
+ $this->sorted[$eventName][] = $listener;
+ }
+ }
}
}
diff --git a/vendor/symfony/event-dispatcher/EventDispatcherInterface.php b/vendor/symfony/event-dispatcher/EventDispatcherInterface.php
index a9bdd2c8..d3d0cb8a 100644
--- a/vendor/symfony/event-dispatcher/EventDispatcherInterface.php
+++ b/vendor/symfony/event-dispatcher/EventDispatcherInterface.php
@@ -26,8 +26,8 @@ interface EventDispatcherInterface
* @param string $eventName The name of the event to dispatch. The name of
* the event is the name of the method that is
* invoked on listeners.
- * @param Event $event The event to pass to the event handlers/listeners.
- * If not supplied, an empty Event instance is created.
+ * @param Event $event The event to pass to the event handlers/listeners
+ * If not supplied, an empty Event instance is created
*
* @return Event
*/
@@ -48,8 +48,6 @@ interface EventDispatcherInterface
*
* The subscriber is asked for all the events he is
* interested in and added as a listener for these events.
- *
- * @param EventSubscriberInterface $subscriber The subscriber.
*/
public function addSubscriber(EventSubscriberInterface $subscriber);
@@ -61,11 +59,6 @@ interface EventDispatcherInterface
*/
public function removeListener($eventName, $listener);
- /**
- * Removes an event subscriber.
- *
- * @param EventSubscriberInterface $subscriber The subscriber
- */
public function removeSubscriber(EventSubscriberInterface $subscriber);
/**
@@ -78,6 +71,18 @@ interface EventDispatcherInterface
public function getListeners($eventName = null);
/**
+ * Gets the listener priority for a specific event.
+ *
+ * Returns null if the event or the listener does not exist.
+ *
+ * @param string $eventName The name of the event
+ * @param callable $listener The listener
+ *
+ * @return int|null The event listener priority
+ */
+ public function getListenerPriority($eventName, $listener);
+
+ /**
* Checks whether an event has any registered listeners.
*
* @param string $eventName The name of the event
diff --git a/vendor/symfony/event-dispatcher/GenericEvent.php b/vendor/symfony/event-dispatcher/GenericEvent.php
index 03cbcfe3..95c99408 100644
--- a/vendor/symfony/event-dispatcher/GenericEvent.php
+++ b/vendor/symfony/event-dispatcher/GenericEvent.php
@@ -20,25 +20,14 @@ namespace Symfony\Component\EventDispatcher;
*/
class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
{
- /**
- * Event subject.
- *
- * @var mixed usually object or callable
- */
protected $subject;
-
- /**
- * Array of arguments.
- *
- * @var array
- */
protected $arguments;
/**
* Encapsulate an event with $subject and $args.
*
- * @param mixed $subject The subject of the event, usually an object.
- * @param array $arguments Arguments to store in the event.
+ * @param mixed $subject The subject of the event, usually an object or a callable
+ * @param array $arguments Arguments to store in the event
*/
public function __construct($subject = null, array $arguments = array())
{
@@ -49,7 +38,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* Getter for subject property.
*
- * @return mixed $subject The observer subject.
+ * @return mixed $subject The observer subject
*/
public function getSubject()
{
@@ -59,11 +48,11 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* Get argument by key.
*
- * @param string $key Key.
+ * @param string $key Key
*
- * @return mixed Contents of array key.
+ * @return mixed Contents of array key
*
- * @throws \InvalidArgumentException If key is not found.
+ * @throws \InvalidArgumentException if key is not found
*/
public function getArgument($key)
{
@@ -77,10 +66,10 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* Add argument to event.
*
- * @param string $key Argument name.
- * @param mixed $value Value.
+ * @param string $key Argument name
+ * @param mixed $value Value
*
- * @return GenericEvent
+ * @return $this
*/
public function setArgument($key, $value)
{
@@ -102,9 +91,9 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* Set args property.
*
- * @param array $args Arguments.
+ * @param array $args Arguments
*
- * @return GenericEvent
+ * @return $this
*/
public function setArguments(array $args = array())
{
@@ -116,7 +105,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* Has argument.
*
- * @param string $key Key of arguments array.
+ * @param string $key Key of arguments array
*
* @return bool
*/
@@ -128,11 +117,11 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* ArrayAccess for argument getter.
*
- * @param string $key Array key.
+ * @param string $key Array key
*
* @return mixed
*
- * @throws \InvalidArgumentException If key does not exist in $this->args.
+ * @throws \InvalidArgumentException if key does not exist in $this->args
*/
public function offsetGet($key)
{
@@ -142,8 +131,8 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* ArrayAccess for argument setter.
*
- * @param string $key Array key to set.
- * @param mixed $value Value.
+ * @param string $key Array key to set
+ * @param mixed $value Value
*/
public function offsetSet($key, $value)
{
@@ -153,7 +142,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* ArrayAccess for unset argument.
*
- * @param string $key Array key.
+ * @param string $key Array key
*/
public function offsetUnset($key)
{
@@ -165,7 +154,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
/**
* ArrayAccess has argument.
*
- * @param string $key Array key.
+ * @param string $key Array key
*
* @return bool
*/
diff --git a/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php b/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php
index 7ef9ece7..b3cf56c5 100644
--- a/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php
+++ b/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php
@@ -18,18 +18,8 @@ namespace Symfony\Component\EventDispatcher;
*/
class ImmutableEventDispatcher implements EventDispatcherInterface
{
- /**
- * The proxied dispatcher.
- *
- * @var EventDispatcherInterface
- */
private $dispatcher;
- /**
- * Creates an unmodifiable proxy for an event dispatcher.
- *
- * @param EventDispatcherInterface $dispatcher The proxied event dispatcher.
- */
public function __construct(EventDispatcherInterface $dispatcher)
{
$this->dispatcher = $dispatcher;
@@ -86,6 +76,14 @@ class ImmutableEventDispatcher implements EventDispatcherInterface
/**
* {@inheritdoc}
*/
+ public function getListenerPriority($eventName, $listener)
+ {
+ return $this->dispatcher->getListenerPriority($eventName, $listener);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function hasListeners($eventName = null)
{
return $this->dispatcher->hasListeners($eventName);
diff --git a/vendor/symfony/event-dispatcher/LICENSE b/vendor/symfony/event-dispatcher/LICENSE
index 12a74531..17d16a13 100644
--- a/vendor/symfony/event-dispatcher/LICENSE
+++ b/vendor/symfony/event-dispatcher/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2016 Fabien Potencier
+Copyright (c) 2004-2017 Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php b/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
index 2e4c3fd9..9443f216 100644
--- a/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
@@ -11,11 +11,12 @@
namespace Symfony\Component\EventDispatcher\Tests;
+use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-abstract class AbstractEventDispatcherTest extends \PHPUnit_Framework_TestCase
+abstract class AbstractEventDispatcherTest extends TestCase
{
/* Some pseudo events */
const preFoo = 'pre.foo';
@@ -55,6 +56,7 @@ abstract class AbstractEventDispatcherTest extends \PHPUnit_Framework_TestCase
{
$this->dispatcher->addListener('pre.foo', array($this->listener, 'preFoo'));
$this->dispatcher->addListener('post.foo', array($this->listener, 'postFoo'));
+ $this->assertTrue($this->dispatcher->hasListeners());
$this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
$this->assertTrue($this->dispatcher->hasListeners(self::postFoo));
$this->assertCount(1, $this->dispatcher->getListeners(self::preFoo));
@@ -108,6 +110,20 @@ abstract class AbstractEventDispatcherTest extends \PHPUnit_Framework_TestCase
$this->assertSame($expected, $this->dispatcher->getListeners());
}
+ public function testGetListenerPriority()
+ {
+ $listener1 = new TestEventListener();
+ $listener2 = new TestEventListener();
+
+ $this->dispatcher->addListener('pre.foo', $listener1, -10);
+ $this->dispatcher->addListener('pre.foo', $listener2);
+
+ $this->assertSame(-10, $this->dispatcher->getListenerPriority('pre.foo', $listener1));
+ $this->assertSame(0, $this->dispatcher->getListenerPriority('pre.foo', $listener2));
+ $this->assertNull($this->dispatcher->getListenerPriority('pre.bar', $listener2));
+ $this->assertNull($this->dispatcher->getListenerPriority('pre.foo', function () {}));
+ }
+
public function testDispatch()
{
$this->dispatcher->addListener('pre.foo', array($this->listener, 'preFoo'));
@@ -122,16 +138,6 @@ abstract class AbstractEventDispatcherTest extends \PHPUnit_Framework_TestCase
$this->assertSame($event, $return);
}
- /**
- * @group legacy
- */
- public function testLegacyDispatch()
- {
- $event = new Event();
- $return = $this->dispatcher->dispatch(self::preFoo, $event);
- $this->assertEquals('pre.foo', $event->getName());
- }
-
public function testDispatchForClosure()
{
$invoked = 0;
@@ -249,19 +255,6 @@ abstract class AbstractEventDispatcherTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
}
- /**
- * @group legacy
- */
- public function testLegacyEventReceivesTheDispatcherInstance()
- {
- $dispatcher = null;
- $this->dispatcher->addListener('test', function ($event) use (&$dispatcher) {
- $dispatcher = $event->getDispatcher();
- });
- $this->dispatcher->dispatch('test');
- $this->assertSame($this->dispatcher, $dispatcher);
- }
-
public function testEventReceivesTheDispatcherInstanceAsArgument()
{
$listener = new TestWithDispatcher();
@@ -310,6 +303,73 @@ abstract class AbstractEventDispatcherTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($this->dispatcher->hasListeners('foo'));
$this->assertFalse($this->dispatcher->hasListeners());
}
+
+ public function testHasListenersIsLazy()
+ {
+ $called = 0;
+ $listener = array(function () use (&$called) { ++$called; }, 'onFoo');
+ $this->dispatcher->addListener('foo', $listener);
+ $this->assertTrue($this->dispatcher->hasListeners());
+ $this->assertTrue($this->dispatcher->hasListeners('foo'));
+ $this->assertSame(0, $called);
+ }
+
+ public function testDispatchLazyListener()
+ {
+ $called = 0;
+ $factory = function () use (&$called) {
+ ++$called;
+
+ return new TestWithDispatcher();
+ };
+ $this->dispatcher->addListener('foo', array($factory, 'foo'));
+ $this->assertSame(0, $called);
+ $this->dispatcher->dispatch('foo', new Event());
+ $this->dispatcher->dispatch('foo', new Event());
+ $this->assertSame(1, $called);
+ }
+
+ public function testRemoveFindsLazyListeners()
+ {
+ $test = new TestWithDispatcher();
+ $factory = function () use ($test) { return $test; };
+
+ $this->dispatcher->addListener('foo', array($factory, 'foo'));
+ $this->assertTrue($this->dispatcher->hasListeners('foo'));
+ $this->dispatcher->removeListener('foo', array($test, 'foo'));
+ $this->assertFalse($this->dispatcher->hasListeners('foo'));
+
+ $this->dispatcher->addListener('foo', array($test, 'foo'));
+ $this->assertTrue($this->dispatcher->hasListeners('foo'));
+ $this->dispatcher->removeListener('foo', array($factory, 'foo'));
+ $this->assertFalse($this->dispatcher->hasListeners('foo'));
+ }
+
+ public function testPriorityFindsLazyListeners()
+ {
+ $test = new TestWithDispatcher();
+ $factory = function () use ($test) { return $test; };
+
+ $this->dispatcher->addListener('foo', array($factory, 'foo'), 3);
+ $this->assertSame(3, $this->dispatcher->getListenerPriority('foo', array($test, 'foo')));
+ $this->dispatcher->removeListener('foo', array($factory, 'foo'));
+
+ $this->dispatcher->addListener('foo', array($test, 'foo'), 5);
+ $this->assertSame(5, $this->dispatcher->getListenerPriority('foo', array($factory, 'foo')));
+ }
+
+ public function testGetLazyListeners()
+ {
+ $test = new TestWithDispatcher();
+ $factory = function () use ($test) { return $test; };
+
+ $this->dispatcher->addListener('foo', array($factory, 'foo'), 3);
+ $this->assertSame(array(array($test, 'foo')), $this->dispatcher->getListeners('foo'));
+
+ $this->dispatcher->removeListener('foo', array($test, 'foo'));
+ $this->dispatcher->addListener('bar', array($factory, 'foo'), 3);
+ $this->assertSame(array('bar' => array(array($test, 'foo'))), $this->dispatcher->getListeners());
+ }
}
class CallableClass
diff --git a/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php b/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php
index 0f3f5ba7..9d5eecc5 100644
--- a/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php
@@ -12,11 +12,13 @@
namespace Symfony\Component\EventDispatcher\Tests;
use Symfony\Component\DependencyInjection\Container;
-use Symfony\Component\DependencyInjection\Scope;
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+/**
+ * @group legacy
+ */
class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
{
protected function createEventDispatcher()
@@ -30,7 +32,7 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
{
$event = new Event();
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
+ $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
$service
->expects($this->once())
@@ -51,7 +53,7 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
{
$event = new Event();
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\SubscriberService');
+ $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\SubscriberService')->getMock();
$service
->expects($this->once())
@@ -86,7 +88,7 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
{
$event = new Event();
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
+ $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
$service
->expects($this->once())
@@ -104,73 +106,11 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
$dispatcher->dispatch('onEvent', $event);
}
- /**
- * @expectedException \InvalidArgumentException
- */
- public function testTriggerAListenerServiceOutOfScope()
- {
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
-
- $scope = new Scope('scope');
- $container = new Container();
- $container->addScope($scope);
- $container->enterScope('scope');
-
- $container->set('service.listener', $service, 'scope');
-
- $dispatcher = new ContainerAwareEventDispatcher($container);
- $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
-
- $container->leaveScope('scope');
- $dispatcher->dispatch('onEvent');
- }
-
- public function testReEnteringAScope()
- {
- $event = new Event();
-
- $service1 = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
-
- $service1
- ->expects($this->exactly(2))
- ->method('onEvent')
- ->with($event)
- ;
-
- $scope = new Scope('scope');
- $container = new Container();
- $container->addScope($scope);
- $container->enterScope('scope');
-
- $container->set('service.listener', $service1, 'scope');
-
- $dispatcher = new ContainerAwareEventDispatcher($container);
- $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
- $dispatcher->dispatch('onEvent', $event);
-
- $service2 = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
-
- $service2
- ->expects($this->once())
- ->method('onEvent')
- ->with($event)
- ;
-
- $container->enterScope('scope');
- $container->set('service.listener', $service2, 'scope');
-
- $dispatcher->dispatch('onEvent', $event);
-
- $container->leaveScope('scope');
-
- $dispatcher->dispatch('onEvent');
- }
-
public function testHasListenersOnLazyLoad()
{
$event = new Event();
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
+ $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
$container = new Container();
$container->set('service.listener', $service);
@@ -178,9 +118,6 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
$dispatcher = new ContainerAwareEventDispatcher($container);
$dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
- $event->setDispatcher($dispatcher);
- $event->setName('onEvent');
-
$service
->expects($this->once())
->method('onEvent')
@@ -196,7 +133,7 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
public function testGetListenersOnLazyLoad()
{
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
+ $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
$container = new Container();
$container->set('service.listener', $service);
@@ -206,14 +143,14 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
$listeners = $dispatcher->getListeners();
- $this->assertTrue(isset($listeners['onEvent']));
+ $this->assertArrayHasKey('onEvent', $listeners);
$this->assertCount(1, $dispatcher->getListeners('onEvent'));
}
public function testRemoveAfterDispatch()
{
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
+ $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
$container = new Container();
$container->set('service.listener', $service);
@@ -228,7 +165,7 @@ class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
public function testRemoveBeforeDispatch()
{
- $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service');
+ $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
$container = new Container();
$container->set('service.listener', $service);
diff --git a/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php b/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php
index 4aa6226e..53a3421a 100644
--- a/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\EventDispatcher\Tests\Debug;
+use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -18,14 +19,14 @@ use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\Stopwatch\Stopwatch;
-class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
+class TraceableEventDispatcherTest extends TestCase
{
public function testAddRemoveListener()
{
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
- $tdispatcher->addListener('foo', $listener = function () {; });
+ $tdispatcher->addListener('foo', $listener = function () {});
$listeners = $dispatcher->getListeners('foo');
$this->assertCount(1, $listeners);
$this->assertSame($listener, $listeners[0]);
@@ -39,7 +40,7 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
- $tdispatcher->addListener('foo', $listener = function () {; });
+ $tdispatcher->addListener('foo', $listener = function () {});
$this->assertSame($dispatcher->getListeners('foo'), $tdispatcher->getListeners('foo'));
}
@@ -51,11 +52,42 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($dispatcher->hasListeners('foo'));
$this->assertFalse($tdispatcher->hasListeners('foo'));
- $tdispatcher->addListener('foo', $listener = function () {; });
+ $tdispatcher->addListener('foo', $listener = function () {});
$this->assertTrue($dispatcher->hasListeners('foo'));
$this->assertTrue($tdispatcher->hasListeners('foo'));
}
+ public function testGetListenerPriority()
+ {
+ $dispatcher = new EventDispatcher();
+ $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
+
+ $tdispatcher->addListener('foo', function () {}, 123);
+
+ $listeners = $dispatcher->getListeners('foo');
+ $this->assertSame(123, $tdispatcher->getListenerPriority('foo', $listeners[0]));
+
+ // Verify that priority is preserved when listener is removed and re-added
+ // in preProcess() and postProcess().
+ $tdispatcher->dispatch('foo', new Event());
+ $listeners = $dispatcher->getListeners('foo');
+ $this->assertSame(123, $tdispatcher->getListenerPriority('foo', $listeners[0]));
+ }
+
+ public function testGetListenerPriorityWhileDispatching()
+ {
+ $tdispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
+ $priorityWhileDispatching = null;
+
+ $listener = function () use ($tdispatcher, &$priorityWhileDispatching, &$listener) {
+ $priorityWhileDispatching = $tdispatcher->getListenerPriority('bar', $listener);
+ };
+
+ $tdispatcher->addListener('bar', $listener, 5);
+ $tdispatcher->dispatch('bar');
+ $this->assertSame(5, $priorityWhileDispatching);
+ }
+
public function testAddRemoveSubscriber()
{
$dispatcher = new EventDispatcher();
@@ -74,19 +106,39 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
public function testGetCalledListeners()
{
- $dispatcher = new EventDispatcher();
- $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
- $tdispatcher->addListener('foo', $listener = function () {; });
+ $tdispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
+ $tdispatcher->addListener('foo', function () {}, 5);
+ $listeners = $tdispatcher->getNotCalledListeners();
+ $this->assertArrayHasKey('stub', $listeners['foo.closure']);
+ unset($listeners['foo.closure']['stub']);
$this->assertEquals(array(), $tdispatcher->getCalledListeners());
- $this->assertEquals(array('foo.closure' => array('event' => 'foo', 'type' => 'Closure', 'pretty' => 'closure')), $tdispatcher->getNotCalledListeners());
+ $this->assertEquals(array('foo.closure' => array('event' => 'foo', 'pretty' => 'closure', 'priority' => 5)), $listeners);
$tdispatcher->dispatch('foo');
- $this->assertEquals(array('foo.closure' => array('event' => 'foo', 'type' => 'Closure', 'pretty' => 'closure')), $tdispatcher->getCalledListeners());
+ $listeners = $tdispatcher->getCalledListeners();
+ $this->assertArrayHasKey('stub', $listeners['foo.closure']);
+ unset($listeners['foo.closure']['stub']);
+ $this->assertEquals(array('foo.closure' => array('event' => 'foo', 'pretty' => 'closure', 'priority' => 5)), $listeners);
$this->assertEquals(array(), $tdispatcher->getNotCalledListeners());
}
+ public function testClearCalledListeners()
+ {
+ $tdispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
+ $tdispatcher->addListener('foo', function () {}, 5);
+
+ $tdispatcher->dispatch('foo');
+ $tdispatcher->reset();
+
+ $listeners = $tdispatcher->getNotCalledListeners();
+ $this->assertArrayHasKey('stub', $listeners['foo.closure']);
+ unset($listeners['foo.closure']['stub']);
+ $this->assertEquals(array(), $tdispatcher->getCalledListeners());
+ $this->assertEquals(array('foo.closure' => array('event' => 'foo', 'pretty' => 'closure', 'priority' => 5)), $listeners);
+ }
+
public function testGetCalledListenersNested()
{
$tdispatcher = null;
@@ -103,31 +155,31 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
public function testLogger()
{
- $logger = $this->getMock('Psr\Log\LoggerInterface');
+ $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
- $tdispatcher->addListener('foo', $listener1 = function () {; });
- $tdispatcher->addListener('foo', $listener2 = function () {; });
+ $tdispatcher->addListener('foo', $listener1 = function () {});
+ $tdispatcher->addListener('foo', $listener2 = function () {});
- $logger->expects($this->at(0))->method('debug')->with('Notified event "foo" to listener "closure".');
- $logger->expects($this->at(1))->method('debug')->with('Notified event "foo" to listener "closure".');
+ $logger->expects($this->at(0))->method('debug')->with('Notified event "{event}" to listener "{listener}".', array('event' => 'foo', 'listener' => 'closure'));
+ $logger->expects($this->at(1))->method('debug')->with('Notified event "{event}" to listener "{listener}".', array('event' => 'foo', 'listener' => 'closure'));
$tdispatcher->dispatch('foo');
}
public function testLoggerWithStoppedEvent()
{
- $logger = $this->getMock('Psr\Log\LoggerInterface');
+ $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
$tdispatcher->addListener('foo', $listener1 = function (Event $event) { $event->stopPropagation(); });
- $tdispatcher->addListener('foo', $listener2 = function () {; });
+ $tdispatcher->addListener('foo', $listener2 = function () {});
- $logger->expects($this->at(0))->method('debug')->with('Notified event "foo" to listener "closure".');
- $logger->expects($this->at(1))->method('debug')->with('Listener "closure" stopped propagation of the event "foo".');
- $logger->expects($this->at(2))->method('debug')->with('Listener "closure" was not called for event "foo".');
+ $logger->expects($this->at(0))->method('debug')->with('Notified event "{event}" to listener "{listener}".', array('event' => 'foo', 'listener' => 'closure'));
+ $logger->expects($this->at(1))->method('debug')->with('Listener "{listener}" stopped propagation of the event "{event}".', array('event' => 'foo', 'listener' => 'closure'));
+ $logger->expects($this->at(2))->method('debug')->with('Listener "{listener}" was not called for event "{event}".', array('event' => 'foo', 'listener' => 'closure'));
$tdispatcher->dispatch('foo');
}
@@ -138,26 +190,32 @@ class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
$dispatcher = new EventDispatcher();
$tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
- $tdispatcher->addListener('foo', $listener1 = function () use (&$called) { $called[] = 'foo1'; });
- $tdispatcher->addListener('foo', $listener2 = function () use (&$called) { $called[] = 'foo2'; });
+ $tdispatcher->addListener('foo', function () use (&$called) { $called[] = 'foo1'; }, 10);
+ $tdispatcher->addListener('foo', function () use (&$called) { $called[] = 'foo2'; }, 20);
$tdispatcher->dispatch('foo');
- $this->assertEquals(array('foo1', 'foo2'), $called);
+ $this->assertSame(array('foo2', 'foo1'), $called);
}
public function testDispatchNested()
{
$dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
$loop = 1;
+ $dispatchedEvents = 0;
$dispatcher->addListener('foo', $listener1 = function () use ($dispatcher, &$loop) {
++$loop;
if (2 == $loop) {
$dispatcher->dispatch('foo');
}
});
+ $dispatcher->addListener('foo', function () use (&$dispatchedEvents) {
+ ++$dispatchedEvents;
+ });
$dispatcher->dispatch('foo');
+
+ $this->assertSame(2, $dispatchedEvents);
}
public function testDispatchReusedEventNested()
diff --git a/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php b/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
index 0fdd6372..dbb1aa5c 100644
--- a/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
@@ -11,10 +11,13 @@
namespace Symfony\Component\EventDispatcher\Tests\DependencyInjection;
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
-class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
+class RegisterListenersPassTest extends TestCase
{
/**
* Tests that event subscribers not implementing EventSubscriberInterface
@@ -29,18 +32,12 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
'my_event_subscriber' => array(0 => array()),
);
- $definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
- $definition->expects($this->atLeastOnce())
- ->method('isPublic')
- ->will($this->returnValue(true));
+ $definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
$definition->expects($this->atLeastOnce())
->method('getClass')
->will($this->returnValue('stdClass'));
- $builder = $this->getMock(
- 'Symfony\Component\DependencyInjection\ContainerBuilder',
- array('hasDefinition', 'findTaggedServiceIds', 'getDefinition')
- );
+ $builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
$builder->expects($this->any())
->method('hasDefinition')
->will($this->returnValue(true));
@@ -64,18 +61,12 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
'my_event_subscriber' => array(0 => array()),
);
- $definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
- $definition->expects($this->atLeastOnce())
- ->method('isPublic')
- ->will($this->returnValue(true));
+ $definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
$definition->expects($this->atLeastOnce())
->method('getClass')
->will($this->returnValue('Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService'));
- $builder = $this->getMock(
- 'Symfony\Component\DependencyInjection\ContainerBuilder',
- array('hasDefinition', 'findTaggedServiceIds', 'getDefinition', 'findDefinition')
- );
+ $builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition', 'findDefinition'))->getMock();
$builder->expects($this->any())
->method('hasDefinition')
->will($this->returnValue(true));
@@ -99,35 +90,7 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException \InvalidArgumentException
- * @expectedExceptionMessage The service "foo" must be public as event listeners are lazy-loaded.
- */
- public function testPrivateEventListener()
- {
- $container = new ContainerBuilder();
- $container->register('foo', 'stdClass')->setPublic(false)->addTag('kernel.event_listener', array());
- $container->register('event_dispatcher', 'stdClass');
-
- $registerListenersPass = new RegisterListenersPass();
- $registerListenersPass->process($container);
- }
-
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage The service "foo" must be public as event subscribers are lazy-loaded.
- */
- public function testPrivateEventSubscriber()
- {
- $container = new ContainerBuilder();
- $container->register('foo', 'stdClass')->setPublic(false)->addTag('kernel.event_subscriber', array());
- $container->register('event_dispatcher', 'stdClass');
-
- $registerListenersPass = new RegisterListenersPass();
- $registerListenersPass->process($container);
- }
-
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage The service "foo" must not be abstract as event listeners are lazy-loaded.
+ * @expectedExceptionMessage The service "foo" tagged "kernel.event_listener" must not be abstract.
*/
public function testAbstractEventListener()
{
@@ -141,7 +104,7 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException \InvalidArgumentException
- * @expectedExceptionMessage The service "foo" must not be abstract as event subscribers are lazy-loaded.
+ * @expectedExceptionMessage The service "foo" tagged "kernel.event_subscriber" must not be abstract.
*/
public function testAbstractEventSubscriber()
{
@@ -165,16 +128,29 @@ class RegisterListenersPassTest extends \PHPUnit_Framework_TestCase
$registerListenersPass->process($container);
$definition = $container->getDefinition('event_dispatcher');
- $expected_calls = array(
+ $expectedCalls = array(
array(
- 'addSubscriberService',
+ 'addListener',
array(
- 'foo',
- 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService',
+ 'event',
+ array(new ServiceClosureArgument(new Reference('foo')), 'onEvent'),
+ 0,
),
),
);
- $this->assertSame($expected_calls, $definition->getMethodCalls());
+ $this->assertEquals($expectedCalls, $definition->getMethodCalls());
+ }
+
+ public function testHotPathEvents()
+ {
+ $container = new ContainerBuilder();
+
+ $container->register('foo', SubscriberService::class)->addTag('kernel.event_subscriber', array());
+ $container->register('event_dispatcher', 'stdClass');
+
+ (new RegisterListenersPass())->setHotPathEvents(array('event'))->process($container);
+
+ $this->assertTrue($container->getDefinition('foo')->hasTag('container.hot_path'));
}
/**
@@ -196,5 +172,8 @@ class SubscriberService implements \Symfony\Component\EventDispatcher\EventSubsc
{
public static function getSubscribedEvents()
{
+ return array(
+ 'event' => 'onEvent',
+ );
}
}
diff --git a/vendor/symfony/event-dispatcher/Tests/EventTest.php b/vendor/symfony/event-dispatcher/Tests/EventTest.php
index 9a822670..5be2ea09 100644
--- a/vendor/symfony/event-dispatcher/Tests/EventTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/EventTest.php
@@ -11,13 +11,13 @@
namespace Symfony\Component\EventDispatcher\Tests;
+use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\Event;
-use Symfony\Component\EventDispatcher\EventDispatcher;
/**
* Test class for Event.
*/
-class EventTest extends \PHPUnit_Framework_TestCase
+class EventTest extends TestCase
{
/**
* @var \Symfony\Component\EventDispatcher\Event
@@ -25,18 +25,12 @@ class EventTest extends \PHPUnit_Framework_TestCase
protected $event;
/**
- * @var \Symfony\Component\EventDispatcher\EventDispatcher
- */
- protected $dispatcher;
-
- /**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->event = new Event();
- $this->dispatcher = new EventDispatcher();
}
/**
@@ -46,7 +40,6 @@ class EventTest extends \PHPUnit_Framework_TestCase
protected function tearDown()
{
$this->event = null;
- $this->dispatcher = null;
}
public function testIsPropagationStopped()
@@ -59,38 +52,4 @@ class EventTest extends \PHPUnit_Framework_TestCase
$this->event->stopPropagation();
$this->assertTrue($this->event->isPropagationStopped());
}
-
- /**
- * @group legacy
- */
- public function testLegacySetDispatcher()
- {
- $this->event->setDispatcher($this->dispatcher);
- $this->assertSame($this->dispatcher, $this->event->getDispatcher());
- }
-
- /**
- * @group legacy
- */
- public function testLegacyGetDispatcher()
- {
- $this->assertNull($this->event->getDispatcher());
- }
-
- /**
- * @group legacy
- */
- public function testLegacyGetName()
- {
- $this->assertNull($this->event->getName());
- }
-
- /**
- * @group legacy
- */
- public function testLegacySetName()
- {
- $this->event->setName('foo');
- $this->assertEquals('foo', $this->event->getName());
- }
}
diff --git a/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php b/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
index aebd82da..9cf68c98 100644
--- a/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
@@ -11,12 +11,13 @@
namespace Symfony\Component\EventDispatcher\Tests;
+use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\GenericEvent;
/**
* Test class for Event.
*/
-class GenericEventTest extends \PHPUnit_Framework_TestCase
+class GenericEventTest extends TestCase
{
/**
* @var GenericEvent
@@ -95,7 +96,7 @@ class GenericEventTest extends \PHPUnit_Framework_TestCase
$this->assertEquals('Event', $this->event['name']);
// test getting invalid arg
- $this->setExpectedException('InvalidArgumentException');
+ $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
$this->assertFalse($this->event['nameNotExist']);
}
@@ -113,8 +114,8 @@ class GenericEventTest extends \PHPUnit_Framework_TestCase
public function testOffsetIsset()
{
- $this->assertTrue(isset($this->event['name']));
- $this->assertFalse(isset($this->event['nameNotExist']));
+ $this->assertArrayHasKey('name', $this->event);
+ $this->assertArrayNotHasKey('nameNotExist', $this->event);
}
public function testHasArgument()
diff --git a/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php b/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
index 80a7e43b..04f2861e 100644
--- a/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
@@ -11,13 +11,14 @@
namespace Symfony\Component\EventDispatcher\Tests;
+use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\ImmutableEventDispatcher;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
*/
-class ImmutableEventDispatcherTest extends \PHPUnit_Framework_TestCase
+class ImmutableEventDispatcherTest extends TestCase
{
/**
* @var \PHPUnit_Framework_MockObject_MockObject
@@ -31,7 +32,7 @@ class ImmutableEventDispatcherTest extends \PHPUnit_Framework_TestCase
protected function setUp()
{
- $this->innerDispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
+ $this->innerDispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();
$this->dispatcher = new ImmutableEventDispatcher($this->innerDispatcher);
}
@@ -80,7 +81,7 @@ class ImmutableEventDispatcherTest extends \PHPUnit_Framework_TestCase
*/
public function testAddSubscriberDisallowed()
{
- $subscriber = $this->getMock('Symfony\Component\EventDispatcher\EventSubscriberInterface');
+ $subscriber = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventSubscriberInterface')->getMock();
$this->dispatcher->addSubscriber($subscriber);
}
@@ -98,7 +99,7 @@ class ImmutableEventDispatcherTest extends \PHPUnit_Framework_TestCase
*/
public function testRemoveSubscriberDisallowed()
{
- $subscriber = $this->getMock('Symfony\Component\EventDispatcher\EventSubscriberInterface');
+ $subscriber = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventSubscriberInterface')->getMock();
$this->dispatcher->removeSubscriber($subscriber);
}
diff --git a/vendor/symfony/event-dispatcher/composer.json b/vendor/symfony/event-dispatcher/composer.json
index 3a20c35f..75b881b9 100644
--- a/vendor/symfony/event-dispatcher/composer.json
+++ b/vendor/symfony/event-dispatcher/composer.json
@@ -16,15 +16,18 @@
}
],
"require": {
- "php": ">=5.3.9"
+ "php": "^5.5.9|>=7.0.8"
},
"require-dev": {
- "symfony/dependency-injection": "~2.6",
- "symfony/expression-language": "~2.6",
- "symfony/config": "~2.0,>=2.0.5",
- "symfony/stopwatch": "~2.3",
+ "symfony/dependency-injection": "~3.3|~4.0",
+ "symfony/expression-language": "~2.8|~3.0|~4.0",
+ "symfony/config": "~2.8|~3.0|~4.0",
+ "symfony/stopwatch": "~2.8|~3.0|~4.0",
"psr/log": "~1.0"
},
+ "conflict": {
+ "symfony/dependency-injection": "<3.3"
+ },
"suggest": {
"symfony/dependency-injection": "",
"symfony/http-kernel": ""
@@ -38,7 +41,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "3.4-dev"
}
}
}
diff --git a/vendor/symfony/event-dispatcher/phpunit.xml.dist b/vendor/symfony/event-dispatcher/phpunit.xml.dist
index ae0586e0..b3ad1bdf 100644
--- a/vendor/symfony/event-dispatcher/phpunit.xml.dist
+++ b/vendor/symfony/event-dispatcher/phpunit.xml.dist
@@ -5,6 +5,8 @@
backupGlobals="false"
colors="true"
bootstrap="vendor/autoload.php"
+ failOnRisky="true"
+ failOnWarning="true"
>
<php>
<ini name="error_reporting" value="-1" />