[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 for the quiz_attempt class. 19 * 20 * @package mod_quiz 21 * @category test 22 * @copyright 2014 Tim Hunt 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 defined('MOODLE_INTERNAL') || die(); 27 28 global $CFG; 29 require_once($CFG->dirroot . '/mod/quiz/locallib.php'); 30 31 32 /** 33 * Subclass of quiz_attempt to allow faking of the page layout. 34 * 35 * @copyright 2014 Tim Hunt 36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 37 */ 38 class mod_quiz_attempt_testable extends quiz_attempt { 39 /** @var array list of slots to treat as if they contain descriptions in the fake layout. */ 40 protected $infos = array(); 41 42 /** 43 * Set a fake page layout. Used when we test URL generation. 44 * @param int $id assumed attempt id. 45 * @param string $layout layout to set. Like quiz attempt.layout. E.g. '1,2,0,3,4,0,'. 46 * @param array $infos slot numbers which contain 'descriptions', or other non-questions. 47 * @return quiz_attempt attempt object for use in unit tests. 48 */ 49 public static function setup_fake_attempt_layout($id, $layout, $infos = array()) { 50 $attempt = new stdClass(); 51 $attempt->id = $id; 52 $attempt->layout = $layout; 53 54 $course = new stdClass(); 55 $quiz = new stdClass(); 56 $cm = new stdClass(); 57 $cm->id = 0; 58 59 $attemptobj = new self($attempt, $quiz, $cm, $course, false); 60 61 $attemptobj->infos = $infos; 62 $attemptobj->determine_layout(); 63 $attemptobj->number_questions(); 64 65 return $attemptobj; 66 } 67 68 public function is_real_question($slot) { 69 return !in_array($slot, $this->infos); 70 } 71 } 72 73 74 /** 75 * Tests for the quiz_attempt class. 76 * 77 * @copyright 2014 Tim Hunt 78 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 79 */ 80 class mod_quiz_attempt_testcase extends basic_testcase { 81 /** 82 * Test the functions quiz_update_open_attempts() and get_list_of_overdue_attempts() 83 */ 84 public function test_attempt_url() { 85 $attempt = mod_quiz_attempt_testable::setup_fake_attempt_layout( 86 123, '1,2,0,3,4,0,5,6,0'); 87 88 // Attempt pages. 89 $this->assertEquals(new moodle_url( 90 '/mod/quiz/attempt.php?attempt=123'), 91 $attempt->attempt_url()); 92 93 $this->assertEquals(new moodle_url( 94 '/mod/quiz/attempt.php?attempt=123&page=2'), 95 $attempt->attempt_url(null, 2)); 96 97 $this->assertEquals(new moodle_url( 98 '/mod/quiz/attempt.php?attempt=123&page=1#'), 99 $attempt->attempt_url(3)); 100 101 $this->assertEquals(new moodle_url( 102 '/mod/quiz/attempt.php?attempt=123&page=1#q4'), 103 $attempt->attempt_url(4)); 104 105 $this->assertEquals(new moodle_url( 106 '#'), 107 $attempt->attempt_url(null, 2, 2)); 108 109 $this->assertEquals(new moodle_url( 110 '#'), 111 $attempt->attempt_url(3, -1, 1)); 112 113 $this->assertEquals(new moodle_url( 114 '#q4'), 115 $attempt->attempt_url(4, -1, 1)); 116 117 // Summary page. 118 $this->assertEquals(new moodle_url( 119 '/mod/quiz/summary.php?attempt=123'), 120 $attempt->summary_url()); 121 122 // Review page. 123 $this->assertEquals(new moodle_url( 124 '/mod/quiz/review.php?attempt=123'), 125 $attempt->review_url()); 126 127 $this->assertEquals(new moodle_url( 128 '/mod/quiz/review.php?attempt=123&page=2'), 129 $attempt->review_url(null, 2)); 130 131 $this->assertEquals(new moodle_url( 132 '/mod/quiz/review.php?attempt=123&page=1'), 133 $attempt->review_url(3, -1, false)); 134 135 $this->assertEquals(new moodle_url( 136 '/mod/quiz/review.php?attempt=123&page=1#q4'), 137 $attempt->review_url(4, -1, false)); 138 139 $this->assertEquals(new moodle_url( 140 '/mod/quiz/review.php?attempt=123'), 141 $attempt->review_url(null, 2, true)); 142 143 $this->assertEquals(new moodle_url( 144 '/mod/quiz/review.php?attempt=123'), 145 $attempt->review_url(1, -1, true)); 146 147 $this->assertEquals(new moodle_url( 148 '/mod/quiz/review.php?attempt=123&page=2'), 149 $attempt->review_url(null, 2, false)); 150 151 $this->assertEquals(new moodle_url( 152 '/mod/quiz/review.php?attempt=123&showall=0'), 153 $attempt->review_url(null, 0, false)); 154 155 $this->assertEquals(new moodle_url( 156 '/mod/quiz/review.php?attempt=123&showall=0'), 157 $attempt->review_url(1, -1, false)); 158 159 $this->assertEquals(new moodle_url( 160 '/mod/quiz/review.php?attempt=123&page=1'), 161 $attempt->review_url(3, -1, false)); 162 163 $this->assertEquals(new moodle_url( 164 '/mod/quiz/review.php?attempt=123&page=2'), 165 $attempt->review_url(null, 2)); 166 167 $this->assertEquals(new moodle_url( 168 '#'), 169 $attempt->review_url(null, -1, null, 0)); 170 171 $this->assertEquals(new moodle_url( 172 '#q3'), 173 $attempt->review_url(3, -1, null, 0)); 174 175 $this->assertEquals(new moodle_url( 176 '#q4'), 177 $attempt->review_url(4, -1, null, 0)); 178 179 $this->assertEquals(new moodle_url( 180 '#'), 181 $attempt->review_url(null, 2, true, 0)); 182 183 $this->assertEquals(new moodle_url( 184 '#'), 185 $attempt->review_url(1, -1, true, 0)); 186 187 $this->assertEquals(new moodle_url( 188 '/mod/quiz/review.php?attempt=123&page=2'), 189 $attempt->review_url(null, 2, false, 0)); 190 191 $this->assertEquals(new moodle_url( 192 '#'), 193 $attempt->review_url(null, 0, false, 0)); 194 195 $this->assertEquals(new moodle_url( 196 '#'), 197 $attempt->review_url(1, -1, false, 0)); 198 199 $this->assertEquals(new moodle_url( 200 '/mod/quiz/review.php?attempt=123&page=1#'), 201 $attempt->review_url(3, -1, false, 0)); 202 203 // Review with more than 50 questions in the quiz. 204 $attempt = mod_quiz_attempt_testable::setup_fake_attempt_layout( 205 124, '1,2,3,4,5,6,7,8,9,10,0,11,12,13,14,15,16,17,18,19,20,0,' . 206 '21,22,23,24,25,26,27,28,29,30,0,31,32,33,34,35,36,37,38,39,40,0,' . 207 '41,42,43,44,45,46,47,48,49,50,0,51,52,53,54,55,56,57,58,59,60,0'); 208 209 $this->assertEquals(new moodle_url( 210 '/mod/quiz/review.php?attempt=124'), 211 $attempt->review_url()); 212 213 $this->assertEquals(new moodle_url( 214 '/mod/quiz/review.php?attempt=124&page=2'), 215 $attempt->review_url(null, 2)); 216 217 $this->assertEquals(new moodle_url( 218 '/mod/quiz/review.php?attempt=124&page=1'), 219 $attempt->review_url(11, -1, false)); 220 221 $this->assertEquals(new moodle_url( 222 '/mod/quiz/review.php?attempt=124&page=1#q12'), 223 $attempt->review_url(12, -1, false)); 224 225 $this->assertEquals(new moodle_url( 226 '/mod/quiz/review.php?attempt=124&showall=1'), 227 $attempt->review_url(null, 2, true)); 228 229 $this->assertEquals(new moodle_url( 230 '/mod/quiz/review.php?attempt=124&showall=1'), 231 $attempt->review_url(1, -1, true)); 232 233 $this->assertEquals(new moodle_url( 234 '/mod/quiz/review.php?attempt=124&page=2'), 235 $attempt->review_url(null, 2, false)); 236 237 $this->assertEquals(new moodle_url( 238 '/mod/quiz/review.php?attempt=124'), 239 $attempt->review_url(null, 0, false)); 240 241 $this->assertEquals(new moodle_url( 242 '/mod/quiz/review.php?attempt=124&page=1'), 243 $attempt->review_url(11, -1, false)); 244 245 $this->assertEquals(new moodle_url( 246 '/mod/quiz/review.php?attempt=124&page=1#q12'), 247 $attempt->review_url(12, -1, false)); 248 249 $this->assertEquals(new moodle_url( 250 '/mod/quiz/review.php?attempt=124&page=2'), 251 $attempt->review_url(null, 2)); 252 253 $this->assertEquals(new moodle_url( 254 '#'), 255 $attempt->review_url(null, -1, null, 0)); 256 257 $this->assertEquals(new moodle_url( 258 '#q3'), 259 $attempt->review_url(3, -1, null, 0)); 260 261 $this->assertEquals(new moodle_url( 262 '#q4'), 263 $attempt->review_url(4, -1, null, 0)); 264 265 $this->assertEquals(new moodle_url( 266 '#'), 267 $attempt->review_url(null, 2, true, 0)); 268 269 $this->assertEquals(new moodle_url( 270 '#'), 271 $attempt->review_url(1, -1, true, 0)); 272 273 $this->assertEquals(new moodle_url( 274 '/mod/quiz/review.php?attempt=124&page=2'), 275 $attempt->review_url(null, 2, false, 0)); 276 277 $this->assertEquals(new moodle_url( 278 '#'), 279 $attempt->review_url(null, 0, false, 0)); 280 281 $this->assertEquals(new moodle_url( 282 '#'), 283 $attempt->review_url(1, -1, false, 0)); 284 285 $this->assertEquals(new moodle_url( 286 '/mod/quiz/review.php?attempt=124&page=1#'), 287 $attempt->review_url(11, -1, false, 0)); 288 } 289 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |