Change detection order of Opera/Konq/Chrome/Safari

This commit is contained in:
Kijin Sung 2016-06-26 17:07:05 +09:00
parent 38b3db1238
commit 2086c73295
2 changed files with 64 additions and 23 deletions

View file

@ -228,7 +228,7 @@ class UA
$result->version = ($matches[1] + 4) . '.0'; $result->version = ($matches[1] + 4) . '.0';
return $result; return $result;
} }
if (preg_match('#(MSIE|Chrome|CriOS|Firefox|FxiOS|Yeti|[a-z]+bot(?:-Image)?)[ /:]([0-9]+\\.[0-9]+)#i', $ua, $matches)) if (preg_match('#(MSIE|OPR|CriOS|Firefox|FxiOS|Iceweasel|Yeti|[a-z]+bot(?:-Image)?)[ /:]([0-9]+\\.[0-9]+)#i', $ua, $matches))
{ {
if ($matches[1] === 'MSIE') if ($matches[1] === 'MSIE')
{ {
@ -238,10 +238,14 @@ class UA
{ {
$result->browser = 'Chrome'; $result->browser = 'Chrome';
} }
elseif ($matches[1] === 'FxiOS') elseif ($matches[1] === 'FxiOS' || $matches[1] === 'Iceweasel')
{ {
$result->browser = 'Firefox'; $result->browser = 'Firefox';
} }
elseif ($matches[1] === 'OPR')
{
$result->browser = 'Opera';
}
else else
{ {
$result->browser = ucfirst($matches[1]); $result->browser = ucfirst($matches[1]);
@ -249,16 +253,17 @@ class UA
$result->version = $matches[2]; $result->version = $matches[2];
return $result; return $result;
} }
if (preg_match('#Safari/[0-9]+#', $ua) && preg_match('#Version/([0-9]+\\.[0-9]+)#', $ua, $matches) && $matches[1] < 500) if (preg_match('#(?:Opera|OPR)[/ ]([0-9]+\\.[0-9]+)#', $ua, $matches))
{
$result->browser = 'Safari';
$result->version = $matches[1];
return $result;
}
if (preg_match('#^Opera/.+(?:Opera |Version/)([0-9]+\\.[0-9]+)$#', $ua, $matches))
{ {
$result->browser = 'Opera'; $result->browser = 'Opera';
$result->version = $matches[1]; if ($matches[1] >= 9.79 && preg_match('#Version/([0-9]+\\.[0-9]+)#', $ua, $operamatches))
{
$result->version = $operamatches[1];
}
else
{
$result->version = $matches[1];
}
return $result; return $result;
} }
if (preg_match('#(?:Konqueror|KHTML)/([0-9]+\\.[0-9]+)$#', $ua, $matches)) if (preg_match('#(?:Konqueror|KHTML)/([0-9]+\\.[0-9]+)$#', $ua, $matches))
@ -267,6 +272,18 @@ class UA
$result->version = $matches[1]; $result->version = $matches[1];
return $result; return $result;
} }
if (preg_match('#Chrome/([0-9]+\\.[0-9]+)#', $ua, $matches))
{
$result->browser = 'Chrome';
$result->version = $matches[1];
return $result;
}
if (preg_match('#Safari/[0-9]+#', $ua) && preg_match('#Version/([0-9]+\\.[0-9]+)#', $ua, $matches) && $matches[1] < 500)
{
$result->browser = 'Safari';
$result->version = $matches[1];
return $result;
}
return $result; return $result;
} }

View file

@ -89,6 +89,19 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Linux Chrome
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36');
$this->assertEquals('Chrome', $browser->browser);
$this->assertEquals('41.0', $browser->version);
$this->assertEquals('Linux', $browser->os);
$this->assertFalse($browser->is_mobile);
// Linux Konqueror
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9');
$this->assertEquals('Konqueror', $browser->browser);
$this->assertEquals('4.9', $browser->version);
$this->assertEquals('Linux', $browser->os);
// Edge 13 // Edge 13
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'); $browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586');
$this->assertEquals('Edge', $browser->browser); $this->assertEquals('Edge', $browser->browser);
@ -124,19 +137,6 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('IE', $browser->browser); $this->assertEquals('IE', $browser->browser);
$this->assertEquals('8.0', $browser->version); $this->assertEquals('8.0', $browser->version);
// Linux Chrome
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36');
$this->assertEquals('Chrome', $browser->browser);
$this->assertEquals('41.0', $browser->version);
$this->assertEquals('Linux', $browser->os);
$this->assertFalse($browser->is_mobile);
// Linux Konqueror
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9');
$this->assertEquals('Konqueror', $browser->browser);
$this->assertEquals('4.9', $browser->version);
$this->assertEquals('Linux', $browser->os);
// iOS Safari // iOS Safari
$browser = Rhymix\Framework\UA::getBrowserInfo('iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3'); $browser = Rhymix\Framework\UA::getBrowserInfo('iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3');
$this->assertEquals('Safari', $browser->browser); $this->assertEquals('Safari', $browser->browser);
@ -182,6 +182,30 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('macOS', $browser->os); $this->assertEquals('macOS', $browser->os);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Opera 15
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100');
$this->assertEquals('Opera', $browser->browser);
$this->assertEquals('15.0', $browser->version);
$this->assertFalse($browser->is_mobile);
// Opera 12
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16');
$this->assertEquals('Opera', $browser->browser);
$this->assertEquals('12.16', $browser->version);
$this->assertFalse($browser->is_mobile);
// Opera 9.x
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.64 (X11; Linux x86_64; U; en) Presto/2.1.1');
$this->assertEquals('Opera', $browser->browser);
$this->assertEquals('9.64', $browser->version);
$this->assertFalse($browser->is_mobile);
// Iceweasel (Debian Firefox)
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux i686; rv:10.0.7) Gecko/20100101 Iceweasel/10.0.7');
$this->assertEquals('Firefox', $browser->browser);
$this->assertEquals('10.0', $browser->version);
$this->assertFalse($browser->is_mobile);
// Googlebot // Googlebot
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'); $browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');
$this->assertEquals('Googlebot', $browser->browser); $this->assertEquals('Googlebot', $browser->browser);