Skip to content

Commit ab95f54

Browse files
committed
Fixed new opera detection
1 parent 650b317 commit ab95f54

File tree

7 files changed

+195
-18
lines changed

7 files changed

+195
-18
lines changed

src/Browser/BrowserDetection.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,11 @@ private static function checkBrowserOpera(Browser $browser, UserAgent $userAgent
204204
}
205205
$browser->setName($browser::OPERA_MINI);
206206
return true;
207-
} else if (stripos($userAgent->getUserAgentString(), 'opera') !== false) {
207+
} elseif (stripos($userAgent->getUserAgentString(), 'opera') !== false) {
208208
$resultant = stristr($userAgent->getUserAgentString(), 'opera');
209209
if (preg_match('/Version\/(10.*)$/', $resultant, $matches)) {
210210
$browser->setVersion($matches[1]);
211-
} else if (preg_match('/\//', $resultant)) {
211+
} elseif (preg_match('/\//', $resultant)) {
212212
$aresult = explode('/', str_replace("(", " ", $resultant));
213213
$aversion = explode(' ', $aresult[1]);
214214
$browser->setVersion($aversion[0]);
@@ -218,6 +218,12 @@ private static function checkBrowserOpera(Browser $browser, UserAgent $userAgent
218218
}
219219
$browser->setName($browser::OPERA);
220220
return true;
221+
} elseif (stripos($userAgent->getUserAgentString(), ' OPR/') !== false) {
222+
$browser->setName($browser::OPERA);
223+
if (preg_match('/OPR\/([\d\.]*)/', $userAgent->getUserAgentString(), $matches)) {
224+
$browser->setVersion($matches[1]);
225+
}
226+
return true;
221227
}
222228
return false;
223229
}
@@ -403,7 +409,7 @@ private static function checkBrowserNetscapeNavigator9Plus(Browser $browser, Use
403409
$browser->setVersion($matches[1]);
404410
$browser->setName($browser::NETSCAPE_NAVIGATOR);
405411
return true;
406-
} else if (stripos($userAgent->getUserAgentString(), 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $userAgent->getUserAgentString(), $matches)) {
412+
} elseif (stripos($userAgent->getUserAgentString(), 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $userAgent->getUserAgentString(), $matches)) {
407413
$browser->setVersion($matches[1]);
408414
$browser->setName($browser::NETSCAPE_NAVIGATOR);
409415
return true;
@@ -480,7 +486,7 @@ private static function checkBrowserFirefox(Browser $browser, UserAgent $userAge
480486
$browser->setVersion($matches[1]);
481487
$browser->setName($browser::FIREFOX);
482488
return true;
483-
} else if (preg_match("/Firefox$/i", $userAgent->getUserAgentString(), $matches)) {
489+
} elseif (preg_match("/Firefox$/i", $userAgent->getUserAgentString(), $matches)) {
484490
$browser->setVersion("");
485491
$browser->setName($browser::FIREFOX);
486492
return true;
@@ -503,7 +509,7 @@ private static function checkBrowserSeaMonkey(Browser $browser, UserAgent $userA
503509
$browser->setVersion($matches[1]);
504510
$browser->setName($browser::SEAMONKEY);
505511
return true;
506-
} else if (preg_match("/SeaMonkey$/i", $userAgent->getUserAgentString(), $matches)) {
512+
} elseif (preg_match("/SeaMonkey$/i", $userAgent->getUserAgentString(), $matches)) {
507513
$browser->setVersion("");
508514
$browser->setName($browser::SEAMONKEY);
509515
return true;
@@ -546,12 +552,12 @@ private static function checkBrowserMozilla(Browser $browser, UserAgent $userAge
546552
$browser->setVersion(str_replace('rv:', '', $aversion[0]));
547553
$browser->setName($browser::MOZILLA);
548554
return true;
549-
} else if (stripos($userAgent->getUserAgentString(), 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $userAgent->getUserAgentString()) && stripos($userAgent->getUserAgentString(), 'netscape') === false) {
555+
} elseif (stripos($userAgent->getUserAgentString(), 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $userAgent->getUserAgentString()) && stripos($userAgent->getUserAgentString(), 'netscape') === false) {
550556
$aversion = explode('', stristr($userAgent->getUserAgentString(), 'rv:'));
551557
$browser->setVersion(str_replace('rv:', '', $aversion[0]));
552558
$browser->setName($browser::MOZILLA);
553559
return true;
554-
} else if (stripos($userAgent->getUserAgentString(), 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $userAgent->getUserAgentString(), $matches) && stripos($userAgent->getUserAgentString(), 'netscape') === false) {
560+
} elseif (stripos($userAgent->getUserAgentString(), 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $userAgent->getUserAgentString(), $matches) && stripos($userAgent->getUserAgentString(), 'netscape') === false) {
555561
$browser->setVersion($matches[1]);
556562
$browser->setName($browser::MOZILLA);
557563
return true;

tests/Browser/Tests/AutoloaderTest.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,26 @@
66

77
class AutoloaderTest extends PHPUnit_Framework_TestCase
88
{
9+
public function testRegister()
10+
{
11+
Autoloader::register();
12+
$this->assertContains(array('Browser\\Autoloader', 'autoload'), spl_autoload_functions());
13+
}
14+
915
public function testAutoload()
1016
{
1117
$declared = get_declared_classes();
1218
$declaredCount = count($declared);
13-
Autoloader::autoload('FooBarClass');
14-
$this->assertEquals($declaredCount, count(get_declared_classes()), 'Browser\\Autoloader::autoload() is trying to load classes outside of the Browser namespace');
19+
Autoloader::autoload('Foo');
20+
$this->assertEquals(
21+
$declaredCount,
22+
count(get_declared_classes()),
23+
'Browser\\Autoloader::autoload() is trying to load classes outside of the Browser namespace'
24+
);
1525
Autoloader::autoload('Browser\\Browser');
16-
$this->assertTrue(in_array('Browser\\Browser', get_declared_classes()), 'Browser\\Autoloader::autoload() failed to autoload the Browser\\Browser class');
26+
$this->assertTrue(
27+
in_array('Browser\\Browser', get_declared_classes()),
28+
'Browser\\Autoloader::autoload() failed to autoload the Browser\\Browser class'
29+
);
1730
}
1831
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
namespace Browser\Tests;
3+
4+
use Browser\Browser;
5+
use PHPUnit_Framework_TestCase;
6+
7+
class BrowserDetectionTest extends PHPUnit_Framework_TestCase
8+
{
9+
public function testBlackBerry()
10+
{
11+
$userAgentStringCollection = UserAgentStringMapper::map();
12+
foreach ($userAgentStringCollection as $userAgentString) {
13+
$browser = new Browser($userAgentString->getString());
14+
$this->assertEquals($userAgentString->getBrowser(), $browser->getName(), 'Failed asserting that ' . $browser->getName() . ' is equal to ' . $userAgentString->getBrowser());
15+
$this->assertEquals($userAgentString->getVersion(), $browser->getVersion(), 'Failed asserting that ' . $browser->getVersion() . ' is equal to ' . $userAgentString->getVersion());
16+
}
17+
}
18+
}

tests/Browser/Tests/_files/UserAgentStrings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<strings>
44
<string>
55
<field name="browser">Opera</field>
6-
<field name="version">21</field>
6+
<field name="version">21.0.1432.67</field>
77
<field name="os">OS X</field>
88
<field name="os_version">10.9.3</field>
99
<field name="string">Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko)
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?php
2+
namespace Browser\Tests;
3+
4+
class UserAgentString
5+
{
6+
/**
7+
* @var string
8+
*/
9+
private $browser;
10+
11+
/**
12+
* @var string
13+
*/
14+
private $version;
15+
16+
/**
17+
* @var string
18+
*/
19+
private $os;
20+
21+
/**
22+
* @var string
23+
*/
24+
private $os_version;
25+
26+
/**
27+
* @var string
28+
*/
29+
private $string;
30+
31+
/**
32+
* @return string
33+
*/
34+
public function getBrowser()
35+
{
36+
return $this->browser;
37+
}
38+
39+
/**
40+
* @param string $browser
41+
* @return $this
42+
*/
43+
public function setBrowser($browser)
44+
{
45+
$this->browser = $browser;
46+
return $this;
47+
}
48+
49+
/**
50+
* @return string
51+
*/
52+
public function getOs()
53+
{
54+
return $this->os;
55+
}
56+
57+
/**
58+
* @param string $os
59+
* @return $this
60+
*/
61+
public function setOs($os)
62+
{
63+
$this->os = $os;
64+
return $this;
65+
}
66+
67+
/**
68+
* @return string
69+
*/
70+
public function getOsVersion()
71+
{
72+
return $this->os_version;
73+
}
74+
75+
/**
76+
* @param string $os_version
77+
* @return $this
78+
*/
79+
public function setOsVersion($os_version)
80+
{
81+
$this->os_version = $os_version;
82+
return $this;
83+
}
84+
85+
/**
86+
* @return string
87+
*/
88+
public function getString()
89+
{
90+
return $this->string;
91+
}
92+
93+
/**
94+
* @param string $string
95+
* @return $this
96+
*/
97+
public function setString($string)
98+
{
99+
$this->string = $string;
100+
return $this;
101+
}
102+
103+
/**
104+
* @return string
105+
*/
106+
public function getVersion()
107+
{
108+
return $this->version;
109+
}
110+
111+
/**
112+
* @param string $version
113+
* @return $this
114+
*/
115+
public function setVersion($version)
116+
{
117+
$this->version = $version;
118+
return $this;
119+
}
120+
}

tests/Browser/Tests/_includes/UserAgentStringLoader.php

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
namespace Browser\Tests;
3+
4+
use SimpleXmlElement;
5+
6+
class UserAgentStringMapper
7+
{
8+
/**
9+
* @return UserAgentString[]
10+
*/
11+
public static function map()
12+
{
13+
$collection = array();
14+
$xml = new SimpleXmlElement(file_get_contents(FILES . DIRECTORY_SEPARATOR . 'UserAgentStrings.xml'));
15+
foreach ($xml->strings as $string) {
16+
$string = $string->string->field;
17+
$userAgentString = new UserAgentString();
18+
$userAgentString->setBrowser((string)$string[0]);
19+
$userAgentString->setVersion((string)$string[1]);
20+
$userAgentString->setOs((string)$string[2]);
21+
$userAgentString->setOsVersion((string)$string[3]);
22+
$userAgentString->setString(str_replace(array(PHP_EOL, ' '), ' ', (string)$string[4]));
23+
$collection[] = $userAgentString;
24+
}
25+
return $collection;
26+
}
27+
}

0 commit comments

Comments
 (0)