Commit | Line | Data |
---|---|---|
0d24b17a TH |
1 | <?php |
2 | ||
3 | // This file is part of Moodle - http://moodle.org/ | |
4 | // | |
5 | // Moodle is free software: you can redistribute it and/or modify | |
6 | // it under the terms of the GNU General Public License as published by | |
7 | // the Free Software Foundation, either version 3 of the License, or | |
8 | // (at your option) any later version. | |
9 | // | |
10 | // Moodle is distributed in the hope that it will be useful, | |
11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | // GNU General Public License for more details. | |
14 | // | |
15 | // You should have received a copy of the GNU General Public License | |
16 | // along with Moodle. If not, see <http://www.gnu.org/licenses/>. | |
17 | ||
0d24b17a TH |
18 | /** |
19 | * This file contains tests that walks a question through the interactive | |
20 | * behaviour. | |
21 | * | |
9df0480d | 22 | * @package qtype |
0d24b17a | 23 | * @subpackage gapselect |
9df0480d TH |
24 | * @copyright 2011 The Open University |
25 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
0d24b17a TH |
26 | */ |
27 | ||
28 | ||
29 | require_once($CFG->dirroot . '/question/engine/simpletest/helpers.php'); | |
30 | require_once($CFG->dirroot . '/question/type/gapselect/simpletest/helper.php'); | |
31 | ||
32 | ||
9df0480d TH |
33 | /** |
34 | * Unit tests for the gap-select question type. | |
35 | * | |
36 | * @copyright 2011 The Open University | |
37 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
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', | |
56 | array('' => ' ', '1' => 'quick', '2' => 'slow'), null, true), | |
57 | $this->get_contains_select_expectation('p2', | |
58 | array('' => ' ', '1' => 'fox', '2' => 'dog'), null, true), | |
59 | $this->get_contains_select_expectation('p3', | |
60 | array('' => ' ', '1' => 'lazy', '2' => 'assiduous'), null, true), | |
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', | |
74 | array('' => ' ', '1' => 'quick', '2' => 'slow'), 2, true), | |
75 | $this->get_contains_select_expectation('p2', | |
76 | array('' => ' ', '1' => 'fox', '2' => 'dog'), 2, true), | |
77 | $this->get_contains_select_expectation('p3', | |
78 | array('' => ' ', '1' => 'lazy', '2' => 'assiduous'), 2, true), | |
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', | |
93 | array('' => ' ', '1' => 'quick', '2' => 'slow'), 2, false), | |
94 | $this->get_contains_select_expectation('p2', | |
95 | array('' => ' ', '1' => 'fox', '2' => 'dog'), 2, false), | |
96 | $this->get_contains_select_expectation('p3', | |
97 | array('' => ' ', '1' => 'lazy', '2' => 'assiduous'), 2, false), | |
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(), | |
101 | new PatternExpectation('/' . preg_quote(get_string('notcomplete', 'qbehaviour_interactive')) . '/'), | |
102 | $this->get_contains_hint_expectation('This is the first hint')); | |
103 | ||
104 | // Do try again. | |
105 | $this->process_submission(array('-tryagain' => 1)); | |
106 | ||
107 | // Verify. | |
108 | $this->check_current_state(question_state::$todo); | |
109 | $this->check_current_mark(null); | |
110 | $this->check_current_output( | |
111 | $this->get_contains_select_expectation('p1', | |
112 | array('' => ' ', '1' => 'quick', '2' => 'slow'), 2, true), | |
113 | $this->get_contains_select_expectation('p2', | |
114 | array('' => ' ', '1' => 'fox', '2' => 'dog'), 2, true), | |
115 | $this->get_contains_select_expectation('p3', | |
116 | array('' => ' ', '1' => 'lazy', '2' => 'assiduous'), 2, true), | |
117 | $this->get_contains_submit_button_expectation(true), | |
118 | $this->get_does_not_contain_correctness_expectation(), | |
119 | $this->get_does_not_contain_feedback_expectation(), | |
120 | $this->get_tries_remaining_expectation(2), | |
121 | $this->get_no_hint_visible_expectation()); | |
122 | ||
123 | // Submit the right answer. | |
124 | $this->process_submission(array('p1' => '1', 'p2' => '1', 'p3' => '1', '-submit' => 1)); | |
125 | ||
126 | // Verify. | |
127 | $this->check_current_state(question_state::$gradedright); | |
128 | $this->check_current_mark(2); | |
129 | $this->check_current_output( | |
130 | $this->get_contains_select_expectation('p1', | |
131 | array('' => ' ', '1' => 'quick', '2' => 'slow'), 1, false), | |
132 | $this->get_contains_select_expectation('p2', | |
133 | array('' => ' ', '1' => 'fox', '2' => 'dog'), 1, false), | |
134 | $this->get_contains_select_expectation('p3', | |
135 | array('' => ' ', '1' => 'lazy', '2' => 'assiduous'), 1, false), | |
136 | $this->get_contains_submit_button_expectation(false), | |
137 | $this->get_contains_correct_expectation(), | |
138 | $this->get_no_hint_visible_expectation()); | |
139 | ||
140 | // Check regrading does not mess anything up. | |
141 | $this->quba->regrade_all_questions(); | |
142 | ||
143 | // Verify. | |
144 | $this->check_current_state(question_state::$gradedright); | |
145 | $this->check_current_mark(2); | |
146 | } | |
0d24b17a | 147 | } |