[ Index ]

PHP Cross Reference of Unnamed Project

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->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  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1