Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/UserSettings/tests/UserSettings.test.php')
-rw-r--r--plugins/UserSettings/tests/UserSettings.test.php800
1 files changed, 800 insertions, 0 deletions
diff --git a/plugins/UserSettings/tests/UserSettings.test.php b/plugins/UserSettings/tests/UserSettings.test.php
new file mode 100644
index 0000000000..e9e8f00378
--- /dev/null
+++ b/plugins/UserSettings/tests/UserSettings.test.php
@@ -0,0 +1,800 @@
+<?php
+if(!defined("PIWIK_PATH_TEST_TO_ROOT")) {
+ define('PIWIK_PATH_TEST_TO_ROOT', getcwd().'/../../..');
+}
+if(!defined('PIWIK_CONFIG_TEST_INCLUDED'))
+{
+ require_once PIWIK_PATH_TEST_TO_ROOT . "/tests/config_test.php";
+}
+
+if(!class_exists('Piwik_UserSettings', false))
+{
+ require_once 'UserSettings/UserSettings.php';
+}
+require 'UserSettings/functions.php';
+
+class Test_Piwik_UserSettings extends UnitTestCase
+{
+ // User agent strings and expected parser results
+ protected $userAgents = array(
+ // 'User Agent String' => array(
+ // array( browser_id, name, short_name, version, major_number, minor_number, family ),
+ // array( os_id, name, short_name )),
+
+ // ABrowse
+ 'Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)' => array(
+ array('AB', 'ABrowse', 'ABrowse', '0.6', '0', '6', 'webkit'),
+ array('SYL', 'Syllable', 'Syllable')),
+ 'Mozilla/5.0 (compatible; ABrowse 0.4; Syllable)' => array(
+ array('AB', 'ABrowse', 'ABrowse', '0.4', '0', '4', 'webkit'),
+ array('SYL', 'Syllable', 'Syllable')),
+
+ // Acoo Browser (treat as IE)
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' => array(
+ array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Acoo Browser; .NET CLR 2.0.50727; .NET CLR 1.1.4322)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Amaya
+ 'amaya/9.52 libwww/5.4.0' => array(
+ array('AM', 'Amaya', 'Amaya', '9.52', '9', '52', 'unknown'),
+ false),
+
+ // AmigaVoyager
+ 'AmigaVoyager/3.2 (AmigaOS/MC680x0)' => array(
+ array('AV', 'AmigaVoyager', 'AmigaVoyager', '3.2', '3', '2', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS; SV1)' => array(
+ array('AV', 'AmigaVoyager', 'AmigaVoyager', '2.95', '2', '95', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS)' => array(
+ array('AV', 'AmigaVoyager', 'AmigaVoyager', '2.95', '2', '95', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+
+ // Android
+ 'Mozilla/5.0 (Linux; U; Android 1.1; en-us; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array(
+ array('AN', 'Android', 'Android', '3.0', '3', '0', 'webkit'),
+ array('AND', 'Android', 'Android')),
+
+ // AOL / America Online Browser (treat as IE)
+ 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.43; Windows NT 5.1; .NET CLR 1.1.4322)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.1; AOLBuild 4334.5009; Windows NT 5.1; GTB5; .NET CLR 1.1.4322)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; InfoPath.1)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; AOL 8.0; Windows NT 5.1; SV1)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 7.0; Windows NT 5.1)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 5.5; AOL 6.0; Windows 98; Win 9x 4.90)' => array(
+ array('IE', 'Internet Explorer', 'IE', '5.5', '5', '5', 'ie'),
+ array('WME', 'Windows Me', 'Win Me')),
+ 'Mozilla/4.0 (compatible; MSIE 5.5; AOL 5.0; Windows NT 5.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '5.5', '5', '5', 'ie'),
+ array('W2K', 'Windows 2000', 'Win 2000')),
+ 'Mozilla/4.0 (compatible; MSIE 4.01; AOL 4.0; Windows 95)' => array(
+ array('IE', 'Internet Explorer', 'IE', '4.01', '4', '01', 'ie'),
+ array('W95', 'Windows 95', 'Win 95')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; America Online Browser 1.1; Windows NT 5.1; (R1 1.5); .NET CLR 2.0.50727; InfoPath.1)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; America Online Browser 1.1; Windows 98)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('W98', 'Windows 98', 'Win 98')),
+
+ // Arora
+ 'Mozilla/5.0 (X11; U; Linux; de-DE) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.8.0' => array(
+ array('AR', 'Arora', 'Arora', '0.8', '0', '8', 'webkit'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6' => array(
+ array('AR', 'Arora', 'Arora', '0.6', '0', '6', 'webkit'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.2; pt-BR) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.4 (Change: )' => array(
+ array('AR', 'Arora', 'Arora', '0.4', '0', '4', 'webkit'),
+ array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)' => array(
+ array('AR', 'Arora', 'Arora', '0.3', '0', '3', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.2 (Change: 189 35c14e0)' => array(
+ array('AR', 'Arora', 'Arora', '0.2', '0', '2', 'webkit'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // Avant (treat as IE)
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; .NET CLR 2.0.50727; MAXTHON 2.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; Avant Browser; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
+ array('WI7', 'Windows 7', 'Win 7')),
+
+ // AWeb
+ 'Amiga-AWeb/3.5.07 beta' => array(
+ array('AW', 'Amiga AWeb', 'AWeb', '3.5', '3', '5', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'Mozilla/6.0; (Spoofed by Amiga-AWeb/3.5.07 beta)' => array(
+ array('AW', 'Amiga AWeb', 'AWeb', '3.5', '3', '5', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'MSIE/6.0; (Spoofed by Amiga-AWeb/3.4APL)' => array(
+ array('AW', 'Amiga AWeb', 'AWeb', '3.4', '3', '4', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+
+ // Beonex
+ 'Mozilla/5.0 (Windows; U; WinNT; en; rv:1.0.2) Gecko/20030311 Beonex/0.8.2-stable' => array(
+ array('BE', 'Beonex', 'Beonex', '0.8', '0', '8', 'unknown'),
+ array('WNT', 'Windows NT', 'Win NT')),
+ 'Mozilla/5.0 (Windows; U; WinNT; en; Preview) Gecko/20020603 Beonex/0.8-stable' => array(
+ array('BE', 'Beonex', 'Beonex', '0.8', '0', '8', 'unknown'),
+ array('WNT', 'Windows NT', 'Win NT')),
+
+ // BlackBerry
+ 'BlackBerry8700/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1' => array(
+ array('BB', 'BlackBerry', 'BlackBerry', '8700.0', '8700', '0', 'unknown'),
+ array('BLB', 'BlackBerry', 'BlackBerry')),
+
+ // BrowseX
+ 'Mozilla/4.61 [en] (X11; U; ) - BrowseX (2.0.0 Windows)' => array(
+ array('BX', 'BrowseX', 'BrowseX', '2.0', '2', '0', 'unknown'),
+ false),
+
+ // Camino (formerly known as Chimera; not to be confused with another browser also named Chimera)
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en; rv:1.9.0.8pre) Gecko/2009022800 Camino/2.0b3pre' => array(
+ array('CA', 'Camino', 'Camino', '2.0', '2', '0', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en; rv:1.9.0.10pre) Gecko/2009041800 Camino/2.0b3pre (like Firefox/3.0.10pre)' => array(
+ array('CA', 'Camino', 'Camino', '2.0', '2', '0', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.1.4pre) Gecko/20070511 Camino/1.6pre' => array(
+ array('CA', 'Camino', 'Camino', '1.6', '1', '6', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.6) Gecko/20070809 Firefox/2.0.0.6 Camino/1.5.1' => array(
+ array('CA', 'Camino', 'Camino', '1.5', '1', '5', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko/20030306 Camino/0.7' => array(
+ array('CA', 'Camino', 'Camino', '0.7', '0', '7', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; pl-PL; rv:1.0.1) Gecko/20021111 Chimera/0.6' => array(
+ array('CA', 'Camino', 'Camino', '0.6', '0', '6', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+
+ // Cheshire
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko, Safari) Cheshire/1.0.UNOFFICIAL' => array(
+ array('CS', 'Cheshire', 'Cheshire', '1.0', '1', '0', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/419 (KHTML, like Gecko, Safari/419.3) Cheshire/1.0.ALPHA' => array(
+ array('CS', 'Cheshire', 'Cheshire', '1.0', '1', '0', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.9 (KHTML, like Safari) Cheshire/1.0.ALPHA' => array(
+ array('CS', 'Cheshire', 'Cheshire', '1.0', '1', '0', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+
+ // Chrome / Chromium
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9' => array(
+ array('CH', 'Chrome', 'Chrome', '5.0', '5', '0', 'webkit'),
+ array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19' => array(
+ array('CH', 'Chrome', 'Chrome', '1.0', '1', '0', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Linux; U; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13' => array(
+ array('CH', 'Chrome', 'Chrome', '0.2', '0', '2', 'webkit'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // ChromePlus (treat as Chrome)
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) ChromePlus/4.0.222.3 Chrome/4.0.222.3 Safari/532.2' => array(
+ array('CH', 'Chrome', 'Chrome', '4.0', '4', '0', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 ChromePlus/4.0.222.3 Chrome/4.0.222.3 Safari/525.28.3' => array(
+ array('CH', 'Chrome', 'Chrome', '3.2', '3', '2', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // CometBird
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2009011615 Firefox/3.0.5 CometBird/3.0.5' => array(
+ array('CO', 'CometBird', 'CometBird', '3.0', '3', '0', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Crazy Browser (treat as IE)
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 1.1.4322; Crazy Browser 3.0.0 Beta2)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590; .NET CLR 3.5.20706; Crazy Browser 2.0.1)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Dillo
+ 'Dillo/2.0' => array(
+ array('DI', 'Dillo', 'Dillo', '2.0', '2', '0', 'unknown'),
+ false),
+ 'Dillo/0.6.4' => array(
+ array('DI', 'Dillo', 'Dillo', '0.6', '0', '6', 'unknown'),
+ false),
+
+ // ELinks
+ 'ELinks/0.12~pre2.dfsg0-1ubuntu1-lite (textmode; Debian; Linux 2.6.32-4-jolicloud i686; 143x37-2)' => array(
+ array('EL', 'ELinks', 'ELinks', '0.12', '0', '12', 'unknown'),
+ array('LIN', 'Linux', 'Linux')),
+ 'ELinks/0.12pre5.GIT (textmode; CYGWIN_NT-6.1 1.7.1(0.218/5/3) i686; 80x24-2)' => array(
+ array('EL', 'ELinks', 'ELinks', '0.12', '0', '12', 'unknown'),
+ array('WI7', 'Windows 7', 'Win 7')),
+ 'ELinks (0.4.3; NetBSD 3.0.2_PATCH sparc64; 141x19)' => array(
+ array('EL', 'ELinks', 'ELinks', '0.4', '0', '4', 'unknown'),
+ array('NBS', 'NetBSD', 'NetBSD')),
+
+ // Epiphany
+ 'Mozilla/5.0 (X11; U; Linux i686; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Safari/531.2+ Epiphany/2.29.5' => array(
+ array('EP', 'Epiphany', 'Epiphany', '2.29', '2', '29', 'webkit'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.11) Gecko/20080528 Epiphany/2.22 Firefox/3.0' => array(
+ // technically, this should be 'gecko' but UserAgentParser only supports one browserType (family) per browser
+ array('EP', 'Epiphany', 'Epiphany', '2.22', '2', '22', 'webkit'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // Fennec
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2a1pre) Gecko/20090626 Fennec/1.0b2' => array(
+ array('FE', 'Fennec', 'Fennec', '1.0', '1', '0', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (X11; U; Linux armv6l; en-US; rv:1.9.1b1pre) Gecko/20081005220218 Gecko/2008052201 Fennec/0.9pre' => array(
+ array('FE', 'Fennec', 'Fennec', '0.9', '0', '9', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux armv6l; en-US; rv:1.9.1a1pre) Gecko/2008071707 Fennec/0.5' => array(
+ array('FE', 'Fennec', 'Fennec', '0.5', '0', '5', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // Firefox (formerly Firebird, formerly Phoenix; and rebranded versions)
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:2.0a1pre) Gecko/2008060602 Minefield/4.0a1pre' => array(
+ array('FF', 'Firefox', 'Firefox', '4.0', '4', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:2.0a1pre) Gecko/2008060602 Minefield/4.0a1p' => array(
+ array('FF', 'Firefox', 'Firefox', '4.0', '4', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2a2pre) Gecko/20090826 Namoroka/3.6a2pre' => array(
+ array('FF', 'Firefox', 'Firefox', '3.6', '3', '6', 'gecko'),
+ array('WVI', 'Windows Vista', 'Win Vista')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100119 Namoroka/3.6' => array(
+ array('FF', 'Firefox', 'Firefox', '3.6', '3', '6', 'gecko'),
+ array('WI7', 'Windows 7', 'Win 7')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1b4pre) Gecko/20090420 Shiretoko/3.5b4pre (.NET CLR 3.5.30729)' => array(
+ array('FF', 'Firefox', 'Firefox', '3.5', '3', '5', 'gecko'),
+ array('WI7', 'Windows 7', 'Win 7')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090803 Ubuntu/9.04 (jaunty) Shiretoko/3.5.2' => array(
+ array('FF', 'Firefox', 'Firefox', '3.5', '3', '5', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6' => array(
+ array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9a7) Gecko/2007080210 GranParadiso/3.0a7' => array(
+ array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
+ array('WVI', 'Windows Vista', 'Win Vista')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008072716 IceCat/3.0.1-g1' => array(
+ array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.1) Gecko/2008071420 Iceweasel/3.0.1 (Debian-3.0.1-1)' => array(
+ array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1b2) Gecko/20060821 BonEcho/2.0b2' => array(
+ array('FF', 'Firefox', 'Firefox', '2.0', '2', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Darwin Power Macintosh; en-US; rv:1.8.0.12) Gecko/20070803 Firefox/1.5.0.12 Fink Community Edition' => array(
+ array('FF', 'Firefox', 'Firefox', '1.5', '1', '5', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031212 Firebird/0.7+' => array(
+ array('FB', 'Firebird', 'Firebird', '0.7', '0', '7', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Windows; U; Win98; de-DE; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6' => array(
+ array('FB', 'Firebird', 'Firebird', '0.6', '0', '6', 'gecko'),
+ array('W98', 'Windows 98', 'Win 98')),
+ 'Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5' => array(
+ array('PX', 'Phoenix', 'Phoenix', '0.5', '0', '5', 'gecko'),
+ array('WNT', 'Windows NT', 'Win NT')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2b) Gecko/20020923 Phoenix/0.1' => array(
+ array('PX', 'Phoenix', 'Phoenix', '0.1', '0', '1', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Nintendo DS v4; U; M3 Adapter CF + PassMe2; en-US; rv:1.8.0.6 ) Gecko/20060728 Firefox/1.5.0.6 (firefox.gba.ds)' => array(
+ array('FF', 'Firefox', 'Firefox', '1.5', '1', '5', 'gecko'),
+ array('NDS', 'Nintendo DS', 'DS')),
+
+ // Flock
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Flock/3.0.0.3737 Chrome/4.1.249.1071 Safari/532.5' => array(
+ array('FL', 'Flock', 'Flock', '3.0', '3', '0', 'webkit'),
+ array('WI7', 'Windows 7', 'Win 7')),
+ // pre-3.0 is actually gecko
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 Flock/2.5.6 (.NET CLR 3.5.30729)' => array(
+ array('FL', 'Flock', 'Flock', '2.5', '2', '5', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 AppleWebKit/531.21.8 KHTML/4.3.5 (like Gecko) Firefox/3.5.7 Flock/2.5.6 (.NET CLR 3.5.30729)' => array(
+ array('FL', 'Flock', 'Flock', '2.5', '2', '5', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 AppleWebKit/531.21.8 (KHTML, like Gecko) Firefox/3.5.7 Flock/2.5.6 (.NET CLR 3.5.30729)' => array(
+ array('FL', 'Flock', 'Flock', '2.5', '2', '5', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.9) Gecko/20071106 Firefox/2.0.0.9 Flock/1.0.1' => array(
+ array('FL', 'Flock', 'Flock', '1.0', '1', '0', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.1.8) Gecko/20071101 Firefox/2.0.0.8 Flock/1.0' => array(
+ array('FL', 'Flock', 'Flock', '1.0', '1', '0', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8b5) Gecko/20051021 Flock/0.4 Firefox/1.0+' => array(
+ array('FL', 'Flock', 'Flock', '0.4', '0', '4', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+
+ // Fluid
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; nl-nl) AppleWebKit/532.3+ (KHTML, like Gecko) Fluid/0.9.6 Safari/532.3+' => array(
+ array('FD', 'Fluid', 'Fluid', '0.9', '0', '9', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Fluid/0.9.4 Safari/525.13' => array(
+ array('FD', 'Fluid', 'Fluid', '0.9', '0', '9', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Galeon
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/20090327 Galeon/2.0.7' => array(
+ array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.8.1.19) Gecko/20090701 Galeon/2.0.7' => array(
+ array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
+ array('OBS', 'OpenBSD', 'OpenBSD')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081216 Galeon/2.0.4 Firefox/2.0.0.19' => array(
+ array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.13pre) Gecko/20080207 Galeon/2.0.1 (Ubuntu package 2.0.1-1ubuntu2) Firefox/1.5.0.13pre' => array(
+ array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko/20040406 Galeon/1.3.15' => array(
+ array('GA', 'Galeon', 'Galeon', '1.3', '1', '3', 'gecko'),
+ array('BSD', 'FreeBSD', 'FreeBSD')),
+ 'Mozilla/5.0 Galeon/1.2.9 (X11; Linux i686; U;) Gecko/20021213 Debian/1.2.9-0.bunk' => array(
+ array('GA', 'Galeon', 'Galeon', '1.2', '1', '2', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 Galeon/1.0.3 (X11; Linux i686; U;) Gecko/0' => array(
+ array('GA', 'Galeon', 'Galeon', '1.0', '1', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // Google Earth embedded browser
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Google Earth/5.2.1.1329 Safari/532.4' => array(
+ array('GE', 'Google Earth', 'Google Earth', '5.2', '5', '2', 'webkit'),
+ array('WI7', 'Windows 7', 'Win 7')),
+
+ // GreenBrowser (treat as IE)
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0; .NET CLR 3.5.21022; GreenBrowser)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; GreenBrowser)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WVI', 'Windows Vista', 'Win Vista')),
+
+ // Hana
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Hana/1.1' => array(
+ array('HA', 'Hana', 'Hana', '1.1', '1', '1', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/417.9 (KHTML, like Gecko) Hana/1.0' => array(
+ array('HA', 'Hana', 'Hana', '1.0', '1', '0', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+
+ // HotJava
+ 'HotJava/1.1.2 FCS' => array(
+ array('HJ', 'HotJava', 'HotJava', '1.1', '1', '1', 'unknown'),
+ false),
+ 'HotJava/1.0.1/JRE1.1.x' => array(
+ array('HJ', 'HotJava', 'HotJava', '1.0', '1', '0', 'unknown'),
+ false),
+
+ // iBrowse
+ 'Mozilla/5.0 (compatible; IBrowse 3.0; AmigaOS4.0)' => array(
+ array('IB', 'IBrowse', 'IBrowse', '3.0', '3', '0', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'Mozilla/4.0 (compatible; IBrowse 2.3; AmigaOS4.0)' => array(
+ array('IB', 'IBrowse', 'IBrowse', '2.3', '2', '3', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'IBrowse/2.4 (AmigaOS 3.9; 68K)' => array(
+ array('IB', 'IBrowse', 'IBrowse', '2.4', '2', '4', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'IBrowse/2.3 (AmigaOS V51)' => array(
+ array('IB', 'IBrowse', 'IBrowse', '2.3', '2', '3', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+ 'IBrowse/2.3 (AmigaOS 4.0)' => array(
+ array('IB', 'IBrowse', 'IBrowse', '2.3', '2', '3', 'unknown'),
+ array('AMI', 'AmigaOS', 'AmigaOS')),
+
+ // iCab
+ 'iCab/4.5 (Macintosh; U; PPC Mac OS X)' => array(
+ array('IC', 'iCab', 'iCab', '4.5', '4', '5', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'iCab/4.5 (Macintosh; U; Mac OS X Leopard 10.5.7)' => array(
+ array('IC', 'iCab', 'iCab', '4.5', '4', '5', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (compatible; iCab 3.0.5; Macintosh; U; PPC Mac OS)' => array(
+ array('IC', 'iCab', 'iCab', '3.0', '3', '0', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (compatible; iCab 3.0.5; Macintosh; U; PPC Mac OS X)' => array(
+ array('IC', 'iCab', 'iCab', '3.0', '3', '0', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS; en) iCab 3' => array(
+ array('IC', 'iCab', 'iCab', '3.0', '3', '0', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/4.5 (compatible; iCab 2.7.1; Macintosh; I; PPC)' => array(
+ array('IC', 'iCab', 'iCab', '2.7', '2', '7', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'iCab/2.9.8 (Macintosh; U; 68K)' => array(
+ array('IC', 'iCab', 'iCab', '2.9', '2', '9', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Lynx/2.8 (compatible; iCab 2.9.8; Macintosh; U; 68K)' => array(
+ array('IC', 'iCab', 'iCab', '2.9', '2', '9', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/4/5 (compatible; iCab 2.9.8; Macintosh; U; 68K)' => array(
+ array('IC', 'iCab', 'iCab', '2.9', '2', '9', 'unknown'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC)' => array(
+ array('IE', 'Internet Explorer', 'IE', '5.0', '5', '0', 'ie'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/4.76 (Macintosh; I; PPC)' => array(
+ array('NS', 'Netscape', 'Netscape', '4.76', '4', '76', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+
+ // Internet Explorer
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '9.0', '9', '0', 'ie'),
+ array('WI7', 'Windows 7', 'Win 7')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WVI', 'Windows Vista', 'Win Vista')),
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022; InfoPath.2; SLCC1; Zune 3.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
+ array('WI7', 'Windows 7', 'Win 7')),
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
+ array('WVI', 'Windows Vista', 'Win Vista')),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WVI', 'Windows Vista', 'Win Vista')),
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)' => array(
+ array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; WOW64; SV1; .NET CLR 2.0.50727)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Win64; x64; SV1; .NET CLR 2.0.50727)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
+
+ // Internet Explorer with misbehaving Google Tool Bar
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)' => array(
+ array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB0.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)' => array(
+ array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Iron
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.0 (KHTML, like Gecko) Iron/3.0.189.0 Safari/531.0' => array(
+ array('IR', 'Iron', 'Iron', '3.0', '3', '0', 'webkit'),
+ array('WI7', 'Windows 7', 'Win 7')),
+
+ // K-Meleon
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.21) Gecko/20090331 K-Meleon/1.5.3' => array(
+ array('KM', 'K-Meleon', 'K-Meleon', '1.5', '1', '5', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (Darwin; FreeBSD 5.6; en-GB; rv:1.8.1.17pre) Gecko/20080716 K-Meleon/1.5.0' => array(
+ array('KM', 'K-Meleon', 'K-Meleon', '1.5', '1', '5', 'gecko'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.2b) Gecko/20021016 K-Meleon 0.7' => array(
+ array('KM', 'K-Meleon', 'K-Meleon', '0.7', '0', '7', 'gecko'),
+ array('WNT', 'Windows NT', 'Win NT')),
+
+ // Kapiko
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.1) Gecko/20080722 Firefox/3.0.1 Kapiko/3.0' => array(
+ array('KP', 'Kapiko', 'Kapiko', '3.0', '3', '0', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Kazehakase
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko Kazehakase/0.5.4 Debian/0.5.4-2.1ubuntu3' => array(
+ array('KZ', 'Kazehakase', 'Kazehakase', '0.5', '0', '5', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.13) Gecko/20080311 (Debian-1.8.1.13+nobinonly-0ubuntu1) Kazehakase/0.5.2' => array(
+ array('KZ', 'Kazehakase', 'Kazehakase', '0.5', '0', '5', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; Linux x86_64; U;) Gecko/20060207 Kazehakase/0.3.5 Debian/0.3.5-1' => array(
+ array('KZ', 'Kazehakase', 'Kazehakase', '0.3', '0', '3', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // KKMAN (treat as IE)
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; KKMAN3.2)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Konqueror
+ 'Mozilla/5.0 (compatible; Konqueror/4.0; Linux) KHTML/4.0.5 (like Gecko)' => array(
+ array('KO', 'Konqueror', 'Konqueror', '4.0', '4', '0', 'khtml'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (compatible; Konqueror/4.0; Microsoft Windows) KHTML/4.0.80 (like Gecko)' => array(
+ array('KO', 'Konqueror', 'Konqueror', '4.0', '4', '0', 'khtml'),
+ false),
+ 'Mozilla/5.0 (compatible; Konqueror/3.5; GNU/kFreeBSD) KHTML/3.5.9 (like Gecko) (Debian)' => array(
+ array('KO', 'Konqueror', 'Konqueror', '3.5', '3', '5', 'khtml'),
+ array('BSD', 'FreeBSD', 'FreeBSD')),
+ 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' => array(
+ array('KO', 'Konqueror', 'Konqueror', '2.1', '2', '1', 'khtml'),
+ false),
+
+ // Links
+ 'Links' => array(
+ false,
+ false),
+ 'Links (2.1pre31; Linux 2.6.21-omap1 armv6l; x)' => array(
+ array('LI', 'Links', 'Links', '2.1', '2', '1', 'unknown'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Links (0.99; OS/2 1 i386; 80x33)' => array(
+ array('LI', 'Links', 'Links', '0.99', '0', '99', 'unknown'),
+ array('OS2', 'OS/2', 'OS/2')),
+
+ // Lunascape (identity crisis)
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1) Gecko/20090701 Firefox/3.5 Lunascape/5.1.2.3' => array(
+ array('FF', 'Firefox', 'Firefox', '3.5', '3', '5', 'gecko'),
+ array('WVI', 'Windows Vista', 'Win Vista')),
+ 'Mozilla/5.0 (Windows; U; ; cs-CZ) AppleWebKit/532+ (KHTML, like Gecko, Safari/532.0) Lunascape/5.1.2.3' => array(
+ array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
+ false),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Lunascape 5.1.2.3)' => array(
+ array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Lynx
+ 'Lynx (textmode)' => array(
+ false,
+ false),
+ 'Lynx/2.8.7dev.9 libwww-FM/2.14' => array(
+ array('LX', 'Lynx', 'Lynx', '2.8', '2', '8', 'unknown'),
+ false),
+
+ // Maxathon (treat as IE)
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)' => array(
+ array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Midori
+ 'Midori/0.1.9 (X11; Linux i686; U; fr-fr) WebKit/532+' => array(
+ array('MI', 'Midori', 'Midori', '0.1', '0', '1', 'webkit'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // Mozilla Suite
+ 'Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.7) Gecko/20070606' => array(
+ array('MO', 'Mozilla', 'Mozilla', '1.7', '1', '7', 'gecko'),
+ array('SOS', 'SunOS', 'SunOS')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050927 Debian/1.7.8-1sarge3' => array(
+ array('MO', 'Mozilla', 'Mozilla', '1.7', '1', '7', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // NCSA Mosaic
+ 'PATHWORKS Mosaic/1.0 libwww/2.15_Spyglass' => array(
+ array('MC', 'NCSA Mosaic', 'Mosaic', '1.0', '1', '0', 'unknown'),
+ false),
+ 'WinMosaic/Version 2.0 (ALPHA 2)' => array(
+ array('MC', 'NCSA Mosaic', 'Mosaic', '2.0', '2', '0', 'unknown'),
+ false),
+ 'VMS_Mosaic/3.8-1 (Motif;OpenVMS V7.3-2 DEC 3000 - M700) libwww/2.12_Mosaic' => array(
+ array('MC', 'NCSA Mosaic', 'Mosaic', '3.8', '3', '8', 'unknown'),
+ false),
+ 'Mosaic from Digital/1.02_Win32' => array(
+ array('MC', 'NCSA Mosaic', 'Mosaic', '1.02', '1', '02', 'unknown'),
+ array('W95', 'Windows 95', 'Win 95')),
+ 'NCSA Mosaic/2.0.0b4 (Windows AXP)' => array(
+ array('MC', 'NCSA Mosaic', 'Mosaic', '2.0', '2', '0', 'unknown'),
+ false),
+ 'NCSA_Mosaic/2.7b5 (X11;Linux 2.6.7 i686) libwww/2.12 modified' => array(
+ array('MC', 'NCSA Mosaic', 'Mosaic', '2.7', '2', '7', 'unknown'),
+ array('LIN', 'Linux', 'Linux')),
+ 'mMosaic/3.6.6 (X11;SunOS 5.8 sun4m)' => array(
+ array('MC', 'NCSA Mosaic', 'Mosaic', '3.6', '3', '6', 'unknown'),
+ array('SOS', 'SunOS', 'SunOS')),
+
+ // Netscape Navigator (9.x)
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8pre) Gecko/20071015 Firefox/2.0.0.7 Navigator/9.0' => array(
+ array('NS', 'Netscape', 'Netscape', '9.0', '9', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20070321 Netscape/9.0' => array(
+ array('NS', 'Netscape', 'Netscape', '9.0', '9', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // Netscape (6.x - 8.x)
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20070321 Netscape/8.1.3' => array(
+ array('NS', 'Netscape', 'Netscape', '8.1', '8', '1', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax)' => array(
+ array('NS', 'Netscape', 'Netscape', '7.2', '7', '2', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (X11; U; OSF1 alpha; en-US; rv:0.9.4.1) Gecko/20020517 Netscape6/6.2.3' => array(
+ array('NS', 'Netscape', 'Netscape', '6.2', '6', '2', 'gecko'),
+ array('T64', 'Tru64', 'Tru64')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1' => array(
+ array('NS', 'Netscape', 'Netscape', '6.1', '6', '1', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+
+ // Netscape Communicator (4.x)
+ 'Mozilla/4.76C-SGI [en] (X11; I; IRIX64 6.5 IP30)' => array(
+ array('NS', 'Netscape', 'Netscape', '4.76', '4', '76', 'gecko'),
+ array('IRI', 'IRIX', 'IRIX')),
+ 'Mozilla/4.72 [en] (X11; I; HP-UX B.11.00 9000/800)' => array(
+ array('NS', 'Netscape', 'Netscape', '4.72', '4', '72', 'gecko'),
+ array('HPX', 'HP-UX', 'HP-UX')),
+ 'Mozilla/4.41 (BEOS; U ;Nav)' => array(
+ array('NS', 'Netscape', 'Netscape', '4.41', '4', '41', 'gecko'),
+ array('BEO', 'BeOS', 'BeOS')),
+ 'Mozilla/4.0 (compatible; Windows NT 5.1; U; en)' => array(
+ array('NS', 'Netscape', 'Netscape', '4.0', '4', '0', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Netscape Navigator (up to 3.x)
+ 'Mozilla/3.0 (X11; I; AIX 2)' => array(
+ array('NS', 'Netscape', 'Netscape', '3.0', '3', '0', 'gecko'),
+ array('AIX', 'AIX', 'AIX')),
+ 'Mozilla/2.02 [fr] (WinNT; I)' => array(
+ array('NS', 'Netscape', 'Netscape', '2.02', '2', '02', 'gecko'),
+ array('WNT', 'Windows NT', 'Win NT')),
+
+ // Omniweb
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/525.18 (KHTML, like Gecko, Safari/525.20) OmniWeb/v622.3.0.105198' => array(
+ array('OW', 'OmniWeb', 'OmniWeb', '5.8', '5', '8', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613' => array(
+ array('OW', 'OmniWeb', 'OmniWeb', '5.6', '5', '6', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607' => array(
+ array('OW', 'OmniWeb', 'OmniWeb', '5.5', '5', '5', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34' => array(
+ array('OW', 'OmniWeb', 'OmniWeb', '5.1', '5', '1', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36' => array(
+ array('OW', 'OmniWeb', 'OmniWeb', '5.0', '5', '0', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496' => array(
+ array('OW', 'OmniWeb', 'OmniWeb', '4.5', '4', '5', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+
+ // Opera
+ 'Opera/9.63 (Windows NT 5.1; U; en) Presto/2.1.1' => array(
+ array('OP', 'Opera', 'Opera', '9.63', '9', '63', 'opera'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)' => array(
+ array('OP', 'Opera', 'Opera', '9.30', '9', '30', 'opera'),
+ array('WII', 'Nintendo Wii', 'Wii')),
+ 'Opera/9.64 (Windows ME; U; en) Presto/2.1.1' => array(
+ array('OP', 'Opera', 'Opera', '9.64', '9', '64', 'opera'),
+ array('WME', 'Windows Me', 'Win Me')),
+ 'Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00' => array(
+ array('OP', 'Opera', 'Opera', '10.00', '10', '0', 'opera'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [en Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [ja]' => array(
+ array('OP', 'Opera', 'Opera', '8.50', '8', '50', 'opera'),
+ array('NDS', 'Nintendo DS', 'DS')),
+ 'Opera/9.00 (Nintendo DS U; ; 1309-9; de)' => array(
+ array('OP', 'Opera', 'Opera', '9.00', '9', '00', 'opera'),
+ array('NDS', 'Nintendo DS', 'DS')),
+ 'Opera/9.50 (Nintendo DSi; Opera/507; U; en-US) ' => array(
+ array('OP', 'Opera', 'Opera', '9.50', '9', '50', 'opera'),
+ array('DSI', 'Nintendo DSi', 'DSi')),
+
+ // PSP
+ 'PSP (PlayStation Portable); 2.00' => array(
+ false,
+ array('PSP', 'PlayStation Portable', 'PSP')),
+ 'Mozilla/4.0 (PSP (PlayStation Portable); 2.00)' => array(
+ false,
+ array('PSP', 'PlayStation Portable', 'PSP')),
+
+ // Safari
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Version/3.1.2 Safari/525.21' => array(
+ array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5G77 Safari/525.20' => array(
+ array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
+ array('IPH', 'iPhone', 'iPhone')),
+ 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3' => array(
+ array('SF', 'Safari', 'Safari', '3.0', '3', '0', 'webkit'),
+ array('IPD', 'iPod', 'iPod')),
+ 'Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20' => array(
+ array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
+ array('IPD', 'iPod', 'iPod')),
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/527.3+ (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1' => array(
+ array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
+ array('MAC', 'Mac OS', 'Mac OS')),
+ 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10' => array(
+ array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
+ array('IPA', 'iPad', 'iPad')),
+
+ // SeaMonkey (formerly Mozilla Suite and rebranded versions)
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8) Gecko/20071008 Iceape/1.1.5 (Ubuntu-1.1.5-1ubuntu0.7.10)' => array(
+ array('SM', 'SeaMonkey', 'SeaMonkey', '1.1', '1', '1', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4pre) Gecko/20090405 SeaMonkey/2.0b1pre' => array(
+ array('SM', 'SeaMonkey', 'SeaMonkey', '2.0', '2', '0', 'gecko'),
+ array('LIN', 'Linux', 'Linux')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko' => array(
+ // this pre-2.0 UA is missing the SeaMonkey/X.Y
+ array('SM', 'SeaMonkey', 'SeaMonkey', '1.9', '1', '9', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9) Gecko/2008052906' => array(
+ // this pre-2.0 UA is missing the SeaMonkey/X.Y
+ array('SM', 'SeaMonkey', 'SeaMonkey', '1.9', '1', '9', 'gecko'),
+ array('WXP', 'Windows XP', 'Win XP')),
+
+ // Palm webOS
+ 'Mozilla/5.0 (webOS/1.0; U; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0' => array(
+ array('WO', 'Palm webOS', 'webOS', '1.0', '1', '0', 'webkit'),
+ array('WOS', 'Palm webOS', 'webOS')),
+ 'Mozilla/5.0 (webOS/Palm webOS 1.2.9; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pixi/1.0' => array(
+ array('WO', 'Palm webOS', 'webOS', '1.0', '1', '0', 'webkit'),
+ array('WOS', 'Palm webOS', 'webOS')),
+ 'Mozilla/5.0 [en] (PalmOS; U; WebPro/3.5; Palm-Zi72)' => array(
+ array('WP', 'WebPro', 'WebPro', '3.5', '3', '5', 'unknown'),
+ array('POS', 'Palm OS', 'Palm OS')),
+
+ // Palm WebPro
+ 'Mozilla/4.76 [en] (PalmOS; U; WebPro/3.0.1a; Palm-Cct1)' => array(
+ array('WP', 'WebPro', 'WebPro', '3.0', '3', '0', 'unknown'),
+ array('POS', 'Palm OS', 'Palm OS')),
+ 'Mozilla/4.76 [en] (PalmOS; U; WebPro/3.0; Palm-Arz1)' => array(
+ array('WP', 'WebPro', 'WebPro', '3.0', '3', '0', 'unknown'),
+ array('POS', 'Palm OS', 'Palm OS')),
+ );
+
+ public function test_getBrowser()
+ {
+ foreach($this->userAgents as $userAgent => $expected)
+ {
+ $res = UserAgentParser::getBrowser($userAgent);
+ $family = false;
+
+ if($res === false)
+ $ok = $res === $expected[0];
+ else
+ {
+ $family = Piwik_getBrowserFamily($res['id']);
+ $ok = $expected[0][0] == $res['id'] &&
+ $expected[0][1] == $res['name'] &&
+ $expected[0][2] == $res['short_name'] &&
+ $expected[0][3] == $res['version'] &&
+ $expected[0][4] == $res['major_number'] &&
+ $expected[0][5] == $res['minor_number'] &&
+ $expected[0][6] == $family;
+ }
+
+ $this->assertTrue($ok);
+ if(!$ok)
+ {
+ var_dump(array($userAgent, $res, $family));
+ }
+ }
+ }
+
+ public function test_getOperatingSystem()
+ {
+ foreach($this->userAgents as $userAgent => $expected)
+ {
+ $res = UserAgentParser::getOperatingSystem($userAgent);
+
+ $ok = $expected[1][0] == $res['id'] &&
+ $expected[1][1] == $res['name'] &&
+ $expected[1][2] == $res['short_name'];
+
+ $this->assertTrue($ok);
+ if(!$ok)
+ {
+ var_dump(array($userAgent, $res));
+ }
+ }
+ }
+}