Proyectos de Subversion Moodle

Rev

Rev 1 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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/>.
16
 
17
namespace qformat_blackboard_six;
18
 
19
use qformat_blackboard_six;
20
use qformat_blackboard_six_file;
21
use question_bank;
22
use question_check_specified_fields_expectation;
23
 
24
defined('MOODLE_INTERNAL') || die();
25
 
26
global $CFG;
27
require_once($CFG->libdir . '/questionlib.php');
28
require_once($CFG->dirroot . '/question/format.php');
29
require_once($CFG->dirroot . '/question/format/blackboard_six/format.php');
30
require_once($CFG->dirroot . '/question/engine/tests/helpers.php');
31
 
32
/**
33
 * Unit tests for the blackboard v6+ question import format.
34
 *
35
 * @package    qformat_blackboard_six
36
 * @copyright  2012 Jean-Michel Vedrine
37
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38
 */
39
class blackboardsixformatqti_test extends \question_testcase {
40
 
41
    public function make_test_xml() {
42
        $xmlfile = new qformat_blackboard_six_file();
43
        $xmlfile->filetype = 1;
44
        $xmlfile->text = file_get_contents(__DIR__ . '/fixtures/sample_blackboard_qti.dat');
45
        return array(0 => $xmlfile);
46
    }
11 efrain 47
    public function test_import_match(): void {
1 efrain 48
        $xml = $this->make_test_xml();
49
 
50
        $importer = new qformat_blackboard_six();
51
        $questions = $importer->readquestions($xml);
52
        $q = $questions[4];
53
 
54
        // If qtype_ddmatch is installed, the formatter produces ddmatch
55
        // qtypes, not match ones.
56
        $ddmatchisinstalled = question_bank::is_qtype_installed('ddmatch');
57
 
58
        $expectedq = new \stdClass();
59
        $expectedq->qtype = $ddmatchisinstalled ? 'ddmatch' : 'match';
60
        $expectedq->name = 'Classify the animals.';
61
        $expectedq->questiontext = 'Classify the animals.';
62
        $expectedq->questiontextformat = FORMAT_HTML;
63
        $expectedq->correctfeedback = array('text' => '',
64
                'format' => FORMAT_HTML, 'files' => array());
65
        $expectedq->partiallycorrectfeedback = array('text' => '',
66
                'format' => FORMAT_HTML, 'files' => array());
67
        $expectedq->incorrectfeedback = array('text' => '',
68
                'format' => FORMAT_HTML, 'files' => array());
69
        $expectedq->generalfeedback = '';
70
        $expectedq->generalfeedbackformat = FORMAT_HTML;
71
        $expectedq->defaultmark = 1;
72
        $expectedq->length = 1;
73
        $expectedq->penalty = 0.3333333;
74
        $expectedq->shuffleanswers = get_config('quiz', 'shuffleanswers');
75
        $expectedq->subquestions = array(
76
            array('text' => '', 'format' => FORMAT_HTML),
77
            array('text' => 'cat', 'format' => FORMAT_HTML),
78
            array('text' => 'frog', 'format' => FORMAT_HTML),
79
            array('text' => 'newt', 'format' => FORMAT_HTML));
80
        if ($ddmatchisinstalled) {
81
            $expectedq->subanswers = array(
82
                array('text' => 'insect', 'format' => FORMAT_HTML),
83
                array('text' => 'mammal', 'format' => FORMAT_HTML),
84
                array('text' => 'amphibian', 'format' => FORMAT_HTML),
85
                array('text' => 'amphibian', 'format' => FORMAT_HTML),
86
            );
87
        } else {
88
            $expectedq->subanswers = array('insect', 'mammal', 'amphibian', 'amphibian');
89
        }
90
 
91
        $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
92
    }
93
 
11 efrain 94
    public function test_import_multichoice_single(): void {
1 efrain 95
        $xml = $this->make_test_xml();
96
 
97
        $importer = new qformat_blackboard_six();
98
        $questions = $importer->readquestions($xml);
99
        $q = $questions[2];
100
 
101
        $expectedq = new \stdClass();
102
        $expectedq->qtype = 'multichoice';
103
        $expectedq->single = 1;
104
        $expectedq->name = 'What\'s between orange and green in the spectrum?';
105
        $expectedq->questiontext = '<span style="font-size:12pt">What\'s between orange and green in the spectrum?</span>';
106
        $expectedq->questiontextformat = FORMAT_HTML;
107
        $expectedq->correctfeedback = array('text' => '',
108
                'format' => FORMAT_HTML, 'files' => array());
109
        $expectedq->partiallycorrectfeedback = array('text' => '',
110
                'format' => FORMAT_HTML, 'files' => array());
111
        $expectedq->incorrectfeedback = array('text' => '',
112
                'format' => FORMAT_HTML, 'files' => array());
113
        $expectedq->generalfeedback = '';
114
        $expectedq->generalfeedbackformat = FORMAT_HTML;
115
        $expectedq->defaultmark = 1;
116
        $expectedq->length = 1;
117
        $expectedq->penalty = 0.3333333;
118
        $expectedq->shuffleanswers = get_config('quiz', 'shuffleanswers');
119
        $expectedq->answer = array(
120
 
121
                    'text' => '<span style="font-size:12pt">red</span>',
122
                    'format' => FORMAT_HTML,
123
                ),
124
                1 => array(
125
                    'text' => '<span style="font-size:12pt">yellow</span>',
126
                    'format' => FORMAT_HTML,
127
                ),
128
                2 => array(
129
                    'text' => '<span style="font-size:12pt">blue</span>',
130
                    'format' => FORMAT_HTML,
131
                )
132
            );
133
        $expectedq->fraction = array(0, 1, 0);
134
        $expectedq->feedback = array(
135
 
136
                    'text' => 'Red is not between orange and green in the spectrum but yellow is.',
137
                    'format' => FORMAT_HTML,
138
                ),
139
                1 => array(
140
                    'text' => 'You gave the right answer.',
141
                    'format' => FORMAT_HTML,
142
                ),
143
                2 => array(
144
                    'text' => 'Blue is not between orange and green in the spectrum but yellow is.',
145
                    'format' => FORMAT_HTML,
146
                )
147
            );
148
 
149
        $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
150
    }
151
 
11 efrain 152
    public function test_import_multichoice_multi(): void {
1 efrain 153
 
154
        $xml = $this->make_test_xml();
155
 
156
        $importer = new qformat_blackboard_six();
157
        $questions = $importer->readquestions($xml);
158
        $q = $questions[3];
159
 
160
        $expectedq = new \stdClass();
161
        $expectedq->qtype = 'multichoice';
162
        $expectedq->single = 0;
163
        $expectedq->name = 'What\'s between orange and green in the spectrum?';
164
        $expectedq->questiontext = '<i>What\'s between orange and green in the spectrum?</i>';
165
        $expectedq->questiontextformat = FORMAT_HTML;
166
        $expectedq->correctfeedback = array(
167
                'text' => '',
168
                'format' => FORMAT_HTML,
169
                'files' => array(),
170
            );
171
        $expectedq->partiallycorrectfeedback = array(
172
                'text' => '',
173
                'format' => FORMAT_HTML,
174
                'files' => array(),
175
            );
176
        $expectedq->incorrectfeedback = array(
177
                'text' => '',
178
                'format' => FORMAT_HTML,
179
                'files' => array(),
180
            );
181
        $expectedq->generalfeedback = '';
182
        $expectedq->generalfeedbackformat = FORMAT_HTML;
183
        $expectedq->defaultmark = 1;
184
        $expectedq->length = 1;
185
        $expectedq->penalty = 0.3333333;
186
        $expectedq->shuffleanswers = get_config('quiz', 'shuffleanswers');
187
        $expectedq->answer = array(
188
 
189
                    'text' => '<span style="font-size:12pt">yellow</span>',
190
                    'format' => FORMAT_HTML,
191
                ),
192
                1 => array(
193
                    'text' => '<span style="font-size:12pt">red</span>',
194
                    'format' => FORMAT_HTML,
195
                ),
196
                2 => array(
197
                    'text' => '<span style="font-size:12pt">off-beige</span>',
198
                    'format' => FORMAT_HTML,
199
                ),
200
                3 => array(
201
                    'text' => '<span style="font-size:12pt">blue</span>',
202
                    'format' => FORMAT_HTML,
203
                )
204
            );
205
        $expectedq->fraction = array(0.5, 0, 0.5, 0);
206
        $expectedq->feedback = array(
207
 
208
                    'text' => '',
209
                    'format' => FORMAT_HTML,
210
                ),
211
                1 => array(
212
                    'text' => '',
213
                    'format' => FORMAT_HTML,
214
                ),
215
                2 => array(
216
                    'text' => '',
217
                    'format' => FORMAT_HTML,
218
                ),
219
                3 => array(
220
                    'text' => '',
221
                    'format' => FORMAT_HTML,
222
                )
223
            );
224
 
225
        $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
226
    }
227
 
11 efrain 228
    public function test_import_truefalse(): void {
1 efrain 229
 
230
        $xml = $this->make_test_xml();
231
 
232
        $importer = new qformat_blackboard_six();
233
        $questions = $importer->readquestions($xml);
234
        $q = $questions[1];
235
 
236
        $expectedq = new \stdClass();
237
        $expectedq->qtype = 'truefalse';
238
        $expectedq->name = '42 is the Absolute Answer to everything.';
239
        $expectedq->questiontext = '<span style="font-size:12pt">42 is the Absolute Answer to everything.</span>';
240
        $expectedq->questiontextformat = FORMAT_HTML;
241
        $expectedq->generalfeedback = '';
242
        $expectedq->generalfeedbackformat = FORMAT_HTML;
243
        $expectedq->defaultmark = 1;
244
        $expectedq->length = 1;
245
        $expectedq->correctanswer = 0;
246
        $expectedq->feedbacktrue = array(
247
                'text' => '42 is the <b>Ultimate</b> Answer.',
248
                'format' => FORMAT_HTML,
249
            );
250
        $expectedq->feedbackfalse = array(
251
                'text' => 'You gave the right answer.',
252
                'format' => FORMAT_HTML,
253
            );
254
 
255
        $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
256
    }
257
 
11 efrain 258
    public function test_import_fill_in_the_blank(): void {
1 efrain 259
 
260
        $xml = $this->make_test_xml();
261
 
262
        $importer = new qformat_blackboard_six();
263
        $questions = $importer->readquestions($xml);
264
        $q = $questions[5];
265
 
266
        $expectedq = new \stdClass();
267
        $expectedq->qtype = 'shortanswer';
268
        $expectedq->name = 'Name an amphibian: __________.';
269
        $expectedq->questiontext = '<span style="font-size:12pt">Name an amphibian: __________.</span>';
270
        $expectedq->questiontextformat = FORMAT_HTML;
271
        $expectedq->generalfeedback = '';
272
        $expectedq->generalfeedbackformat = FORMAT_HTML;
273
        $expectedq->defaultmark = 1;
274
        $expectedq->length = 1;
275
        $expectedq->usecase = 0;
276
        $expectedq->answer = array('frog', '*');
277
        $expectedq->fraction = array(1, 0);
278
        $expectedq->feedback = array(
279
 
280
                    'text' => 'A frog is an amphibian.',
281
                    'format' => FORMAT_HTML,
282
                ),
283
                1 => array(
284
                    'text' => 'A frog is an amphibian.',
285
                    'format' => FORMAT_HTML,
286
                )
287
            );
288
 
289
        $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
290
    }
291
 
11 efrain 292
    public function test_import_essay(): void {
1 efrain 293
 
294
        $xml = $this->make_test_xml();
295
 
296
        $importer = new qformat_blackboard_six();
297
        $questions = $importer->readquestions($xml);
298
        $q = $questions[6];
299
 
300
        $expectedq = new \stdClass();
301
        $expectedq->qtype = 'essay';
302
        $expectedq->name = 'How are you?';
303
        $expectedq->questiontext = 'How are you?';
304
        $expectedq->questiontextformat = FORMAT_HTML;
305
        $expectedq->generalfeedback = '';
306
        $expectedq->generalfeedbackformat = FORMAT_HTML;
307
        $expectedq->defaultmark = 1;
308
        $expectedq->length = 1;
309
        $expectedq->responseformat = 'editor';
310
        $expectedq->responsefieldlines = 15;
311
        $expectedq->attachments = 0;
312
        $expectedq->graderinfo = array(
313
                'text' => 'Blackboard answer for essay questions will be imported as informations for graders.',
314
                'format' => FORMAT_HTML,
315
            );
316
 
317
        $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
318
    }
319
 
11 efrain 320
    public function test_import_category(): void {
1 efrain 321
 
322
        $xml = $this->make_test_xml();
323
 
324
        $importer = new qformat_blackboard_six();
325
        $questions = $importer->readquestions($xml);
326
        $q = $questions[0];
327
 
328
        $expectedq = new \stdClass();
329
        $expectedq->qtype = 'category';
330
        $expectedq->category = 'sample_blackboard_six';
331
 
332
        $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
333
    }
334
}