aboutsummaryrefslogtreecommitdiff
path: root/tests/question_test.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/question_test.php')
-rw-r--r--tests/question_test.php110
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' => '')));
+ }
+
+}