Merge branch 'MDL-70148-310' of git://github.com/andrewnicols/moodle into MOODLE_310_...
[moodle.git] / question / type / calculatedmulti / 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 calculated question type.
19  *
20  * @package    qtype
21  * @subpackage calculatedmulti
22  * @copyright  2011 The Open University
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
27 defined('MOODLE_INTERNAL') || die();
29 global $CFG;
30 require_once($CFG->dirroot . '/question/type/calculatedmulti/question.php');
31 require_once($CFG->dirroot . '/question/type/calculated/tests/helper.php');
33 /**
34  * Test helper class for the calculated multiple-choice question type.
35  *
36  * @copyright  2011 The Open University
37  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class qtype_calculatedmulti_test_helper extends question_test_helper {
40     public function get_test_questions() {
41         return array('singleresponse', 'multiresponse');
42     }
44     /**
45      * Makes a calculated multiple-choice question about summing two numbers.
46      * @return qtype_calculatedmulti_single_question
47      */
48     public function make_calculatedmulti_question_singleresponse() {
49         question_bank::load_question_definition_classes('calculated');
50         $q = new qtype_calculatedmulti_single_question();
51         test_question_maker::initialise_a_question($q);
52         $q->name = 'Simple sum';
53         $q->questiontext = 'What is {a} + {b}?';
54         $q->generalfeedback = 'Generalfeedback: {={a} + {b}} is the right answer.';
55         $q->shuffleanswers = 0;
56         $q->answernumbering = 'abc';
57         $q->layout = 1;
58         $q->correctfeedback = test_question_maker::STANDARD_OVERALL_CORRECT_FEEDBACK;
59         $q->correctfeedbackformat = FORMAT_HTML;
60         $q->partiallycorrectfeedback = test_question_maker::STANDARD_OVERALL_PARTIALLYCORRECT_FEEDBACK;
61         $q->partiallycorrectfeedbackformat = FORMAT_HTML;
62         $q->shownumcorrect = 1;
63         $q->incorrectfeedback = test_question_maker::STANDARD_OVERALL_INCORRECT_FEEDBACK;
64         $q->incorrectfeedbackformat = FORMAT_HTML;
65         $q->shownumcorrect = 1;
66         $q->answers = array(
67             13 => new question_answer(13, '{={a} + {b}}', 1.0, 'Very good.', FORMAT_HTML),
68             14 => new question_answer(14, '{={a} - {b}}', 0.0, 'Add. not subtract!', FORMAT_HTML),
69             17 => new question_answer(17, '{={a} + 2 * {b}}', 0.0, 'Just add.', FORMAT_HTML),
70         );
71         $q->answers[13]->correctanswerlength = 2;
72         $q->answers[13]->correctanswerformat = 1;
73         $q->answers[14]->correctanswerlength = 2;
74         $q->answers[14]->correctanswerformat = 1;
75         $q->answers[17]->correctanswerlength = 2;
76         $q->answers[17]->correctanswerformat = 1;
77         $q->qtype = question_bank::get_qtype('calculatedmulti');
79         $q->datasetloader = new qtype_calculated_test_dataset_loader(0, array(
80             array('a' => 1, 'b' => 5),
81             array('a' => 3, 'b' => 4),
82         ));
84         return $q;
85     }
87     /**
88      * Makes a calculated multiple-choice question with multiple right answers.
89      * @return qtype_calculatedmulti_multi_question
90      */
91     public function make_calculatedmulti_question_multiresponse() {
92         question_bank::load_question_definition_classes('calculated');
93         $q = new qtype_calculatedmulti_multi_question();
94         test_question_maker::initialise_a_question($q);
95         $q->name = 'Simple sum';
96         $q->questiontext = 'What is {a} + {b}?';
97         $q->generalfeedback = 'Generalfeedback: {={a} + {b}} is the right answer.';
98         $q->shuffleanswers = 0;
99         $q->answernumbering = 'abc';
100         $q->layout = 1;
101         $q->correctfeedback = test_question_maker::STANDARD_OVERALL_CORRECT_FEEDBACK;
102         $q->correctfeedbackformat = FORMAT_HTML;
103         $q->partiallycorrectfeedback = test_question_maker::STANDARD_OVERALL_PARTIALLYCORRECT_FEEDBACK;
104         $q->partiallycorrectfeedbackformat = FORMAT_HTML;
105         $q->shownumcorrect = 1;
106         $q->incorrectfeedback = test_question_maker::STANDARD_OVERALL_INCORRECT_FEEDBACK;
107         $q->incorrectfeedbackformat = FORMAT_HTML;
108         $q->shownumcorrect = 1;
109         $q->answers = array(
110                 13 => new qtype_numerical_answer(13, '{a} + {b}!', 0.5, 'Good', FORMAT_HTML, 0),
111                 14 => new qtype_numerical_answer(14, '{={a} + {b}}', 0.5, 'Good',
112                         FORMAT_HTML, 0),
113                 17 => new qtype_numerical_answer(17, '{={a} - {b}}', -0.5, 'Wrong.', FORMAT_HTML, 0),
114         );
115         $q->answers[13]->correctanswerlength = 2;
116         $q->answers[13]->correctanswerformat = 1;
117         $q->answers[14]->correctanswerlength = 2;
118         $q->answers[14]->correctanswerformat = 1;
119         $q->answers[17]->correctanswerlength = 2;
120         $q->answers[17]->correctanswerformat = 1;
121         $q->qtype = question_bank::get_qtype('calculatedmulti');
123         $q->datasetloader = new qtype_calculated_test_dataset_loader(0, array(
124                 array('a' => 1, 'b' => 5),
125                 array('a' => 3, 'b' => 4),
126         ));
128         return $q;
129     }