See Release Notes
Long Term Support Release
Differences Between: [Versions 311 and 401]
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 * Unit tests for the select missing words question edit form. 19 * 20 * @package qtype_gapselect 21 * @copyright 2012 The Open University 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace qtype_gapselect\form; 26 27 defined('MOODLE_INTERNAL') || die(); 28 global $CFG; 29 30 require_once($CFG->dirroot . '/question/engine/tests/helpers.php'); 31 require_once($CFG->dirroot . '/question/type/edit_question_form.php'); 32 require_once($CFG->dirroot . '/question/type/gapselect/edit_gapselect_form.php'); 33 34 35 /** 36 * Subclass of qtype_gapselect_edit_form_base that is easier to used in unit tests. 37 * 38 * @copyright 2012 The Open University 39 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 40 */ 41 class qtype_gapselect_edit_form_base_testable extends \qtype_gapselect_edit_form_base { 42 public function get_illegal_tag_error($text) { 43 return parent::get_illegal_tag_error($text); 44 } 45 46 /** 47 * Set the list of allowed tags. 48 * @param array $allowed 49 */ 50 public function set_allowed_tags(array $allowed) { 51 $this->allowedhtmltags = $allowed; 52 } 53 54 public function qtype() { 55 return 'gapselect'; 56 } 57 } 58 59 60 /** 61 * Unit tests for select missing words question edit form. 62 * 63 * @package qtype_gapselect 64 * @copyright 2012 The Open University 65 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 66 */ 67 class edit_form_test extends \advanced_testcase { 68 69 /** 70 * Helper method. 71 * 72 * @param string $classname the question form class to instantiate. 73 * 74 * 75 * @return array with two elements: 76 * question_edit_form great a question form instance that can be tested. 77 * stdClass the question category. 78 */ 79 protected function get_form($classname) { 80 $this->setAdminUser(); 81 $this->resetAfterTest(); 82 83 $syscontext = \context_system::instance(); 84 $category = question_make_default_categories(array($syscontext)); 85 $fakequestion = new \stdClass(); 86 $fakequestion->qtype = 'gapselect'; // Does not actually matter if this is wrong. 87 $fakequestion->contextid = $syscontext->id; 88 $fakequestion->createdby = 2; 89 $fakequestion->category = $category->id; 90 $fakequestion->questiontext = 'Test [[1]] question [[2]]'; 91 $fakequestion->options = new \stdClass(); 92 $fakequestion->options->answers = array(); 93 $fakequestion->formoptions = new \stdClass(); 94 $fakequestion->formoptions->movecontext = null; 95 $fakequestion->formoptions->repeatelements = true; 96 $fakequestion->inputs = null; 97 98 $form = new $classname(new \moodle_url('/'), $fakequestion, $category, 99 new \core_question\local\bank\question_edit_contexts($syscontext)); 100 101 return [$form, $category]; 102 } 103 104 public function test_get_illegal_tag_error() { 105 list($form) = $this->get_form('\qtype_gapselect\form\qtype_gapselect_edit_form_base_testable'); 106 107 $this->assertEquals('', $form->get_illegal_tag_error('frog')); 108 $this->assertEquals('', $form->get_illegal_tag_error('<i>toad</i>')); 109 110 $a = new \stdClass(); 111 $a->tag = '<ijk>'; 112 $a->allowed = '<sub>, <sup>, <b>, <i>, <em>, <strong>, <span>'; 113 $this->assertEquals(get_string('tagsnotallowed', 'qtype_gapselect', $a), $form->get_illegal_tag_error('<ijk>')); 114 115 $a->tag = '</cat>'; 116 $this->assertEquals(get_string('tagsnotallowed', 'qtype_gapselect', $a), $form->get_illegal_tag_error('</cat>')); 117 118 $a->tag = '<br />'; 119 $this->assertEquals(get_string('tagsnotallowed', 'qtype_gapselect', $a), $form->get_illegal_tag_error('<i><br /></i>')); 120 121 $form->set_allowed_tags(array()); 122 123 $this->assertEquals('', $form->get_illegal_tag_error('frog')); 124 125 $a->tag = '<i>'; 126 $this->assertEquals(get_string('tagsnotallowedatall', 'qtype_gapselect', $a), 127 $form->get_illegal_tag_error('<i>toad</i>')); 128 129 $a->tag = '<ijk>'; 130 $this->assertEquals(get_string('tagsnotallowedatall', 'qtype_gapselect', $a), 131 $form->get_illegal_tag_error('<ijk>')); 132 133 $a->tag = '</cat>'; 134 $this->assertEquals(get_string('tagsnotallowedatall', 'qtype_gapselect', $a), 135 $form->get_illegal_tag_error('</cat>')); 136 137 $a->tag = '<i>'; 138 $this->assertEquals(get_string('tagsnotallowedatall', 'qtype_gapselect', $a), 139 $form->get_illegal_tag_error('<i><br /></i>')); 140 } 141 142 /** 143 * Test the form shows the right number of groups of choices. 144 */ 145 public function test_number_of_choice_groups() { 146 list($form) = $this->get_form('qtype_gapselect_edit_form'); 147 // Use reflection to get the protected property we need. 148 $property = new \ReflectionProperty('qtype_gapselect_edit_form', '_form'); 149 $property->setAccessible(true); 150 $mform = $property->getValue($form); 151 $choices = $mform->getElement('choices[0]'); 152 $groupoptions = $choices->_elements[1]; 153 $this->assertCount(20, $groupoptions->_options); 154 } 155 156 /** 157 * Test the form correctly validates the HTML allowed in choices. 158 */ 159 public function test_choices_validation() { 160 list($form, $category) = $this->get_form('qtype_gapselect_edit_form'); 161 162 $submitteddata = [ 163 'category' => $category->id, 164 'questiontext' => ['text' => 'Test [[1]] question [[2]]', 'format' => FORMAT_HTML], 165 'choices' => [ 166 ['answer' => 'frog'], 167 ['answer' => '<b>toad</b>'], 168 ], 169 ]; 170 171 $errors = $form->validation($submitteddata, []); 172 173 $this->assertArrayNotHasKey('choices[0]', $errors); 174 $this->assertEquals('<b> is not allowed. (No HTML is allowed here.)', 175 $errors['choices[1]']); 176 } 177 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body