From 64029816c5141ddad5dadf78258247782d0ec67c Mon Sep 17 00:00:00 2001 From: "justus.graf" Date: Wed, 28 Oct 2020 11:53:17 +0100 Subject: [PATCH 1/4] PHP 8 Support - drop support for unmaintained php versions - update requirements for newer php versions - added newer php versions to travis config --- .travis.yml | 14 +++------ composer.json | 4 +-- phpunit.xml.dist | 30 +++++++------------ .../Tests/AcceptLanguageTest.php | 4 +-- .../Tests/BrowserDetectorTest.php | 4 +-- tests/BrowserDetector/Tests/BrowserTest.php | 4 +-- .../Tests/DeviceDetectorTest.php | 6 ++-- tests/BrowserDetector/Tests/DeviceTest.php | 4 +-- tests/BrowserDetector/Tests/LanguageTest.php | 13 ++++---- .../BrowserDetector/Tests/OsDetectorTest.php | 4 +-- tests/BrowserDetector/Tests/OsTest.php | 11 ++++--- tests/BrowserDetector/Tests/UserAgentTest.php | 4 +-- 12 files changed, 42 insertions(+), 60 deletions(-) diff --git a/.travis.yml b/.travis.yml index d4652a0..aa5f09d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,12 +4,10 @@ env: - APP_ENV=travis php: - - 5.3.3 - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 + - 7.2 + - 7.3 + - 7.4 + - nightly #php 8 - hhvm before_script: @@ -17,7 +15,3 @@ before_script: script: - phpunit - -matrix: - allow_failures: - - php: 5.3.3 diff --git a/composer.json b/composer.json index 07b268f..71a062a 100644 --- a/composer.json +++ b/composer.json @@ -13,10 +13,10 @@ } ], "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=7.2" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^8.0 || ^9.4" }, "autoload": { "psr-4": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index ac97188..b76d52d 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,26 +1,18 @@ - + + + + ./src + + ./tests - - - ./src - - diff --git a/tests/BrowserDetector/Tests/AcceptLanguageTest.php b/tests/BrowserDetector/Tests/AcceptLanguageTest.php index 06c2e8c..4234b35 100644 --- a/tests/BrowserDetector/Tests/AcceptLanguageTest.php +++ b/tests/BrowserDetector/Tests/AcceptLanguageTest.php @@ -2,10 +2,10 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\AcceptLanguage; -class AcceptLanguageTest extends PHPUnit_Framework_TestCase +class AcceptLanguageTest extends TestCase { public function testObject() { diff --git a/tests/BrowserDetector/Tests/BrowserDetectorTest.php b/tests/BrowserDetector/Tests/BrowserDetectorTest.php index 7df0988..07fe46e 100644 --- a/tests/BrowserDetector/Tests/BrowserDetectorTest.php +++ b/tests/BrowserDetector/Tests/BrowserDetectorTest.php @@ -2,10 +2,10 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\Browser; -class BrowserDetectorTest extends PHPUnit_Framework_TestCase +class BrowserDetectorTest extends TestCase { public function testDetect() { diff --git a/tests/BrowserDetector/Tests/BrowserTest.php b/tests/BrowserDetector/Tests/BrowserTest.php index 9104acd..59572cc 100644 --- a/tests/BrowserDetector/Tests/BrowserTest.php +++ b/tests/BrowserDetector/Tests/BrowserTest.php @@ -2,11 +2,11 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\Browser; // todo: move to browser detector tests -class BrowserTest extends PHPUnit_Framework_TestCase +class BrowserTest extends TestCase { public function testBlackBerry() { diff --git a/tests/BrowserDetector/Tests/DeviceDetectorTest.php b/tests/BrowserDetector/Tests/DeviceDetectorTest.php index 39990b6..63fced1 100644 --- a/tests/BrowserDetector/Tests/DeviceDetectorTest.php +++ b/tests/BrowserDetector/Tests/DeviceDetectorTest.php @@ -2,12 +2,10 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\Device; -use Sinergi\BrowserDetector\DeviceDetector; -use Sinergi\BrowserDetector\UserAgent; -class DeviceDetectorTest extends PHPUnit_Framework_TestCase +class DeviceDetectorTest extends TestCase { public function testDeviceDetect() { diff --git a/tests/BrowserDetector/Tests/DeviceTest.php b/tests/BrowserDetector/Tests/DeviceTest.php index bf9310b..4be0b67 100644 --- a/tests/BrowserDetector/Tests/DeviceTest.php +++ b/tests/BrowserDetector/Tests/DeviceTest.php @@ -2,10 +2,10 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\Device; -class DeviceTest extends PHPUnit_Framework_TestCase +class DeviceTest extends TestCase { public function testDevice() { diff --git a/tests/BrowserDetector/Tests/LanguageTest.php b/tests/BrowserDetector/Tests/LanguageTest.php index 2d6aaf7..85ec230 100644 --- a/tests/BrowserDetector/Tests/LanguageTest.php +++ b/tests/BrowserDetector/Tests/LanguageTest.php @@ -2,18 +2,19 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\AcceptLanguage; +use Sinergi\BrowserDetector\InvalidArgumentException; use Sinergi\BrowserDetector\Language; -class LanguageTest extends PHPUnit_Framework_TestCase +class LanguageTest extends TestCase { /** * @var Language */ private $language; - public function setUp() + public function setUp(): void { $httpAcceptLanguage = 'fr-CA,fr;q=0.8,en-CA;q=0.6,en;q=0.4,en-US;q=0.2'; $this->language = new Language($httpAcceptLanguage); @@ -43,12 +44,10 @@ public function testConstructor() $this->assertInstanceOf("\\Sinergi\\BrowserDetector\\Language", $language); } - /** - * @expectedException \Sinergi\BrowserDetector\InvalidArgumentException - */ public function testConstructorException() { - $language = new Language(1); + $this->expectException(InvalidArgumentException::class); + new Language(1); } public function testGetLanguageLocale() diff --git a/tests/BrowserDetector/Tests/OsDetectorTest.php b/tests/BrowserDetector/Tests/OsDetectorTest.php index 34c94c0..82a0b39 100644 --- a/tests/BrowserDetector/Tests/OsDetectorTest.php +++ b/tests/BrowserDetector/Tests/OsDetectorTest.php @@ -2,10 +2,10 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\Os; -class OsDetectorTest extends PHPUnit_Framework_TestCase +class OsDetectorTest extends TestCase { public function testDetect() { diff --git a/tests/BrowserDetector/Tests/OsTest.php b/tests/BrowserDetector/Tests/OsTest.php index c3b6df9..a09e4ad 100644 --- a/tests/BrowserDetector/Tests/OsTest.php +++ b/tests/BrowserDetector/Tests/OsTest.php @@ -2,12 +2,13 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; +use Sinergi\BrowserDetector\InvalidArgumentException; use Sinergi\BrowserDetector\Os; use Sinergi\BrowserDetector\UserAgent; // todo: move to os detector tests -class OsTest extends PHPUnit_Framework_TestCase +class OsTest extends TestCase { public function testIOs() { @@ -60,12 +61,10 @@ public function testConstructor() $this->assertInstanceOf("\\Sinergi\\BrowserDetector\\Os", $os); } - /** - * @expectedException \Sinergi\BrowserDetector\InvalidArgumentException - */ public function testConstructorException() { - $os = new Os(1); + $this->expectException(InvalidArgumentException::class); + new Os(1); } public function testGetVersion() diff --git a/tests/BrowserDetector/Tests/UserAgentTest.php b/tests/BrowserDetector/Tests/UserAgentTest.php index 6731c73..bd96f68 100644 --- a/tests/BrowserDetector/Tests/UserAgentTest.php +++ b/tests/BrowserDetector/Tests/UserAgentTest.php @@ -2,10 +2,10 @@ namespace Sinergi\BrowserDetector\Tests; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; use Sinergi\BrowserDetector\UserAgent; -class UserAgentTest extends PHPUnit_Framework_TestCase +class UserAgentTest extends TestCase { public function testObject() { From fba53a8954c28b0fbb1284ee87c43cd6e4b11151 Mon Sep 17 00:00:00 2001 From: Jonas Schumacher Date: Fri, 7 May 2021 17:15:59 -0300 Subject: [PATCH 2/4] Add check for Chromium based Edge --- src/BrowserDetector.php | 8 ++++++++ .../Tests/_files/UserAgentStrings.xml | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/BrowserDetector.php b/src/BrowserDetector.php index 5156188..62523e5 100644 --- a/src/BrowserDetector.php +++ b/src/BrowserDetector.php @@ -462,6 +462,14 @@ public static function checkBrowserEdge() } self::$browser->setName(Browser::EDGE); + return true; + } elseif (stripos(self::$userAgentString, 'Edg') !== false) { + $version = explode('Edg/', self::$userAgentString); + if (isset($version[1])) { + self::$browser->setVersion(trim($version[1])); + } + self::$browser->setName(Browser::EDGE); + return true; } diff --git a/tests/BrowserDetector/Tests/_files/UserAgentStrings.xml b/tests/BrowserDetector/Tests/_files/UserAgentStrings.xml index d6628ec..c7f6bc5 100644 --- a/tests/BrowserDetector/Tests/_files/UserAgentStrings.xml +++ b/tests/BrowserDetector/Tests/_files/UserAgentStrings.xml @@ -274,5 +274,17 @@ Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltopdf-amd64 Safari/534.34 + + Edge + 80.0.361.40 + Windows + 10.0 + unknown + unknown + + Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.66 + Safari/537.36 Edg/80.0.361.40 + + From 60e5652139ccb132893dd81aad2783e904028509 Mon Sep 17 00:00:00 2001 From: Maxime Le Roux Date: Thu, 24 Feb 2022 04:59:08 +0100 Subject: [PATCH 3/4] Fix and improve language detection --- src/LanguageDetector.php | 21 ++++++++++++++++---- tests/BrowserDetector/Tests/LanguageTest.php | 9 ++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/LanguageDetector.php b/src/LanguageDetector.php index a0deacf..beca769 100644 --- a/src/LanguageDetector.php +++ b/src/LanguageDetector.php @@ -14,11 +14,15 @@ class LanguageDetector implements DetectorInterface */ public static function detect(Language $language, AcceptLanguage $acceptLanguage) { + // Accept-Language header convention: + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 + $acceptLanguageString = $acceptLanguage->getAcceptLanguageString(); $languages = array(); $language->setLanguages($languages); if (!empty($acceptLanguageString)) { + // Split by ranges (en-US,en;q=0.8) and keep priority value (0.8) $httpLanguages = preg_split( '/q=([\d\.]*)/', $acceptLanguageString, @@ -26,20 +30,29 @@ public static function detect(Language $language, AcceptLanguage $acceptLanguage PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); + // Group by priority $key = 0; foreach (array_reverse($httpLanguages) as $value) { $value = trim($value, ',; .'); if (is_numeric($value)) { $key = $value; - } else { - $languages[$key] = explode(',', $value); + } else if($value) { + $languages[$key] = preg_split('/[^\w-]+/', $value); } } + + // Sort by priority krsort($languages); - foreach ($languages as $value) { - $language->setLanguages(array_merge($language->getLanguages(), $value)); + // Flatten array and remove duplicates + $result = []; + foreach ($languages as $values) { + foreach ($values as $value) { + $result[$value] = true; + } } + + $language->setLanguages(array_keys($result)); } } } diff --git a/tests/BrowserDetector/Tests/LanguageTest.php b/tests/BrowserDetector/Tests/LanguageTest.php index 85ec230..c67b6aa 100644 --- a/tests/BrowserDetector/Tests/LanguageTest.php +++ b/tests/BrowserDetector/Tests/LanguageTest.php @@ -27,7 +27,8 @@ public function testGetLanguage() public function testGetLanguages() { - $this->assertGreaterThan(0, count($this->language->getLanguages())); + $languages = ['fr-CA', 'fr', 'en-CA', 'en', 'en-US']; + $this->assertSame($languages, $this->language->getLanguages()); } public function testGetLanguageLocal() @@ -55,4 +56,10 @@ public function testGetLanguageLocale() $language = new Language('ru,en-us;q=0.5,en;q=0.3'); $this->assertSame('ru', $language->getLanguageLocale()); } + + public function testGetLanguagesFromBogusHeader() + { + $language = new Language(';q=0.8, de, en;q=0.2, de-CH, de;q=0.4'); + $this->assertSame(['de-CH', 'de', 'en'], $language->getLanguages()); + } } From 61762ad83f05cc764c07983c2c8700378e75453e Mon Sep 17 00:00:00 2001 From: Maxime Le Roux <44701746+maxcoe@users.noreply.github.com> Date: Thu, 24 Feb 2022 05:38:18 +0100 Subject: [PATCH 4/4] Fix coding style --- src/LanguageDetector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LanguageDetector.php b/src/LanguageDetector.php index beca769..8f390bc 100644 --- a/src/LanguageDetector.php +++ b/src/LanguageDetector.php @@ -36,7 +36,7 @@ public static function detect(Language $language, AcceptLanguage $acceptLanguage $value = trim($value, ',; .'); if (is_numeric($value)) { $key = $value; - } else if($value) { + } elseif ($value) { $languages[$key] = preg_split('/[^\w-]+/', $value); } }