[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/mod/quiz/tests/ -> attempt_test.php (source)

   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  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1