diff options
Diffstat (limited to 'tests/question_test.php')
-rw-r--r-- | tests/question_test.php | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/tests/question_test.php b/tests/question_test.php new file mode 100644 index 0000000..264b24a --- /dev/null +++ b/tests/question_test.php @@ -0,0 +1,110 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Unit tests for the short answer question definition class. + * + * @package qtype_algebra + * @copyright 2017 Jean-Michel Vedrine + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot . '/question/engine/tests/helpers.php'); +require_once($CFG->dirroot . '/question/type/algebra/tests/helper.php'); + + +/** + * Unit tests for the algebra question definition class. + * + * @copyright 2017 Jean-Michel Vedrine + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +class qtype_algebra_question_test extends advanced_testcase { + public function test_is_gradable_response() { + $question = test_question_maker::make_question('simplemath'); + + $this->assertFalse($question->is_gradable_response(array())); + $this->assertFalse($question->is_gradable_response(array('answer' => ''))); + $this->assertTrue($question->is_gradable_response(array('answer' => '0'))); + $this->assertTrue($question->is_gradable_response(array('answer' => '0.0'))); + $this->assertTrue($question->is_gradable_response(array('answer' => 'x'))); + } + + public function test_grading_test0() { + $question = test_question_maker::make_question('simplemath'); + + $this->assertEquals(array(0, question_state::$gradedwrong), + $question->grade_response(array('answer' => 'x'))); + $this->assertEquals(array(0, question_state::$gradedwrong), + $question->grade_response(array('answer' => '0'))); + $this->assertEquals(array(0, question_state::$gradedwrong), + $question->grade_response(array('answer' => '5'))); + $this->assertEquals(array(1, question_state::$gradedright), + $question->grade_response(array('answer' => '7'))); + } + + public function test_grading_test1() { + $question = test_question_maker::make_question('derive'); + + $this->assertEquals(array(0, question_state::$gradedwrong), + $question->grade_response(array('answer' => 'x'))); + $this->assertEquals(array(0, question_state::$gradedwrong), + $question->grade_response(array('answer' => '0'))); + $this->assertEquals(array(1, question_state::$gradedright), + $question->grade_response(array('answer' => '2*x'))); + $this->assertEquals(array(1, question_state::$gradedright), + $question->grade_response(array('answer' => 'x+x'))); + } + public function test_get_correct_response() { + $question = test_question_maker::make_question('simplemath'); + + $this->assertEquals(array('answer' => '2*x'), + $question->get_correct_response()); + } + + public function test_get_question_summary() { + $sa = test_question_maker::make_question('algebra'); + $qsummary = $sa->get_question_summary(); + $this->assertEquals('What is the derivative of the function \(f(x) = x^2\) ?', $qsummary); + } + + public function test_summarise_response() { + $sa = test_question_maker::make_question('derive'); + $summary = $sa->summarise_response(array('answer' => '2*x')); + $this->assertEquals('2*x', $summary); + } + + public function test_classify_response() { + $sa = test_question_maker::make_question('derive'); + $sa->start_attempt(new question_attempt_step(), 1); + + $this->assertEquals(array( + new question_classified_response(13, '2*x', 1.0)), + $sa->classify_response(array('answer' => '2*x'))); + $this->assertEquals(array( + new question_classified_response(15, '5*x', 0.0)), + $sa->classify_response(array('answer' => '5*x'))); + $this->assertEquals(array( + question_classified_response::no_response()), + $sa->classify_response(array('answer' => ''))); + } + +} |