Commit | Line | Data |
---|---|---|
0d24b17a | 1 | <?php |
0d24b17a TH |
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 | ||
0d24b17a | 17 | /** |
647d9373 | 18 | * This file contains tests that simulate a user attempt a gapselect question. |
0d24b17a | 19 | * |
bbe27b2d TH |
20 | * @package qtype_gapselect |
21 | * @copyright 2012 The Open University | |
22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
0d24b17a TH |
23 | */ |
24 | ||
25 | ||
b28ad86a | 26 | defined('MOODLE_INTERNAL') || die(); |
b3adccfb | 27 | global $CFG; |
b28ad86a | 28 | |
b3adccfb JP |
29 | require_once($CFG->dirroot . '/question/engine/tests/helpers.php'); |
30 | require_once($CFG->dirroot . '/question/type/gapselect/tests/helper.php'); | |
0d24b17a TH |
31 | |
32 | ||
9df0480d TH |
33 | /** |
34 | * Unit tests for the gap-select question type. | |
35 | * | |
bbe27b2d TH |
36 | * @copyright 2012 The Open University |
37 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
9df0480d | 38 | */ |
0d24b17a | 39 | class qtype_gapselect_walkthrough_test extends qbehaviour_walkthrough_test_base { |
43df6cac | 40 | public function test_interactive_behaviour() { |
0d24b17a | 41 | |
43df6cac TH |
42 | // Create a gapselect question. |
43 | $q = qtype_gapselect_test_helper::make_a_gapselect_question(); | |
44 | $q->hints = array( | |
7540fcdc TH |
45 | new question_hint_with_parts(1, 'This is the first hint.', FORMAT_HTML, false, false), |
46 | new question_hint_with_parts(2, 'This is the second hint.', FORMAT_HTML, true, true), | |
43df6cac | 47 | ); |
7540fcdc | 48 | $q->shufflechoices = false; |
43df6cac | 49 | $this->start_attempt_at_question($q, 'interactive', 3); |
0d24b17a | 50 | |
43df6cac TH |
51 | // Check the initial state. |
52 | $this->check_current_state(question_state::$todo); | |
53 | $this->check_current_mark(null); | |
54 | $this->check_current_output( | |
55 | $this->get_contains_select_expectation('p1', | |
5283ee02 | 56 | array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), null, true), |
43df6cac | 57 | $this->get_contains_select_expectation('p2', |
5283ee02 | 58 | array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), null, true), |
43df6cac | 59 | $this->get_contains_select_expectation('p3', |
5283ee02 | 60 | array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), null, true), |
43df6cac TH |
61 | $this->get_contains_submit_button_expectation(true), |
62 | $this->get_does_not_contain_feedback_expectation(), | |
63 | $this->get_tries_remaining_expectation(3), | |
64 | $this->get_no_hint_visible_expectation()); | |
65 | ||
66 | // Save the wrong answer. | |
67 | $this->process_submission(array('p1' => '2', 'p2' => '2', 'p3' => '2')); | |
68 | ||
69 | // Verify. | |
70 | $this->check_current_state(question_state::$todo); | |
71 | $this->check_current_mark(null); | |
72 | $this->check_current_output( | |
73 | $this->get_contains_select_expectation('p1', | |
5283ee02 | 74 | array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 2, true), |
43df6cac | 75 | $this->get_contains_select_expectation('p2', |
5283ee02 | 76 | array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 2, true), |
43df6cac | 77 | $this->get_contains_select_expectation('p3', |
5283ee02 | 78 | array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 2, true), |
43df6cac TH |
79 | $this->get_contains_submit_button_expectation(true), |
80 | $this->get_does_not_contain_correctness_expectation(), | |
81 | $this->get_does_not_contain_feedback_expectation(), | |
82 | $this->get_tries_remaining_expectation(3), | |
83 | $this->get_no_hint_visible_expectation()); | |
84 | ||
85 | // Submit the wrong answer. | |
86 | $this->process_submission(array('p1' => '2', 'p2' => '2', 'p3' => '2', '-submit' => 1)); | |
87 | ||
88 | // Verify. | |
89 | $this->check_current_state(question_state::$todo); | |
90 | $this->check_current_mark(null); | |
91 | $this->check_current_output( | |
92 | $this->get_contains_select_expectation('p1', | |
5283ee02 | 93 | array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 2, false), |
43df6cac | 94 | $this->get_contains_select_expectation('p2', |
5283ee02 | 95 | array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 2, false), |
43df6cac | 96 | $this->get_contains_select_expectation('p3', |
5283ee02 | 97 | array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 2, false), |
43df6cac TH |
98 | $this->get_contains_submit_button_expectation(false), |
99 | $this->get_contains_try_again_button_expectation(true), | |
100 | $this->get_does_not_contain_correctness_expectation(), | |
43df6cac TH |
101 | $this->get_contains_hint_expectation('This is the first hint')); |
102 | ||
103 | // Do try again. | |
104 | $this->process_submission(array('-tryagain' => 1)); | |
105 | ||
106 | // Verify. | |
107 | $this->check_current_state(question_state::$todo); | |
108 | $this->check_current_mark(null); | |
109 | $this->check_current_output( | |
110 | $this->get_contains_select_expectation('p1', | |
5283ee02 | 111 | array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 2, true), |
43df6cac | 112 | $this->get_contains_select_expectation('p2', |
5283ee02 | 113 | array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 2, true), |
43df6cac | 114 | $this->get_contains_select_expectation('p3', |
5283ee02 | 115 | array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 2, true), |
43df6cac TH |
116 | $this->get_contains_submit_button_expectation(true), |
117 | $this->get_does_not_contain_correctness_expectation(), | |
118 | $this->get_does_not_contain_feedback_expectation(), | |
119 | $this->get_tries_remaining_expectation(2), | |
120 | $this->get_no_hint_visible_expectation()); | |
121 | ||
122 | // Submit the right answer. | |
123 | $this->process_submission(array('p1' => '1', 'p2' => '1', 'p3' => '1', '-submit' => 1)); | |
124 | ||
125 | // Verify. | |
126 | $this->check_current_state(question_state::$gradedright); | |
127 | $this->check_current_mark(2); | |
128 | $this->check_current_output( | |
129 | $this->get_contains_select_expectation('p1', | |
5283ee02 | 130 | array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 1, false), |
43df6cac | 131 | $this->get_contains_select_expectation('p2', |
5283ee02 | 132 | array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 1, false), |
43df6cac | 133 | $this->get_contains_select_expectation('p3', |
5283ee02 | 134 | array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 1, false), |
43df6cac TH |
135 | $this->get_contains_submit_button_expectation(false), |
136 | $this->get_contains_correct_expectation(), | |
137 | $this->get_no_hint_visible_expectation()); | |
138 | ||
139 | // Check regrading does not mess anything up. | |
140 | $this->quba->regrade_all_questions(); | |
141 | ||
142 | // Verify. | |
143 | $this->check_current_state(question_state::$gradedright); | |
144 | $this->check_current_mark(2); | |
145 | } | |
0d24b17a | 146 | } |