Merge branch 'MDL-70065_310' of https://github.com/timhunt/moodle into MOODLE_310_STABLE
[moodle.git] / question / type / gapselect / tests / helper.php
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/>.
17 /**
18  * Contains the helper class for the select missing words question type tests.
19  *
20  * @package   qtype_gapselect
21  * @copyright 2011 The Open University
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
26 defined('MOODLE_INTERNAL') || die();
29 /**
30  * Test helper class for the select missing words question type.
31  *
32  * @copyright 2011 The Open University
33  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
34  */
35 class qtype_gapselect_test_helper extends question_test_helper {
37     public function get_test_questions() {
38         return array('fox', 'maths', 'currency', 'multilang', 'missingchoiceno');
39     }
41     /**
42      * Get data you would get by loading a typical select missing words question.
43      *
44      * @return stdClass as returned by question_bank::load_question_data for this qtype.
45      */
46     public static function get_gapselect_question_data_fox() {
47         global $USER;
49         $gapselect = new stdClass();
50         $gapselect->id = 0;
51         $gapselect->category = 0;
52         $gapselect->contextid = 0;
53         $gapselect->parent = 0;
54         $gapselect->questiontextformat = FORMAT_HTML;
55         $gapselect->generalfeedbackformat = FORMAT_HTML;
56         $gapselect->defaultmark = 1;
57         $gapselect->penalty = 0.3333333;
58         $gapselect->length = 1;
59         $gapselect->stamp = make_unique_id_code();
60         $gapselect->version = make_unique_id_code();
61         $gapselect->hidden = 0;
62         $gapselect->idnumber = null;
63         $gapselect->timecreated = time();
64         $gapselect->timemodified = time();
65         $gapselect->createdby = $USER->id;
66         $gapselect->modifiedby = $USER->id;
68         $gapselect->name = 'Selection from drop down list question';
69         $gapselect->questiontext = 'The [[1]] brown [[2]] jumped over the [[3]] dog.';
70         $gapselect->generalfeedback = 'This sentence uses each letter of the alphabet.';
71         $gapselect->qtype = 'gapselect';
73         $gapselect->options = new stdClass();
74         $gapselect->options->shuffleanswers = true;
76         test_question_maker::set_standard_combined_feedback_fields($gapselect->options);
78         $gapselect->options->answers = array(
79             (object) array('answer' => 'quick', 'feedback' => '1'),
80             (object) array('answer' => 'fox', 'feedback' => '2'),
81             (object) array('answer' => 'lazy', 'feedback' => '3'),
82             (object) array('answer' => 'assiduous', 'feedback' => '3'),
83             (object) array('answer' => 'dog', 'feedback' => '2'),
84             (object) array('answer' => 'slow', 'feedback' => '1'),
85         );
87         return $gapselect;
88     }
90     /**
91      * Get data required to save a select missing words question where
92      * the author missed out one of the group numbers.
93      *
94      * @return stdClass data to create a gapselect question.
95      */
96     public function get_gapselect_question_form_data_missingchoiceno() {
97         $fromform = new stdClass();
99         $fromform->name = 'Select missing words question';
100         $fromform->questiontext = ['text' => 'The [[1]] sat on the [[3]].', 'format' => FORMAT_HTML];
101         $fromform->defaultmark = 1.0;
102         $fromform->generalfeedback = ['text' => 'The right answer is: "The cat sat on the mat."', 'format' => FORMAT_HTML];
103         $fromform->choices = [
104                 ['answer' => 'cat', 'choicegroup' => '1'],
105                 ['answer' => '',    'choicegroup' => '1'],
106                 ['answer' => 'mat', 'choicegroup' => '1'],
107         ];
108         test_question_maker::set_standard_combined_feedback_form_data($fromform);
109         $fromform->shownumcorrect = 0;
110         $fromform->penalty = 0.3333333;
112         return $fromform;
113     }
115     /**
116      * Get an example gapselect question to use for testing. This examples has one of each item.
117      * @return qtype_gapselect_question
118      */
119     public static function make_gapselect_question_fox() {
120         question_bank::load_question_definition_classes('gapselect');
121         $gapselect = new qtype_gapselect_question();
123         test_question_maker::initialise_a_question($gapselect);
125         $gapselect->name = 'Selection from drop down list question';
126         $gapselect->questiontext = 'The [[1]] brown [[2]] jumped over the [[3]] dog.';
127         $gapselect->generalfeedback = 'This sentence uses each letter of the alphabet.';
128         $gapselect->qtype = question_bank::get_qtype('gapselect');
130         $gapselect->shufflechoices = true;
132         test_question_maker::set_standard_combined_feedback_fields($gapselect);
134         $gapselect->choices = array(
135             1 => array(
136                 1 => new qtype_gapselect_choice('quick', 1),
137                 2 => new qtype_gapselect_choice('slow', 1)),
138             2 => array(
139                 1 => new qtype_gapselect_choice('fox', 2),
140                 2 => new qtype_gapselect_choice('dog', 2)),
141             3 => array(
142                 1 => new qtype_gapselect_choice('lazy', 3),
143                 2 => new qtype_gapselect_choice('assiduous', 3)),
144         );
146         $gapselect->places = array(1 => 1, 2 => 2, 3 => 3);
147         $gapselect->rightchoices = array(1 => 1, 2 => 1, 3 => 1);
148         $gapselect->textfragments = array('The ', ' brown ', ' jumped over the ', ' dog.');
150         return $gapselect;
151     }
153     /**
154      * Get an example gapselect question to use for testing. This exmples had unlimited items.
155      * @return qtype_gapselect_question
156      */
157     public static function make_gapselect_question_maths() {
158         question_bank::load_question_definition_classes('gapselect');
159         $gapselect = new qtype_gapselect_question();
161         test_question_maker::initialise_a_question($gapselect);
163         $gapselect->name = 'Selection from drop down list question';
164         $gapselect->questiontext = 'Fill in the operators to make this equation work: ' .
165                 '7 [[1]] 11 [[2]] 13 [[1]] 17 [[2]] 19 = 3';
166         $gapselect->generalfeedback = 'This sentence uses each letter of the alphabet.';
167         $gapselect->qtype = question_bank::get_qtype('gapselect');
169         $gapselect->shufflechoices = true;
171         test_question_maker::set_standard_combined_feedback_fields($gapselect);
173         $gapselect->choices = array(
174             1 => array(
175                 1 => new qtype_gapselect_choice('+', 1),
176                 2 => new qtype_gapselect_choice('-', 1),
177                 3 => new qtype_gapselect_choice('*', 1),
178                 4 => new qtype_gapselect_choice('/', 1),
179             ));
181         $gapselect->places = array(1 => 1, 2 => 1, 3 => 1, 4 => 1);
182         $gapselect->rightchoices = array(1 => 1, 2 => 2, 3 => 1, 4 => 2);
183         $gapselect->textfragments = array('7 ', ' 11 ', ' 13 ', ' 17 ', ' 19 = 3');
185         return $gapselect;
186     }
188     /**
189      * Get an example gapselect question with multilang entries to use for testing.
190      * @return qtype_gapselect_question
191      */
192     public static function make_gapselect_question_multilang() {
193         question_bank::load_question_definition_classes('gapselect');
194         $gapselect = new qtype_gapselect_question();
196         test_question_maker::initialise_a_question($gapselect);
198         $gapselect->name = 'Multilang select missing words question';
199         $gapselect->questiontext = '<span lang="en" class="multilang">The </span><span lang="ru" class="multilang"></span>[[1]] ' .
200             '<span lang="en" class="multilang">sat on the</span><span lang="ru" class="multilang">сидела на</span> [[2]].';
201         $gapselect->generalfeedback = 'This sentence uses each letter of the alphabet.';
202         $gapselect->qtype = question_bank::get_qtype('gapselect');
204         $gapselect->shufflechoices = true;
206         test_question_maker::set_standard_combined_feedback_fields($gapselect);
208         $gapselect->choices = array(
209                 1 => array(
210                     1 => new qtype_gapselect_choice('<span lang="en" class="multilang">cat</span><span lang="ru" ' .
211                         'class="multilang">кошка</span>', 1),
212                     2 => new qtype_gapselect_choice('<span lang="en" class="multilang">dog</span><span lang="ru" ' .
213                         'class="multilang">пес</span>', 1)),
214                 2 => array(
215                     1 => new qtype_gapselect_choice('<span lang="en" class="multilang">mat</span><span lang="ru" ' .
216                         'class="multilang">коврике</span>', 2),
217                     2 => new qtype_gapselect_choice('<span lang="en" class="multilang">bat</span><span lang="ru" ' .
218                         'class="multilang">бита</span>', 2))
219                 );
221         $gapselect->places = array(1 => 1, 2 => 2);
222         $gapselect->rightchoices = array(1 => 1, 2 => 1);
223         $gapselect->textfragments = array('<span lang="en" class="multilang">The </span><span lang="ru" class="multilang"></span>',
224             ' <span lang="en" class="multilang">sat on the</span><span lang="ru" class="multilang">сидела на</span> ', '.');
226         return $gapselect;
227     }
229     /**
230      * This examples includes choices with currency like options.
231      * @return qtype_gapselect_question
232      */
233     public static function make_gapselect_question_currency() {
234         question_bank::load_question_definition_classes('gapselect');
235         $gapselect = new qtype_gapselect_question();
237         test_question_maker::initialise_a_question($gapselect);
239         $gapselect->name = 'Selection from currency like choices';
240         $gapselect->questiontext = 'The price of the ball is [[1]] approx.';
241         $gapselect->generalfeedback = 'The choice is yours';
242         $gapselect->qtype = question_bank::get_qtype('gapselect');
244         $gapselect->shufflechoices = true;
246         test_question_maker::set_standard_combined_feedback_fields($gapselect);
248         $gapselect->choices = [
249                 1 => [
250                         1 => new qtype_gapselect_choice('$2', 1),
251                         2 => new qtype_gapselect_choice('$3', 1),
252                         3 => new qtype_gapselect_choice('$4.99', 1),
253                         4 => new qtype_gapselect_choice('-1', 1)
254                 ]
255         ];
257         $gapselect->places = array(1 => 1);
258         $gapselect->rightchoices = array(1 => 1);
259         $gapselect->textfragments = array('The price of the ball is ', ' approx.');
261         return $gapselect;
262     }
264     /**
265      * Just for backwards compatibility.
266      *
267      * @return qtype_gapselect_question
268      */
269     public static function make_a_gapselect_question() {
270         debugging('qtype_gapselect_test_helper::make_a_gapselect_question is deprecated. ' .
271                 "Please use test_question_maker::make_question('gapselect') instead.");
272         return self::make_gapselect_question_fox();
273     }
275     /**
276      * Just for backwards compatibility.
277      *
278      * @return qtype_gapselect_question
279      */
280     public static function make_a_maths_gapselect_question() {
281         debugging('qtype_gapselect_test_helper::make_a_maths_gapselect_question is deprecated. ' .
282                 "Please use test_question_maker::make_question('gapselect', 'maths') instead.");
283         return self::make_gapselect_question_maths();
284     }
286     /**
287      * Just for backwards compatibility.
288      *
289      * @return qtype_gapselect_question
290      */
291     public static function make_a_currency_gapselect_question() {
292         debugging('qtype_gapselect_test_helper::make_a_currency_gapselect_question is deprecated. ' .
293                 "Please use test_question_maker::make_question('gapselect', 'currency') instead.");
294         return self::make_gapselect_question_currency();
295     }
297     /**
298      * Just for backwards compatibility.
299      *
300      * @return qtype_gapselect_question
301      */
302     public static function make_a_multilang_gapselect_question() {
303         debugging('qtype_gapselect_test_helper::make_a_multilang_gapselect_question is deprecated. ' .
304                 "Please use test_question_maker::make_question('gapselect', 'multilang') instead.");
305         return self::make_gapselect_question_multilang();
306     }