* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpKernel\Tests\EventListener; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\FinishRequestEvent; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\EventListener\TranslatorListener; use Symfony\Component\HttpKernel\HttpKernelInterface; class TranslatorListenerTest extends TestCase { private $listener; private $translator; private $requestStack; protected function setUp() { $this->translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface')->getMock(); $this->requestStack = $this->getMockBuilder('Symfony\Component\HttpFoundation\RequestStack')->getMock(); $this->listener = new TranslatorListener($this->translator, $this->requestStack); } public function testLocaleIsSetInOnKernelRequest() { $this->translator ->expects($this->once()) ->method('setLocale') ->with($this->equalTo('fr')); $event = new GetResponseEvent($this->createHttpKernel(), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST); $this->listener->onKernelRequest($event); } public function testDefaultLocaleIsUsedOnExceptionsInOnKernelRequest() { $this->translator ->expects($this->at(0)) ->method('setLocale') ->will($this->throwException(new \InvalidArgumentException())); $this->translator ->expects($this->at(1)) ->method('setLocale') ->with($this->equalTo('en')); $event = new GetResponseEvent($this->createHttpKernel(), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST); $this->listener->onKernelRequest($event); } public function testLocaleIsSetInOnKernelFinishRequestWhenParentRequestExists() { $this->translator ->expects($this->once()) ->method('setLocale') ->with($this->equalTo('fr')); $this->setMasterRequest($this->createRequest('fr')); $event = new FinishRequestEvent($this->createHttpKernel(), $this->createRequest('de'), HttpKernelInterface::SUB_REQUEST); $this->listener->onKernelFinishRequest($event); } public function testLocaleIsNotSetInOnKernelFinishRequestWhenParentRequestDoesNotExist() { $this->translator ->expects($this->never()) ->method('setLocale'); $event = new FinishRequestEvent($this->createHttpKernel(), $this->createRequest('de'), HttpKernelInterface::SUB_REQUEST); $this->listener->onKernelFinishRequest($event); } public function testDefaultLocaleIsUsedOnExceptionsInOnKernelFinishRequest() { $this->translator ->expects($this->at(0)) ->method('setLocale') ->will($this->throwException(new \InvalidArgumentException())); $this->translator ->expects($this->at(1)) ->method('setLocale') ->with($this->equalTo('en')); $this->setMasterRequest($this->createRequest('fr')); $event = new FinishRequestEvent($this->createHttpKernel(), $this->createRequest('de'), HttpKernelInterface::SUB_REQUEST); $this->listener->onKernelFinishRequest($event); } private function createHttpKernel() { return $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock(); } private function createRequest($locale) { $request = new Request(); $request->setLocale($locale); return $request; } private function setMasterRequest($request) { $this->requestStack ->expects($this->any()) ->method('getParentRequest') ->will($this->returnValue($request)); } }