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\HttpFoundation\Request;
16 use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
17 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
18 use Symfony\Component\HttpKernel\EventListener\TranslatorListener;
19 use Symfony\Component\HttpKernel\HttpKernelInterface;
21 class TranslatorListenerTest extends TestCase
25 private $requestStack;
27 protected function setUp()
29 $this->translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface')->getMock();
30 $this->requestStack = $this->getMockBuilder('Symfony\Component\HttpFoundation\RequestStack')->getMock();
31 $this->listener = new TranslatorListener($this->translator, $this->requestStack);
34 public function testLocaleIsSetInOnKernelRequest()
37 ->expects($this->once())
39 ->with($this->equalTo('fr'));
41 $event = new GetResponseEvent($this->createHttpKernel(), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST);
42 $this->listener->onKernelRequest($event);
45 public function testDefaultLocaleIsUsedOnExceptionsInOnKernelRequest()
48 ->expects($this->at(0))
50 ->will($this->throwException(new \InvalidArgumentException()));
52 ->expects($this->at(1))
54 ->with($this->equalTo('en'));
56 $event = new GetResponseEvent($this->createHttpKernel(), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST);
57 $this->listener->onKernelRequest($event);
60 public function testLocaleIsSetInOnKernelFinishRequestWhenParentRequestExists()
63 ->expects($this->once())
65 ->with($this->equalTo('fr'));
67 $this->setMasterRequest($this->createRequest('fr'));
68 $event = new FinishRequestEvent($this->createHttpKernel(), $this->createRequest('de'), HttpKernelInterface::SUB_REQUEST);
69 $this->listener->onKernelFinishRequest($event);
72 public function testLocaleIsNotSetInOnKernelFinishRequestWhenParentRequestDoesNotExist()
75 ->expects($this->never())
76 ->method('setLocale');
78 $event = new FinishRequestEvent($this->createHttpKernel(), $this->createRequest('de'), HttpKernelInterface::SUB_REQUEST);
79 $this->listener->onKernelFinishRequest($event);
82 public function testDefaultLocaleIsUsedOnExceptionsInOnKernelFinishRequest()
85 ->expects($this->at(0))
87 ->will($this->throwException(new \InvalidArgumentException()));
89 ->expects($this->at(1))
91 ->with($this->equalTo('en'));
93 $this->setMasterRequest($this->createRequest('fr'));
94 $event = new FinishRequestEvent($this->createHttpKernel(), $this->createRequest('de'), HttpKernelInterface::SUB_REQUEST);
95 $this->listener->onKernelFinishRequest($event);
98 private function createHttpKernel()
100 return $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
103 private function createRequest($locale)
105 $request = new Request();
106 $request->setLocale($locale);
111 private function setMasterRequest($request)
114 ->expects($this->any())
115 ->method('getParentRequest')
116 ->will($this->returnValue($request));