weekly release 2.9dev
[moodle.git] / lib / tests / useragent_test.php
CommitLineData
c3d2fbf9
SH
1<?php
2// This file is part of Moodle - http://moodle.org/
3//
4// Moodle is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// Moodle is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
16
17/**
18 * Tests the user agent class.
19 *
20 * @package core
21 * @copyright 2013 Sam Hemelryk
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24
25/**
26 * User agent test suite.
27 *
28 * @package core
29 * @copyright 2013 Sam Hemelryk
30 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31 */
32class core_useragent_testcase extends basic_testcase {
33
34 /**
35 * User agents we'll be using to test.
36 * @var array
37 */
38 protected $user_agents = array(
39 'MSIE' => array(
40 '5.0' => array(
41 'Windows 98' => 'Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)'
42 ),
43 '5.5' => array(
44 'Windows 2000' => 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)'
45 ),
46 '6.0' => array(
47 'Windows XP SP2' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'
48 ),
49 '7.0' => array(
50 'Windows XP SP2' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'
51 ),
d2fdad7c
FM
52 '7.0b' => array(
53 'Windows XP' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Meridio for Excel 5.0.251; Meridio for PowerPoint 5.0.251; Meridio for Word 5.0.251; Meridio Protocol; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)'
54 ),
c3d2fbf9
SH
55 '8.0' => array(
56 'Windows Vista' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)'
57 ),
58 '9.0' => array(
59 'Windows 7' => 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'
60 ),
61 '9.0i' => array(
62 'Windows 7' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)'
63 ),
64 '10.0' => array(
65 'Windows 8' => 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)'
66 ),
67 '10.0i' => array(
68 'Windows 8' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)'
69 ),
a6989aa6
MR
70 '11.0' => array(
71 'Windows 8.1' => 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0)'
72 ),
bc242bbd
MS
73 '11.0i' => array(
74 'Windows 8.1' => ' Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C)'
75 ),
c3d2fbf9
SH
76 ),
77 'Firefox' => array(
78 '1.0.6' => array(
79 'Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6'
80 ),
81 '1.5' => array(
82 'Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8) Gecko/20051107 Firefox/1.5'
83 ),
84 '1.5.0.1' => array(
85 'Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1'
86 ),
87 '2.0' => array(
88 'Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1',
89 'Ubuntu Linux AMD64' => 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1) Gecko/20060601 Firefox/2.0 (Ubuntu-edgy)'
90 ),
91 '3.0.6' => array(
92 'SUSE' => 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.6) Gecko/2009012700 SUSE/3.0.6-1.4 Firefox/3.0.6'
93 ),
94 '3.6' => array(
95 'Linux' => 'Mozilla/5.0 (X11; Linux i686; rv:2.0) Gecko/20100101 Firefox/3.6'
96 ),
97 '11.0' => array(
98 'Windows' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko Firefox/11.0'
99 ),
100 '15.0a2' => array(
101 'Windows' => 'Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2'
102 ),
103 '18.0' => array(
104 'Mac OS X' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:18.0) Gecko/18.0 Firefox/18.0'
105 ),
106 ),
107 'SeaMonkey' => array(
108 '2.0' => array(
109 'Windows' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1b3pre) Gecko/20081208 SeaMonkey/2.0'
110 ),
111 '2.1' => array(
112 'Linux' => 'Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20110609 Firefox/4.0.1 SeaMonkey/2.1'
113 ),
114 '2.3' => array(
115 'FreeBSD' => 'Mozilla/5.0 (X11; FreeBSD amd64; rv:6.0) Gecko/20110818 Firefox/6.0 SeaMonkey/2.3'
116 ),
117 ),
118 'Safari' => array(
119 '312' => array(
120 'Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312'
121 ),
122 '412' => array(
123 'Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412'
124 ),
125 '2.0' => array(
126 'Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412'
127 )
128 ),
129 'Safari iOS' => array(
130 '528' => array(
131 'iPhone' => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; cs-cz) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16'
132 ),
133 '533' => array(
134 'iPad' => 'Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5'
135 ),
136 ),
137 'WebKit Android' => array(
138 '525' => array(
139 'G1 Phone' => 'Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2 – G1 Phone'
140 ),
141 '530' => array(
142 'Nexus' => 'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 –Nexus'
143 ),
657a94fc 144 '537' => array(
8ce30abf
B
145 'Samsung GT-9505' => 'Mozilla/5.0 (Linux; Android 4.3; it-it; SAMSUNG GT-I9505/I9505XXUEMJ7 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36',
146 'Nexus 5' => 'Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36'
657a94fc 147 )
c3d2fbf9
SH
148 ),
149 'Chrome' => array(
150 '8' => array(
151 'Mac OS X' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10'
152 ),
153 ),
154 'Opera' => array(
155 '8.51' => array(
156 'Windows XP' => 'Opera/8.51 (Windows NT 5.1; U; en)'
157 ),
158 '9.0' => array(
159 'Windows XP' => 'Opera/9.0 (Windows NT 5.1; U; en)',
160 'Debian Linux' => 'Opera/9.01 (X11; Linux i686; U; en)'
161 )
21ece8ee
PN
162 ),
163 'MS Word' => array(
164 '2010' => array(
165 'Windows 7' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; ms-office)',
166 'Mac OS X' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X) Word/14.38.0'
167 )
168 ),
169 'MS Outlook' => array(
170 '2010' => array(
171 'Windows 7' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Microsoft Outlook 14.0.7113; ms-office; MSOffice 14)'
172 )
d2fdad7c
FM
173 ),
174 'Meridio' => array(
175 '5.0.251' => array(
176 'Windows XP' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Meridio for Excel 5.0.251; Meridio for PowerPoint 5.0.251; Meridio for Word 5.0.251; Meridio Protocol; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)'
177 )
c3d2fbf9
SH
178 )
179 );
180
181 /**
182 * Test instance generation.
183 */
184 public function test_instance() {
185 $this->assertInstanceOf('core_useragent', core_useragent::instance());
186 $this->assertInstanceOf('core_useragent', core_useragent::instance(true));
187 }
188
189 /**
190 * Modifies $_SERVER['HTTP_USER_AGENT'] manually to check if check_browser_version
191 * works as expected.
192 */
193 public function test_check_browser_version() {
194 core_useragent::instance(true, $this->user_agents['Safari']['412']['Mac OS X']);
378b3eac 195 $this->assertTrue(core_useragent::is_safari());
c3d2fbf9 196 $this->assertTrue(core_useragent::check_safari_version());
378b3eac 197 $this->assertTrue(core_useragent::is_webkit());
c3d2fbf9
SH
198 $this->assertTrue(core_useragent::check_webkit_version());
199 $this->assertTrue(core_useragent::check_safari_version('312'));
200 $this->assertFalse(core_useragent::check_safari_version('500'));
378b3eac 201 $this->assertFalse(core_useragent::is_chrome());
c3d2fbf9 202 $this->assertFalse(core_useragent::check_chrome_version());
378b3eac 203 $this->assertFalse(core_useragent::is_safari_ios());
c3d2fbf9 204 $this->assertFalse(core_useragent::check_safari_ios_version());
21ece8ee 205 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
206
207 core_useragent::instance(true, $this->user_agents['Safari iOS']['528']['iPhone']);
378b3eac 208 $this->assertTrue(core_useragent::is_safari_ios());
c3d2fbf9 209 $this->assertTrue(core_useragent::check_safari_ios_version());
378b3eac 210 $this->assertTrue(core_useragent::is_webkit());
c3d2fbf9
SH
211 $this->assertTrue(core_useragent::check_webkit_version());
212 $this->assertTrue(core_useragent::check_safari_ios_version('527'));
213 $this->assertFalse(core_useragent::check_safari_ios_version(590));
214 $this->assertFalse(core_useragent::check_safari_version('312'));
215 $this->assertFalse(core_useragent::check_safari_version('500'));
378b3eac 216 $this->assertFalse(core_useragent::is_chrome());
c3d2fbf9 217 $this->assertFalse(core_useragent::check_chrome_version());
21ece8ee 218 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
219
220 core_useragent::instance(true, $this->user_agents['WebKit Android']['530']['Nexus']);
378b3eac 221 $this->assertTrue(core_useragent::is_webkit());
c3d2fbf9
SH
222 $this->assertTrue(core_useragent::check_webkit_version());
223 $this->assertTrue(core_useragent::check_webkit_android_version('527'));
224 $this->assertFalse(core_useragent::check_webkit_android_version(590));
378b3eac 225 $this->assertFalse(core_useragent::is_safari());
c3d2fbf9 226 $this->assertFalse(core_useragent::check_safari_version());
378b3eac 227 $this->assertFalse(core_useragent::is_chrome());
c3d2fbf9 228 $this->assertFalse(core_useragent::check_chrome_version());
21ece8ee 229 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9 230
8ce30abf
B
231 core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Samsung GT-9505']);
232 $this->assertTrue(core_useragent::is_webkit());
233 $this->assertTrue(core_useragent::check_webkit_version());
234 $this->assertTrue(core_useragent::check_webkit_android_version('527'));
235 $this->assertTrue(core_useragent::is_chrome());
236 $this->assertTrue(core_useragent::check_chrome_version());
237 $this->assertFalse(core_useragent::check_webkit_android_version(590));
238 $this->assertFalse(core_useragent::is_safari());
239 $this->assertFalse(core_useragent::check_safari_version());
240
241 core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Nexus 5']);
242 $this->assertTrue(core_useragent::is_webkit());
243 $this->assertTrue(core_useragent::check_webkit_version());
244 $this->assertTrue(core_useragent::check_webkit_android_version('527'));
245 $this->assertTrue(core_useragent::is_chrome());
246 $this->assertTrue(core_useragent::check_chrome_version());
247 $this->assertFalse(core_useragent::check_webkit_android_version(590));
248 $this->assertFalse(core_useragent::is_safari());
249 $this->assertFalse(core_useragent::check_safari_version());
250
c3d2fbf9 251 core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
378b3eac 252 $this->assertTrue(core_useragent::is_chrome());
c3d2fbf9 253 $this->assertTrue(core_useragent::check_chrome_version());
378b3eac 254 $this->assertTrue(core_useragent::is_webkit());
c3d2fbf9
SH
255 $this->assertTrue(core_useragent::check_webkit_version());
256 $this->assertTrue(core_useragent::check_chrome_version(8));
257 $this->assertFalse(core_useragent::check_chrome_version(10));
258 $this->assertFalse(core_useragent::check_safari_version('1'));
21ece8ee 259 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
260
261 core_useragent::instance(true, $this->user_agents['Opera']['9.0']['Windows XP']);
378b3eac 262 $this->assertTrue(core_useragent::is_opera());
c3d2fbf9
SH
263 $this->assertTrue(core_useragent::check_opera_version());
264 $this->assertTrue(core_useragent::check_opera_version('8.0'));
265 $this->assertFalse(core_useragent::check_opera_version('10.0'));
21ece8ee 266 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
267
268 core_useragent::instance(true, $this->user_agents['MSIE']['6.0']['Windows XP SP2']);
378b3eac 269 $this->assertTrue(core_useragent::is_ie());
c3d2fbf9
SH
270 $this->assertTrue(core_useragent::check_ie_version());
271 $this->assertTrue(core_useragent::check_ie_version('5.0'));
bc242bbd 272 $this->assertFalse(core_useragent::check_ie_compatibility_view());
c3d2fbf9 273 $this->assertFalse(core_useragent::check_ie_version('7.0'));
21ece8ee 274 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
275
276 core_useragent::instance(true, $this->user_agents['MSIE']['5.0']['Windows 98']);
378b3eac 277 $this->assertFalse(core_useragent::is_ie());
c3d2fbf9
SH
278 $this->assertFalse(core_useragent::check_ie_version());
279 $this->assertTrue(core_useragent::check_ie_version(0));
280 $this->assertTrue(core_useragent::check_ie_version('5.0'));
bc242bbd 281 $this->assertFalse(core_useragent::check_ie_compatibility_view());
c3d2fbf9 282 $this->assertFalse(core_useragent::check_ie_version('7.0'));
21ece8ee 283 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9 284
d2fdad7c
FM
285 core_useragent::instance(true, $this->user_agents['MSIE']['7.0']['Windows XP SP2']);
286 $this->assertTrue(core_useragent::is_ie());
287 $this->assertTrue(core_useragent::check_ie_version());
288 $this->assertTrue(core_useragent::check_ie_version('7.0'));
289 $this->assertFalse(core_useragent::check_ie_compatibility_view());
290 $this->assertFalse(core_useragent::check_ie_version('8.0'));
291 $this->assertFalse(core_useragent::is_msword());
292
293 core_useragent::instance(true, $this->user_agents['MSIE']['7.0b']['Windows XP']);
294 $this->assertTrue(core_useragent::is_ie());
295 $this->assertTrue(core_useragent::check_ie_version());
296 $this->assertTrue(core_useragent::check_ie_version('7.0'));
297 $this->assertFalse(core_useragent::check_ie_compatibility_view());
298 $this->assertFalse(core_useragent::check_ie_version('8.0'));
299 $this->assertFalse(core_useragent::is_msword());
300
c3d2fbf9 301 core_useragent::instance(true, $this->user_agents['MSIE']['9.0']['Windows 7']);
378b3eac 302 $this->assertTrue(core_useragent::is_ie());
c3d2fbf9
SH
303 $this->assertTrue(core_useragent::check_ie_version());
304 $this->assertTrue(core_useragent::check_ie_version(0));
305 $this->assertTrue(core_useragent::check_ie_version('5.0'));
306 $this->assertTrue(core_useragent::check_ie_version('9.0'));
bc242bbd 307 $this->assertFalse(core_useragent::check_ie_compatibility_view());
c3d2fbf9 308 $this->assertFalse(core_useragent::check_ie_version('10'));
21ece8ee 309 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
310
311 core_useragent::instance(true, $this->user_agents['MSIE']['9.0i']['Windows 7']);
378b3eac 312 $this->assertTrue(core_useragent::is_ie());
c3d2fbf9
SH
313 $this->assertTrue(core_useragent::check_ie_version());
314 $this->assertTrue(core_useragent::check_ie_version(0));
315 $this->assertTrue(core_useragent::check_ie_version('5.0'));
316 $this->assertTrue(core_useragent::check_ie_version('9.0'));
bc242bbd 317 $this->assertTrue(core_useragent::check_ie_compatibility_view());
c3d2fbf9 318 $this->assertFalse(core_useragent::check_ie_version('10'));
21ece8ee 319 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
320
321 core_useragent::instance(true, $this->user_agents['MSIE']['10.0']['Windows 8']);
378b3eac 322 $this->assertTrue(core_useragent::is_ie());
c3d2fbf9
SH
323 $this->assertTrue(core_useragent::check_ie_version());
324 $this->assertTrue(core_useragent::check_ie_version(0));
325 $this->assertTrue(core_useragent::check_ie_version('5.0'));
326 $this->assertTrue(core_useragent::check_ie_version('9.0'));
327 $this->assertTrue(core_useragent::check_ie_version('10'));
bc242bbd 328 $this->assertFalse(core_useragent::check_ie_compatibility_view());
c3d2fbf9 329 $this->assertFalse(core_useragent::check_ie_version('11'));
21ece8ee 330 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
331
332 core_useragent::instance(true, $this->user_agents['MSIE']['10.0i']['Windows 8']);
378b3eac 333 $this->assertTrue(core_useragent::is_ie());
c3d2fbf9
SH
334 $this->assertTrue(core_useragent::check_ie_version());
335 $this->assertTrue(core_useragent::check_ie_version(0));
336 $this->assertTrue(core_useragent::check_ie_version('5.0'));
337 $this->assertTrue(core_useragent::check_ie_version('9.0'));
338 $this->assertTrue(core_useragent::check_ie_version('10'));
bc242bbd 339 $this->assertTrue(core_useragent::check_ie_compatibility_view());
c3d2fbf9 340 $this->assertFalse(core_useragent::check_ie_version('11'));
21ece8ee 341 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9 342
a6989aa6
MR
343 core_useragent::instance(true, $this->user_agents['MSIE']['11.0']['Windows 8.1']);
344 $this->assertTrue(core_useragent::is_ie());
345 $this->assertTrue(core_useragent::check_ie_version());
346 $this->assertTrue(core_useragent::check_ie_version(0));
347 $this->assertTrue(core_useragent::check_ie_version('5.0'));
348 $this->assertTrue(core_useragent::check_ie_version('9.0'));
349 $this->assertTrue(core_useragent::check_ie_version('10'));
350 $this->assertTrue(core_useragent::check_ie_version('11'));
bc242bbd
MS
351 $this->assertFalse(core_useragent::check_ie_compatibility_view());
352 $this->assertFalse(core_useragent::check_ie_version('12'));
21ece8ee 353 $this->assertFalse(core_useragent::is_msword());
bc242bbd
MS
354
355 core_useragent::instance(true, $this->user_agents['MSIE']['11.0i']['Windows 8.1']);
356 $this->assertTrue(core_useragent::is_ie());
357 $this->assertTrue(core_useragent::check_ie_version());
358 $this->assertTrue(core_useragent::check_ie_version(0));
359 $this->assertTrue(core_useragent::check_ie_version('5.0'));
360 $this->assertTrue(core_useragent::check_ie_version('9.0'));
361 $this->assertTrue(core_useragent::check_ie_version('10'));
362 $this->assertTrue(core_useragent::check_ie_version('11'));
363 $this->assertTrue(core_useragent::check_ie_compatibility_view());
a6989aa6 364 $this->assertFalse(core_useragent::check_ie_version('12'));
21ece8ee 365 $this->assertFalse(core_useragent::is_msword());
a6989aa6 366
c3d2fbf9 367 core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
378b3eac 368 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
369 $this->assertTrue(core_useragent::check_firefox_version());
370 $this->assertTrue(core_useragent::check_firefox_version('1.5'));
371 $this->assertFalse(core_useragent::check_firefox_version('3.0'));
372 $this->assertTrue(core_useragent::check_gecko_version('2'));
373 $this->assertTrue(core_useragent::check_gecko_version(20030516));
374 $this->assertTrue(core_useragent::check_gecko_version(20051106));
375 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
21ece8ee 376 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
377
378 core_useragent::instance(true, $this->user_agents['Firefox']['1.0.6']['Windows XP']);
378b3eac 379 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
380 $this->assertTrue(core_useragent::check_firefox_version());
381 $this->assertTrue(core_useragent::check_gecko_version('1'));
382 $this->assertFalse(core_useragent::check_gecko_version(20030516));
383 $this->assertFalse(core_useragent::check_gecko_version(20051106));
384 $this->assertFalse(core_useragent::check_gecko_version(2006010100));
385 $this->assertFalse(core_useragent::check_firefox_version('1.5'));
386 $this->assertFalse(core_useragent::check_firefox_version('3.0'));
387 $this->assertFalse(core_useragent::check_gecko_version('2'));
21ece8ee 388 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
389
390 core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
378b3eac 391 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
392 $this->assertTrue(core_useragent::check_firefox_version());
393 $this->assertTrue(core_useragent::check_firefox_version('1.5'));
394 $this->assertTrue(core_useragent::check_gecko_version('1'));
395 $this->assertTrue(core_useragent::check_gecko_version('2'));
396 $this->assertTrue(core_useragent::check_gecko_version(20030516));
397 $this->assertTrue(core_useragent::check_gecko_version(20051106));
398 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
399 $this->assertFalse(core_useragent::check_firefox_version('3.0'));
21ece8ee 400 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
401
402 core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
378b3eac 403 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
404 $this->assertTrue(core_useragent::check_firefox_version());
405 $this->assertTrue(core_useragent::check_firefox_version('1.5'));
406 $this->assertTrue(core_useragent::check_firefox_version('3.0'));
407 $this->assertTrue(core_useragent::check_gecko_version('2'));
408 $this->assertTrue(core_useragent::check_gecko_version('3.6'));
409 $this->assertTrue(core_useragent::check_gecko_version(20030516));
410 $this->assertTrue(core_useragent::check_gecko_version(20051106));
411 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
412 $this->assertFalse(core_useragent::check_firefox_version('4'));
413 $this->assertFalse(core_useragent::check_firefox_version('10'));
21ece8ee 414 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
415
416 core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
378b3eac 417 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
418 $this->assertTrue(core_useragent::check_firefox_version());
419 $this->assertTrue(core_useragent::check_firefox_version('1.5'));
420 $this->assertTrue(core_useragent::check_firefox_version('3.0'));
421 $this->assertTrue(core_useragent::check_gecko_version('2'));
422 $this->assertTrue(core_useragent::check_gecko_version('3.6'));
423 $this->assertTrue(core_useragent::check_gecko_version(20030516));
424 $this->assertTrue(core_useragent::check_gecko_version(20051106));
425 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
426 $this->assertFalse(core_useragent::check_firefox_version('4'));
427 $this->assertFalse(core_useragent::check_firefox_version('10'));
428 $this->assertFalse(core_useragent::check_firefox_version('18'));
429 $this->assertFalse(core_useragent::check_gecko_version('4'));
21ece8ee 430 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
431
432 core_useragent::instance(true, $this->user_agents['Firefox']['15.0a2']['Windows']);
378b3eac 433 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
434 $this->assertTrue(core_useragent::check_firefox_version());
435 $this->assertTrue(core_useragent::check_firefox_version('1.5'));
436 $this->assertTrue(core_useragent::check_firefox_version('3.0'));
437 $this->assertTrue(core_useragent::check_gecko_version('2'));
438 $this->assertTrue(core_useragent::check_gecko_version('3.6'));
439 $this->assertTrue(core_useragent::check_gecko_version('15.0'));
440 $this->assertTrue(core_useragent::check_gecko_version(20030516));
441 $this->assertTrue(core_useragent::check_gecko_version(20051106));
442 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
443 $this->assertTrue(core_useragent::check_firefox_version('4'));
444 $this->assertTrue(core_useragent::check_firefox_version('10'));
445 $this->assertTrue(core_useragent::check_firefox_version('15'));
446 $this->assertFalse(core_useragent::check_firefox_version('18'));
447 $this->assertFalse(core_useragent::check_gecko_version('18'));
21ece8ee 448 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
449
450 core_useragent::instance(true, $this->user_agents['Firefox']['18.0']['Mac OS X']);
378b3eac 451 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
452 $this->assertTrue(core_useragent::check_firefox_version());
453 $this->assertTrue(core_useragent::check_firefox_version('1.5'));
454 $this->assertTrue(core_useragent::check_firefox_version('3.0'));
455 $this->assertTrue(core_useragent::check_gecko_version('2'));
456 $this->assertTrue(core_useragent::check_gecko_version('3.6'));
457 $this->assertTrue(core_useragent::check_gecko_version('15.0'));
458 $this->assertTrue(core_useragent::check_gecko_version('18.0'));
459 $this->assertTrue(core_useragent::check_gecko_version(20030516));
460 $this->assertTrue(core_useragent::check_gecko_version(20051106));
461 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
462 $this->assertTrue(core_useragent::check_firefox_version('4'));
463 $this->assertTrue(core_useragent::check_firefox_version('10'));
464 $this->assertTrue(core_useragent::check_firefox_version('15'));
465 $this->assertTrue(core_useragent::check_firefox_version('18'));
466 $this->assertFalse(core_useragent::check_firefox_version('19'));
467 $this->assertFalse(core_useragent::check_gecko_version('19'));
21ece8ee 468 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
469
470 core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.0']['Windows']);
471 $this->assertTrue(core_useragent::check_gecko_version('2'));
472 $this->assertTrue(core_useragent::check_gecko_version(20030516));
473 $this->assertTrue(core_useragent::check_gecko_version(20051106));
474 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
475 $this->assertFalse(core_useragent::check_gecko_version('3.6'));
476 $this->assertFalse(core_useragent::check_gecko_version('4.0'));
378b3eac 477 $this->assertFalse(core_useragent::is_firefox());
c3d2fbf9 478 $this->assertFalse(core_useragent::check_firefox_version());
21ece8ee 479 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
480
481 core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.1']['Linux']);
482 $this->assertTrue(core_useragent::check_gecko_version('2'));
483 $this->assertTrue(core_useragent::check_gecko_version('3.6'));
484 $this->assertTrue(core_useragent::check_gecko_version('4.0'));
485 $this->assertTrue(core_useragent::check_gecko_version(20030516));
486 $this->assertTrue(core_useragent::check_gecko_version(20051106));
487 $this->assertTrue(core_useragent::check_gecko_version(2006010100));
378b3eac 488 $this->assertTrue(core_useragent::is_firefox());
c3d2fbf9
SH
489 $this->assertTrue(core_useragent::check_firefox_version());
490 $this->assertTrue(core_useragent::check_firefox_version(4.0));
491 $this->assertFalse(core_useragent::check_firefox_version(5));
492 $this->assertFalse(core_useragent::check_gecko_version('18.0'));
21ece8ee 493 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9 494
21ece8ee
PN
495 // We're not really interested in what MS Word gets identified as beyond MS Word itself.
496 core_useragent::instance(true, $this->user_agents['MS Word']['2010']['Windows 7']);
497 $this->assertTrue(core_useragent::is_msword());
498
499 core_useragent::instance(true, $this->user_agents['MS Word']['2010']['Mac OS X']);
500 $this->assertTrue(core_useragent::is_msword());
501
502 // Outlook should not be considered to be MS Word.
503 core_useragent::instance(true, $this->user_agents['MS Outlook']['2010']['Windows 7']);
504 $this->assertFalse(core_useragent::is_msword());
d2fdad7c
FM
505
506 // Meridio should not be considered to be MS Word.
507 core_useragent::instance(true, $this->user_agents['Meridio']['5.0.251']['Windows XP']);
508 $this->assertFalse(core_useragent::is_msword());
c3d2fbf9
SH
509 }
510
657a94fc
MS
511 /**
512 * Modifies $_SERVER['HTTP_USER_AGENT'] manually to check if supports_svg
513 * works as expected.
514 */
515 public function test_supports_svg() {
657a94fc
MS
516 // MSIE 5.0 is not considered a browser at all: known false positive.
517 core_useragent::instance(true, $this->user_agents['MSIE']['5.0']['Windows 98']);
518 $this->assertTrue(core_useragent::supports_svg());
519
520 core_useragent::instance(true, $this->user_agents['MSIE']['5.5']['Windows 2000']);
521 $this->assertFalse(core_useragent::supports_svg());
522
523 core_useragent::instance(true, $this->user_agents['MSIE']['6.0']['Windows XP SP2']);
524 $this->assertFalse(core_useragent::supports_svg());
525
526 core_useragent::instance(true, $this->user_agents['MSIE']['7.0']['Windows XP SP2']);
527 $this->assertFalse(core_useragent::supports_svg());
528
529 core_useragent::instance(true, $this->user_agents['MSIE']['8.0']['Windows Vista']);
530 $this->assertFalse(core_useragent::supports_svg());
531
532 core_useragent::instance(true, $this->user_agents['MSIE']['9.0']['Windows 7']);
533 $this->assertTrue(core_useragent::supports_svg());
534
535 core_useragent::instance(true, $this->user_agents['MSIE']['9.0i']['Windows 7']);
536 $this->assertFalse(core_useragent::supports_svg());
537
538 core_useragent::instance(true, $this->user_agents['MSIE']['10.0']['Windows 8']);
539 $this->assertTrue(core_useragent::supports_svg());
540
541 core_useragent::instance(true, $this->user_agents['MSIE']['10.0i']['Windows 8']);
542 $this->assertTrue(core_useragent::supports_svg());
543
544 core_useragent::instance(true, $this->user_agents['MSIE']['11.0']['Windows 8.1']);
545 $this->assertTrue(core_useragent::supports_svg());
546
547 core_useragent::instance(true, $this->user_agents['MSIE']['11.0i']['Windows 8.1']);
548 $this->assertTrue(core_useragent::supports_svg());
549
550 core_useragent::instance(true, $this->user_agents['WebKit Android']['525']['G1 Phone']);
551 $this->assertFalse(core_useragent::supports_svg());
552
553 core_useragent::instance(true, $this->user_agents['WebKit Android']['530']['Nexus']);
554 $this->assertFalse(core_useragent::supports_svg());
555
556 core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Samsung GT-9505']);
557 $this->assertTrue(core_useragent::supports_svg());
558
559 core_useragent::instance(true, $this->user_agents['Opera']['9.0']['Windows XP']);
560 $this->assertFalse(core_useragent::supports_svg());
561
562 core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
563 $this->assertTrue(core_useragent::supports_svg());
564
565 core_useragent::instance(true, $this->user_agents['Firefox']['18.0']['Mac OS X']);
566 $this->assertTrue(core_useragent::supports_svg());
567 }
568
c3d2fbf9
SH
569 /**
570 * Test browser version classes functionality.
571 */
572 public function test_get_browser_version_classes() {
573 core_useragent::instance(true, $this->user_agents['Safari']['412']['Mac OS X']);
574 $this->assertEquals(array('safari'), core_useragent::get_browser_version_classes());
575
576 core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
577 $this->assertEquals(array('safari'), core_useragent::get_browser_version_classes());
578
579 core_useragent::instance(true, $this->user_agents['Safari iOS']['528']['iPhone']);
580 $this->assertEquals(array('safari', 'ios'), core_useragent::get_browser_version_classes());
581
582 core_useragent::instance(true, $this->user_agents['WebKit Android']['530']['Nexus']);
583 $this->assertEquals(array('safari', 'android'), core_useragent::get_browser_version_classes());
584
585 core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
586 $this->assertEquals(array('safari'), core_useragent::get_browser_version_classes());
587
588 core_useragent::instance(true, $this->user_agents['Opera']['9.0']['Windows XP']);
589 $this->assertEquals(array('opera'), core_useragent::get_browser_version_classes());
590
591 core_useragent::instance(true, $this->user_agents['MSIE']['6.0']['Windows XP SP2']);
592 $this->assertEquals(array('ie', 'ie6'), core_useragent::get_browser_version_classes());
593
594 core_useragent::instance(true, $this->user_agents['MSIE']['7.0']['Windows XP SP2']);
595 $this->assertEquals(array('ie', 'ie7'), core_useragent::get_browser_version_classes());
596
597 core_useragent::instance(true, $this->user_agents['MSIE']['8.0']['Windows Vista']);
598 $this->assertEquals(array('ie', 'ie8'), core_useragent::get_browser_version_classes());
599
600 core_useragent::instance(true, $this->user_agents['MSIE']['9.0']['Windows 7']);
601 $this->assertEquals(array('ie', 'ie9'), core_useragent::get_browser_version_classes());
602
603 core_useragent::instance(true, $this->user_agents['MSIE']['9.0i']['Windows 7']);
604 $this->assertEquals(array('ie', 'ie9'), core_useragent::get_browser_version_classes());
605
606 core_useragent::instance(true, $this->user_agents['MSIE']['10.0']['Windows 8']);
607 $this->assertEquals(array('ie', 'ie10'), core_useragent::get_browser_version_classes());
608
609 core_useragent::instance(true, $this->user_agents['MSIE']['10.0i']['Windows 8']);
610 $this->assertEquals(array('ie', 'ie10'), core_useragent::get_browser_version_classes());
611
612 core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
613 $this->assertEquals(array('gecko', 'gecko18'), core_useragent::get_browser_version_classes());
614
615 core_useragent::instance(true, $this->user_agents['Firefox']['3.0.6']['SUSE']);
616 $this->assertEquals(array('gecko', 'gecko19'), core_useragent::get_browser_version_classes());
617 }
618
619 /**
620 * Test device type detection.
621 */
622 public function test_get_device_type() {
623 // IE8 (common pattern ~1.5% of IE7/8 users have embedded IE6 agent).
624 $ie8 = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BT Openworld BB; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Hotbar 10.2.197.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)';
625 core_useragent::instance(true, $ie8);
626 $this->assertEquals('default', core_useragent::get_device_type());
627 // Genuine IE6.
628 $ie6 = 'Mozilla/4.0 (compatible; MSIE 6.0; AOL 9.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.0.3705; Media Center PC 2.8)';
629 core_useragent::instance(true, $ie6);
630 $this->assertEquals('legacy', core_useragent::get_device_type());
631
632 core_useragent::instance(true);
633 }
378b3eac 634}