4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\HttpKernel\Tests\EventListener;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\HttpKernel\EventListener\ResponseListener;
16 use Symfony\Component\HttpFoundation\Request;
17 use Symfony\Component\HttpFoundation\Response;
18 use Symfony\Component\HttpKernel\HttpKernelInterface;
19 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
20 use Symfony\Component\HttpKernel\KernelEvents;
21 use Symfony\Component\EventDispatcher\EventDispatcher;
23 class ResponseListenerTest extends TestCase
29 protected function setUp()
31 $this->dispatcher = new EventDispatcher();
32 $listener = new ResponseListener('UTF-8');
33 $this->dispatcher->addListener(KernelEvents::RESPONSE, array($listener, 'onKernelResponse'));
35 $this->kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
38 protected function tearDown()
40 $this->dispatcher = null;
44 public function testFilterDoesNothingForSubRequests()
46 $response = new Response('foo');
48 $event = new FilterResponseEvent($this->kernel, new Request(), HttpKernelInterface::SUB_REQUEST, $response);
49 $this->dispatcher->dispatch(KernelEvents::RESPONSE, $event);
51 $this->assertEquals('', $event->getResponse()->headers->get('content-type'));
54 public function testFilterSetsNonDefaultCharsetIfNotOverridden()
56 $listener = new ResponseListener('ISO-8859-15');
57 $this->dispatcher->addListener(KernelEvents::RESPONSE, array($listener, 'onKernelResponse'), 1);
59 $response = new Response('foo');
61 $event = new FilterResponseEvent($this->kernel, Request::create('/'), HttpKernelInterface::MASTER_REQUEST, $response);
62 $this->dispatcher->dispatch(KernelEvents::RESPONSE, $event);
64 $this->assertEquals('ISO-8859-15', $response->getCharset());
67 public function testFilterDoesNothingIfCharsetIsOverridden()
69 $listener = new ResponseListener('ISO-8859-15');
70 $this->dispatcher->addListener(KernelEvents::RESPONSE, array($listener, 'onKernelResponse'), 1);
72 $response = new Response('foo');
73 $response->setCharset('ISO-8859-1');
75 $event = new FilterResponseEvent($this->kernel, Request::create('/'), HttpKernelInterface::MASTER_REQUEST, $response);
76 $this->dispatcher->dispatch(KernelEvents::RESPONSE, $event);
78 $this->assertEquals('ISO-8859-1', $response->getCharset());
81 public function testFiltersSetsNonDefaultCharsetIfNotOverriddenOnNonTextContentType()
83 $listener = new ResponseListener('ISO-8859-15');
84 $this->dispatcher->addListener(KernelEvents::RESPONSE, array($listener, 'onKernelResponse'), 1);
86 $response = new Response('foo');
87 $request = Request::create('/');
88 $request->setRequestFormat('application/json');
90 $event = new FilterResponseEvent($this->kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response);
91 $this->dispatcher->dispatch(KernelEvents::RESPONSE, $event);
93 $this->assertEquals('ISO-8859-15', $response->getCharset());