ContainerAwareTraceableEventDispatcherTest.php

Namespace

Symfony\Component\HttpKernel\Tests\Debug

File

drupal/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/ContainerAwareTraceableEventDispatcherTest.php
View source
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Symfony\Component\HttpKernel\Tests\Debug;

use Symfony\Component\HttpKernel\Debug\ContainerAwareTraceableEventDispatcher;
use Symfony\Component\HttpKernel\Debug\Stopwatch;
class ContainerAwareTraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase {
  protected function setUp() {
    if (!class_exists('Symfony\\Component\\DependencyInjection\\Container')) {
      $this
        ->markTestSkipped('The "DependencyInjection" component is not available');
    }
    if (!class_exists('Symfony\\Component\\HttpKernel\\HttpKernel')) {
      $this
        ->markTestSkipped('The "HttpKernel" component is not available');
    }
  }

  /**
   * @expectedException \RuntimeException
   */
  public function testThrowsAnExceptionWhenAListenerMethodIsNotCallable() {
    $container = $this
      ->getMock('Symfony\\Component\\DependencyInjection\\ContainerInterface');
    $dispatcher = new ContainerAwareTraceableEventDispatcher($container, new Stopwatch());
    $dispatcher
      ->addListener('onFooEvent', new \stdClass());
  }
  public function testClosureDoesNotTriggerErrorNotice() {
    $container = $this
      ->getMock('Symfony\\Component\\DependencyInjection\\ContainerInterface');
    $dispatcher = new ContainerAwareTraceableEventDispatcher($container, new StopWatch());
    $triggered = false;
    $dispatcher
      ->addListener('onFooEvent', function () use (&$triggered) {
      $triggered = true;
    });
    try {
      $dispatcher
        ->dispatch('onFooEvent');
    } catch (\PHPUnit_Framework_Error_Notice $e) {
      $this
        ->fail($e
        ->getMessage());
    }
    $this
      ->assertTrue($triggered, 'Closure should have been executed upon dispatch');
  }
  public function testStaticCallable() {
    $container = $this
      ->getMock('Symfony\\Component\\DependencyInjection\\ContainerInterface');
    $dispatcher = new ContainerAwareTraceableEventDispatcher($container, new StopWatch());
    $dispatcher
      ->addListener('onFooEvent', array(
      __NAMESPACE__ . '\\StaticClassFixture',
      'staticListener',
    ));
    $dispatcher
      ->dispatch('onFooEvent');
    $this
      ->assertTrue(StaticClassFixture::$called);
  }

}
class StaticClassFixture {
  public static $called = false;
  public static function staticListener($event) {
    self::$called = true;
  }

}

Classes