* @copyright 2012-2013 Jurian Sluiman. * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @link http://juriansluiman.nl */ namespace SlmLocaleTest\Locale; use Laminas\Http\Header\AcceptLanguage; use Laminas\Http\Request as HttpRequest; use PHPUnit\Framework\TestCase; use SlmLocale\LocaleEvent; use SlmLocale\Strategy\HttpAcceptLanguageStrategy; class HttpAcceptLanguageStrategyTest extends TestCase { protected $strategy; protected $event; public function setUp(): void { $this->strategy = new HttpAcceptLanguageStrategy(); $this->event = new LocaleEvent(); $this->event->setRequest(new HttpRequest()); } public function testReturnsVoidWhenHeaderIsNotPresent() { $strategy = $this->strategy; $event = $this->event; $locale = $strategy->detect($event); $this->assertNull($locale); } public function testReturnsFirstLanguageByDefault() { $strategy = $this->strategy; $event = $this->event; $header = new AcceptLanguage(); $header->addLanguage('foo'); $event->getRequest() ->getHeaders() ->addHeader($header); $locale = $strategy->detect($event); $this->assertEquals('foo', $locale); } public function testDetectsLanguageInPriorityOrder() { $strategy = $this->strategy; $event = $this->event; $header = new AcceptLanguage(); $header->addLanguage('foo', 0.6); $header->addLanguage('bar', 1); $header->addLanguage('baz', 0.8); $event->getRequest() ->getHeaders() ->addHeader($header); $locale = $strategy->detect($event); $this->assertEquals('bar', $locale); } public function testSelectsOnlyLanguageFromSupportedList() { $strategy = $this->strategy; $event = $this->event; $header = new AcceptLanguage(); $header->addLanguage('foo', 1); $header->addLanguage('bar', 0.8); $header->addLanguage('baz', 0.6); $event->getRequest() ->getHeaders() ->addHeader($header); $event->setSupported(['bar']); $locale = $strategy->detect($event); $this->assertEquals('bar', $locale); } public function testSelectsLanguageViaLocaleLookup() { $strategy = $this->strategy; $event = $this->event; $header = new AcceptLanguage(); $header->addLanguage('de-DE', 1); $header->addLanguage('en-US', 0.8); $header->addLanguage('en', 0.6); $event->getRequest() ->getHeaders() ->addHeader($header); $event->setSupported(['en', 'de']); $locale = $strategy->detect($event); $this->assertEquals('de', $locale); } }