844fc5df1bc3e023b24ae14ada61cac11fa466d4
[moodle.git] / lib / ajax / tests / ajaxlib_test.php
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/>.
17 /**
18  * Unit tests for (some of) ../ajaxlib.php.
19  *
20  * @package   core
21  * @category  phpunit
22  * @copyright 2009 Tim Hunt
23  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 defined('MOODLE_INTERNAL') || die();
28 global $CFG;
29 require_once($CFG->libdir . '/ajax/ajaxlib.php');
32 /**
33  * Unit tests for ../ajaxlib.php functions.
34  *
35  * @copyright 2008 Tim Hunt
36  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37  */
38 class ajax_testcase extends advanced_testcase {
40     var $user_agents = array(
41         'MSIE' => array(
42             '5.5' => array('Windows 2000' => 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)'),
43             '6.0' => array('Windows XP SP2' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'),
44             '7.0' => array('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)')
45         ),
46         'Firefox' => array(
47             '1.0.6'   => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6'),
48             '1.5'     => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8) Gecko/20051107 Firefox/1.5'),
49             '1.5.0.1' => array('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'),
50             '2.0'     => array('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',
51                 'Ubuntu Linux AMD64' => 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1) Gecko/20060601 Firefox/2.0 (Ubuntu-edgy)')
52         ),
53         'Safari' => array(
54             '312' => array('Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312'),
55             '2.0' => array('Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412')
56         ),
57         'Opera' => array(
58             '8.51' => array('Windows XP' => 'Opera/8.51 (Windows NT 5.1; U; en)'),
59             '9.0'  => array('Windows XP' => 'Opera/9.0 (Windows NT 5.1; U; en)',
60                 'Debian Linux' => 'Opera/9.01 (X11; Linux i686; U; en)')
61         )
62     );
64     /**
65      * Uses the array of user agents to test ajax_lib::ajaxenabled
66      */
67     function test_ajaxenabled() {
68         global $CFG, $USER;
70         $this->resetAfterTest(true);
72         $CFG->enableajax = 1;
73         $USER->ajax      = 1;
75         // Should be true
76         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP'];
77         $this->assertTrue(ajaxenabled());
79         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['1.5']['Windows XP'];
80         $this->assertTrue(ajaxenabled());
82         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X'];
83         $this->assertTrue(ajaxenabled());
85         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP'];
86         $this->assertTrue(ajaxenabled());
88         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['6.0']['Windows XP SP2'];
89         $this->assertTrue(ajaxenabled());
91         // Should be false
92         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['1.0.6']['Windows XP'];
93         $this->assertFalse(ajaxenabled());
95         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['312']['Mac OS X'];
96         $this->assertFalse(ajaxenabled());
98         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['8.51']['Windows XP'];
99         $this->assertFalse(ajaxenabled());
101         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['5.5']['Windows 2000'];
102         $this->assertFalse(ajaxenabled());
104         // Test array of tested browsers
105         $tested_browsers = array('MSIE' => 6.0, 'Gecko' => 20061111);
106         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP'];
107         $this->assertTrue(ajaxenabled($tested_browsers));
109         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['7.0']['Windows XP SP2'];
110         $this->assertTrue(ajaxenabled($tested_browsers));
112         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X'];
113         $this->assertFalse(ajaxenabled($tested_browsers));
115         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP'];
116         $this->assertFalse(ajaxenabled($tested_browsers));
118         $tested_browsers = array('Safari' => 412, 'Opera' => 9.0);
119         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP'];
120         $this->assertFalse(ajaxenabled($tested_browsers));
122         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['7.0']['Windows XP SP2'];
123         $this->assertFalse(ajaxenabled($tested_browsers));
125         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X'];
126         $this->assertTrue(ajaxenabled($tested_browsers));
128         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP'];
129         $this->assertTrue(ajaxenabled($tested_browsers));
130     }