Skip to content

Commit

Permalink
MDL-32323 convert question tests
Browse files Browse the repository at this point in the history
1/ type/match/tests/walkthrough_test.php - tests are failing randomly, looks like some weird randomisation is going on there - see TODOs

2/ type/multianswer/tests/upgradelibnewqe_test.php contains invalid expected value - see TODO
  • Loading branch information
skodak committed Apr 10, 2012
1 parent 4594a38 commit 603bd00
Show file tree
Hide file tree
Showing 92 changed files with 27,309 additions and 3 deletions.
5 changes: 5 additions & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@
<testsuite name="core_course">
<directory suffix="_test.php">course/tests</directory>
</testsuite>
<testsuite name="core_question">
<directory suffix="_test.php">question/engine/tests</directory>
<directory suffix="_test.php">question/tests</directory>
<directory suffix="_test.php">question/type/tests</directory>
</testsuite>

<!--Plugin suites: use admin/tool/phpunit/cli/util.php to build phpunit.xml from phpunit.xml.dist with up-to-date list of plugins in current install-->
<!--@plugin_suites_start@-->
Expand Down
747 changes: 747 additions & 0 deletions question/behaviour/adaptive/tests/walkthrough_test.php

Large diffs are not rendered by default.

292 changes: 292 additions & 0 deletions question/behaviour/adaptivenopenalty/tests/walkthrough_test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,292 @@
<?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/>.

/**
* This file contains tests that walks a question through the adaptive (no penalties)k
* behaviour.
*
* @package qbehaviour
* @subpackage adaptivenopenalty
* @copyright 2009 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/


defined('MOODLE_INTERNAL') || die();

global $CFG;
require_once(dirname(__FILE__) . '/../../../engine/lib.php');
require_once(dirname(__FILE__) . '/../../../engine/tests/helpers.php');


/**
* Unit tests for the adaptive (no penalties) behaviour.
*
* @copyright 2009 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class qbehaviour_adaptivenopenalty_walkthrough_test extends qbehaviour_walkthrough_test_base {

protected function get_does_not_contain_gradingdetails_expectation() {
return new question_no_pattern_expectation('/class="gradingdetails"/');
}

public function test_multichoice() {

// Create a multiple choice, single response question.
$mc = test_question_maker::make_a_multichoice_single_question();
$mc->penalty = 0.3333333;
$this->start_attempt_at_question($mc, 'adaptivenopenalty', 3);

$rightindex = $this->get_mc_right_answer_index($mc);
$wrongindex = ($rightindex + 1) % 3;

// Check the initial state.
$this->check_current_state(question_state::$todo);
$this->check_current_mark(null);
$this->check_current_output(
$this->get_contains_marked_out_of_summary(),
$this->get_contains_question_text_expectation($mc),
$this->get_contains_mc_radio_expectation(0, true, false),
$this->get_contains_mc_radio_expectation(1, true, false),
$this->get_contains_mc_radio_expectation(2, true, false),
$this->get_contains_submit_button_expectation(true),
$this->get_does_not_contain_feedback_expectation());

// Process a submit.
$this->process_submission(array('answer' => $wrongindex, '-submit' => 1));

// Verify.
$this->check_current_state(question_state::$todo);
$this->check_current_mark(0);
$this->check_current_output(
$this->get_contains_mark_summary(0),
$this->get_contains_mc_radio_expectation($wrongindex, true, true),
$this->get_contains_mc_radio_expectation(($wrongindex + 1) % 3, true, false),
$this->get_contains_mc_radio_expectation(($wrongindex + 2) % 3, true, false),
$this->get_contains_incorrect_expectation());
$this->assertRegExp('/B|C/',
$this->quba->get_response_summary($this->slot));

// Process a change of answer to the right one, but not sumbitted.
$this->process_submission(array('answer' => $rightindex));

// Verify.
$this->check_current_state(question_state::$todo);
$this->check_current_mark(0);
$this->check_current_output(
$this->get_contains_mark_summary(0),
$this->get_contains_mc_radio_expectation($rightindex, true, true),
$this->get_contains_mc_radio_expectation(($rightindex + 1) % 3, true, false),
$this->get_contains_mc_radio_expectation(($rightindex + 2) % 3, true, false));
$this->assertRegExp('/B|C/',
$this->quba->get_response_summary($this->slot));

// Now submit the right answer.
$this->process_submission(array('answer' => $rightindex, '-submit' => 1));

// Verify.
$this->check_current_state(question_state::$complete);
$this->check_current_mark(3);
$this->check_current_output(
$this->get_contains_mark_summary(3),
$this->get_contains_mc_radio_expectation($rightindex, true, true),
$this->get_contains_mc_radio_expectation(($rightindex + 1) % 3, true, false),
$this->get_contains_mc_radio_expectation(($rightindex + 2) % 3, true, false),
$this->get_contains_correct_expectation());
$this->assertEquals('A',
$this->quba->get_response_summary($this->slot));

// Finish the attempt.
$this->quba->finish_all_questions();

// Verify.
$this->check_current_state(question_state::$gradedright);
$this->check_current_mark(3);
$this->check_current_output(
$this->get_contains_mark_summary(3),
$this->get_contains_mc_radio_expectation($rightindex, false, true),
$this->get_contains_mc_radio_expectation(($rightindex + 1) % 3, false, false),
$this->get_contains_mc_radio_expectation(($rightindex + 2) % 3, false, false),
$this->get_contains_correct_expectation());

// Process a manual comment.
$this->manual_grade('Not good enough!', 1);

// Verify.
$this->check_current_state(question_state::$mangrpartial);
$this->check_current_mark(1);
$this->check_current_output(
$this->get_contains_mark_summary(1),
new question_pattern_expectation('/' . preg_quote('Not good enough!') . '/'));

// Now change the correct answer to the question, and regrade.
$mc->answers[13]->fraction = -0.33333333;
$mc->answers[14]->fraction = 1; // We don't know which "wrong" index we chose above!
$mc->answers[15]->fraction = 1; // Therefore, treat answers B and C with the same score.
$this->quba->regrade_all_questions();

// Verify.
$this->check_current_state(question_state::$mangrpartial);
$this->check_current_mark(1);
$this->check_current_output(
$this->get_contains_mark_summary(1),
$this->get_contains_partcorrect_expectation());

$autogradedstep = $this->get_step($this->get_step_count() - 3);
$this->assertEquals($autogradedstep->get_fraction(), 1, '', 0.0000001);
}

public function test_multichoice2() {

// Create a multiple choice, multiple response question.
$mc = test_question_maker::make_a_multichoice_multi_question();
$mc->penalty = 0.3333333;
$mc->shuffleanswers = 0;
$this->start_attempt_at_question($mc, 'adaptivenopenalty', 2);

// Check the initial state.
$this->check_current_state(question_state::$todo);
$this->check_current_mark(null);
$this->check_current_output(
$this->get_contains_marked_out_of_summary(),
$this->get_contains_question_text_expectation($mc),
$this->get_contains_submit_button_expectation(true),
$this->get_does_not_contain_feedback_expectation());

// Process a submit.
$this->process_submission(array('choice0' => 1, 'choice2' => 1, '-submit' => 1));

// Verify.
$this->check_current_state(question_state::$complete);
$this->check_current_mark(2);
$this->check_current_output(
$this->get_contains_mark_summary(2),
$this->get_contains_submit_button_expectation(true),
$this->get_contains_correct_expectation());

// Save the same correct answer again. Should no do anything.
$numsteps = $this->get_step_count();
$this->process_submission(array('choice0' => 1, 'choice2' => 1));

// Verify.
$this->check_step_count($numsteps);
$this->check_current_state(question_state::$complete);

// Finish the attempt.
$this->quba->finish_all_questions();

// Verify.
$this->check_step_count($numsteps + 1);
$this->check_current_state(question_state::$gradedright);
$this->check_current_mark(2);
$this->check_current_output(
$this->get_contains_mark_summary(2),
$this->get_contains_submit_button_expectation(false),
$this->get_contains_correct_expectation());
}

public function test_numerical_invalid() {

// Create a numerical question
$numq = test_question_maker::make_question('numerical', 'pi');
$numq->penalty = 0.1;
$this->start_attempt_at_question($numq, 'adaptivenopenalty');

// Check the initial state.
$this->check_current_state(question_state::$todo);
$this->check_current_mark(null);
$this->check_current_output(
$this->get_contains_marked_out_of_summary(),
$this->get_contains_submit_button_expectation(true),
$this->get_does_not_contain_feedback_expectation());

// Submit a non-numerical answer.
$this->process_submission(array('-submit' => 1, 'answer' => 'Pi'));

// Verify.
$this->check_current_state(question_state::$invalid);
$this->check_current_mark(null);
$this->check_current_output(
$this->get_contains_marked_out_of_summary(1),
$this->get_contains_submit_button_expectation(true),
$this->get_does_not_contain_correctness_expectation(),
$this->get_contains_validation_error_expectation(),
$this->get_does_not_contain_feedback_expectation());

// Submit an incorrect answer.
$this->process_submission(array('-submit' => 1, 'answer' => '-5'));

// Verify.
$this->check_current_state(question_state::$todo);
$this->check_current_mark(0);
$this->check_current_output(
$this->get_contains_mark_summary(0),
$this->get_contains_submit_button_expectation(true),
$this->get_contains_incorrect_expectation(),
$this->get_does_not_contain_validation_error_expectation());

// Submit another non-numerical answer.
$this->process_submission(array('-submit' => 1, 'answer' => 'Pi*2'));

// Verify.
$this->check_current_state(question_state::$invalid);
$this->check_current_mark(0);
$this->check_current_output(
$this->get_contains_mark_summary(0),
$this->get_contains_submit_button_expectation(true),
$this->get_does_not_contain_correctness_expectation(),
$this->get_contains_validation_error_expectation(),
$this->get_does_not_contain_gradingdetails_expectation());

// Submit the correct answer.
$this->process_submission(array('-submit' => 1, 'answer' => '3.14'));

// Verify.
$this->check_current_state(question_state::$complete);
$this->check_current_mark(1.0);
$this->check_current_output(
$this->get_contains_mark_summary(1.0),
$this->get_contains_submit_button_expectation(true),
$this->get_contains_correct_expectation(),
$this->get_does_not_contain_validation_error_expectation());

// Submit another non-numerical answer.
$this->process_submission(array('-submit' => 1, 'answer' => 'Pi/3'));

// Verify.
$this->check_current_state(question_state::$invalid);
$this->check_current_mark(1.0);
$this->check_current_output(
$this->get_contains_mark_summary(1.0),
$this->get_contains_submit_button_expectation(true),
$this->get_does_not_contain_correctness_expectation(),
$this->get_contains_validation_error_expectation(),
$this->get_does_not_contain_gradingdetails_expectation());

// Finish the attempt.
$this->quba->finish_all_questions();

// Verify.
$this->check_current_state(question_state::$gradedwrong);
$this->check_current_mark(1.0);
$this->check_current_output(
$this->get_contains_mark_summary(1.0),
$this->get_contains_submit_button_expectation(false),
$this->get_contains_incorrect_expectation(),
$this->get_does_not_contain_validation_error_expectation());
}
}
Loading

0 comments on commit 603bd00

Please sign in to comment.