Add more edge cases and tests, always default to Mozilla/X.X

This commit is contained in:
Kijin Sung 2016-06-26 17:25:59 +09:00
parent 2086c73295
commit 976fa799f3
2 changed files with 63 additions and 1 deletions

View file

@ -228,7 +228,7 @@ class UA
$result->version = ($matches[1] + 4) . '.0';
return $result;
}
if (preg_match('#(MSIE|OPR|CriOS|Firefox|FxiOS|Iceweasel|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|spider)(?:-Image)?|wget|curl)[ /:]([0-9]+\\.[0-9]+)#i', $ua, $matches))
{
if ($matches[1] === 'MSIE')
{
@ -284,6 +284,24 @@ class UA
$result->version = $matches[1];
return $result;
}
if (preg_match('#\\bPHP(/[0-9]+\\.[0-9]+)?#', $ua, $matches))
{
$result->browser = 'PHP';
$result->version = (isset($matches[1]) && $matches[1]) ? substr($matches[1], 1) : null;
return $result;
}
if (preg_match('#^Mozilla/([0-9]+\\.[0-9]+)#', $ua, $matches))
{
$result->browser = 'Mozilla';
$result->version = $matches[1];
return $result;
}
if (preg_match('#^([a-zA-Z0-9_-]+)/([0-9]+\\.[0-9]+)#', $ua, $matches))
{
$result->browser = ucfirst($matches[1]);
$result->version = $matches[2];
return $result;
}
return $result;
}

View file

@ -229,6 +229,50 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('Yeti', $browser->browser);
$this->assertEquals('1.0', $browser->version);
$this->assertTrue($browser->is_robot);
// Baiduspider
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)');
$this->assertEquals('Baiduspider', $browser->browser);
$this->assertEquals('2.0', $browser->version);
$this->assertTrue($browser->is_robot);
// wget
$browser = Rhymix\Framework\UA::getBrowserInfo('wget/1.17.1');
$this->assertEquals('Wget', $browser->browser);
$this->assertEquals('1.17', $browser->version);
$this->assertFalse($browser->is_robot);
// curl
$browser = Rhymix\Framework\UA::getBrowserInfo('curl/7.47.0');
$this->assertEquals('Curl', $browser->browser);
$this->assertEquals('7.47', $browser->version);
$this->assertFalse($browser->is_robot);
// PHP with version
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP/5.2.9');
$this->assertEquals('PHP', $browser->browser);
$this->assertEquals('5.2', $browser->version);
$this->assertFalse($browser->is_robot);
// PHP without version
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP');
$this->assertEquals('PHP', $browser->browser);
$this->assertNull($browser->version);
// PHP with HTTP_Request2
$browser = Rhymix\Framework\UA::getBrowserInfo('HTTP_Request2/2.1.1 (http://pear.php.net/package/http_request2) PHP/5.3.2');
$this->assertEquals('PHP', $browser->browser);
$this->assertEquals('5.3', $browser->version);
// Some random browser with the 'Mozilla' version
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; XH; rv:8.578.498) fr, Gecko/20121021 Camino/8.723+ (Firefox compatible)');
$this->assertEquals('Mozilla', $browser->browser);
$this->assertEquals('5.0', $browser->version);
// Some random browser without the 'Mozilla' version
$browser = Rhymix\Framework\UA::getBrowserInfo('W3C_Validator/1.650');
$this->assertEquals('W3C_Validator', $browser->browser);
$this->assertEquals('1.650', $browser->version);
}
public function testEncodeFilenameForDownload()