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