MDL-47494 ddmarker: Improve the drag-drop question Behat tests.
[moodle.git] / question / type / ddmarker / 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  * Test helpers for the drag-and-drop markers question type.
19  *
20  * @package    qtype
21  * @subpackage ddmarker
22  * @copyright  2012 The Open University
23  * @author     Jamie Pratt <me@jamiep.org>
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  */
28 defined('MOODLE_INTERNAL') || die();
31 /**
32  * Test helper class for the drag-and-drop markers question type.
33  *
34  * @copyright  2010 The Open University
35  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36  */
37 class qtype_ddmarker_test_helper extends question_test_helper {
38     public function get_test_questions() {
39         return array('fox', 'maths', 'mkmap');
40     }
42     /**
43      * @return qtype_ddmarker_question
44      */
45     public function make_ddmarker_question_fox() {
46         question_bank::load_question_definition_classes('ddmarker');
47         $dd = new qtype_ddmarker_question();
49         test_question_maker::initialise_a_question($dd);
51         $dd->name = 'Drag-and-drop markers question';
52         $dd->questiontext = 'The quick brown fox jumped over the lazy dog.';
53         $dd->generalfeedback = 'This sentence uses each letter of the alphabet.';
54         $dd->qtype = question_bank::get_qtype('ddmarker');
56         $dd->shufflechoices = true;
58         test_question_maker::set_standard_combined_feedback_fields($dd);
60         $dd->choices = $this->make_choice_structure(array(
61                     new qtype_ddmarker_drag_item('quick', 1, 0, 1),
62                     new qtype_ddmarker_drag_item('fox', 2, 0, 1),
63                     new qtype_ddmarker_drag_item('lazy', 3, 0, 1)
65         ));
67         $dd->places = $this->make_place_structure(array(
68                             new qtype_ddmarker_drop_zone(1, 'circle', '50,50;50'),
69                             new qtype_ddmarker_drop_zone(2, 'rectangle', '100,0;100,100'),
70                             new qtype_ddmarker_drop_zone(3, 'polygon', '0,100;200,100;200,200;0,200')
71         ));
72         $dd->rightchoices = array(1 => 1, 2 => 2, 3 => 3);
74         return $dd;
75     }
77     protected function make_choice_structure($choices) {
78         $choicestructure = array();
79         foreach ($choices as $choice) {
80             $group = $choice->choice_group();
81             if (!isset($choicestructure[$group])) {
82                 $choicestructure[$group] = array();
83             }
84             $choicestructure[$group][$choice->no] = $choice;
85         }
86         return $choicestructure;
87     }
89     protected function make_place_structure($places) {
90         $placestructure = array();
91         foreach ($places as $place) {
92             $placestructure[$place->no] = $place;
93         }
94         return $placestructure;
95     }
97     /**
98      * @return qtype_ddmarker_question
99      */
100     public function make_ddmarker_question_maths() {
101         question_bank::load_question_definition_classes('ddmarker');
102         $dd = new qtype_ddmarker_question();
104         test_question_maker::initialise_a_question($dd);
106         $dd->name = 'Drag-and-drop markers question';
107         $dd->questiontext = 'Fill in the operators to make this equation work: ';
108         $dd->generalfeedback = 'Hmmmm...';
109         $dd->qtype = question_bank::get_qtype('ddmarker');
111         $dd->shufflechoices = true;
113         test_question_maker::set_standard_combined_feedback_fields($dd);
115         $dd->choices = $this->make_choice_structure(array(
116                     new qtype_ddmarker_drag_item('+', 1, 1, 0),
117                     new qtype_ddmarker_drag_item('-', 2, 1, 0),
118                     new qtype_ddmarker_drag_item('*', 3, 1, 0),
119                     new qtype_ddmarker_drag_item('/', 4, 1, 0)
121         ));
123         $dd->places = $this->make_place_structure(array(
124                     new qtype_ddmarker_drop_zone(1, 'circle', '50,50;50'),
125                     new qtype_ddmarker_drop_zone(2, 'rectangle', '100,0;100,100'),
126                     new qtype_ddmarker_drop_zone(3, 'polygon', '0,100;100,100;100,200;0,200')
127         ));
128         $dd->rightchoices = array(1 => 1, 2 => 1, 3 => 1);
130         return $dd;
131     }
133     /**
134      * @return stdClass date to create a ddmarkers question.
135      */
136     public function get_ddmarker_question_form_data_mkmap() {
137         global $CFG, $USER;
138         $fromform = new stdClass();
140         $bgdraftitemid = 0;
141         file_prepare_draft_area($bgdraftitemid, null, null, null, null);
142         $fs = get_file_storage();
143         $filerecord = new stdClass();
144         $filerecord->contextid = context_user::instance($USER->id)->id;
145         $filerecord->component = 'user';
146         $filerecord->filearea = 'draft';
147         $filerecord->itemid = $bgdraftitemid;
148         $filerecord->filepath = '/';
149         $filerecord->filename = 'mkmap.png';
150         $fs->create_file_from_pathname($filerecord, $CFG->dirroot .
151                 '/question/type/ddmarker/tests/fixtures/mkmap.png');
153         $fromform->name = 'Milton Keynes landmarks';
154         $fromform->questiontext = array(
155             'text' => 'Please place the markers on the map of Milton Keynes and be aware that there is more than one railway station.',
156             'format' => FORMAT_HTML,
157         );
158         $fromform->defaultmark = 1;
159         $fromform->generalfeedback = array(
160             'text' => 'The Open University is at the junction of Brickhill Street and Groveway. There are three railway stations, Wolverton, Milton Keynes Central and Bletchley.',
161             'format' => FORMAT_HTML,
162         );
163         $fromform->bgimage = $bgdraftitemid;
164         $fromform->shuffleanswers = 0;
166         $fromform->drags = array(
167             array('label' => 'OU', 'noofdrags' => 1),
168             array('label' => 'Railway station', 'noofdrags' => 3),
169         );
171         $fromform->drops = array(
172             array('shape' => 'Circle', 'coords' => '322,213;10', 'choice' => 1),
173             array('shape' => 'Circle', 'coords' => '144,84;10', 'choice' => 2),
174             array('shape' => 'Circle', 'coords' => '195,180;10', 'choice' => 2),
175             array('shape' => 'Circle', 'coords' => '267,302;10', 'choice' => 2),
176         );
178         test_question_maker::set_standard_combined_feedback_form_data($fromform);
180         $fromform->penalty ='0.3333333';
181         $fromform->hint = array(
182             array(
183                 'text' => 'You are trying to place four markers on the map.',
184                 'format' => FORMAT_HTML,
185             ),
186             array(
187                 'text' => 'You are trying to mark three railway stations.',
188                 'format' => FORMAT_HTML,
189             ),
190         );
191         $fromform->hintshownumcorrect = array(1, 1);
192         $fromform->hintclearwrong = array(0, 1);
193         $fromform->hintoptions = array(0, 1);
195         return $fromform;
196     }