From 0d3be6d6480624dde6cf1e527986d7a77375a035 Mon Sep 17 00:00:00 2001 From: John Beedell Date: Wed, 19 Dec 2018 16:26:40 +0000 Subject: [PATCH] MDL-64420 qtype: gapselect unit tests unsafe --- .../adaptive/tests/walkthrough_test.php | 14 +- .../tests/walkthrough_test.php | 38 +++-- question/engine/tests/helpers.php | 56 +++++++ question/type/gapselect/renderer.php | 2 +- .../type/gapselect/tests/walkthrough_test.php | 75 +++++---- .../type/match/tests/walkthrough_test.php | 146 ++++++++++------- .../multianswer/tests/walkthrough_test.php | 105 ++++++------ .../type/numerical/tests/walkthrough_test.php | 19 ++- .../randomsamatch/tests/walkthrough_test.php | 155 ++++++++++-------- 9 files changed, 367 insertions(+), 243 deletions(-) diff --git a/question/behaviour/adaptive/tests/walkthrough_test.php b/question/behaviour/adaptive/tests/walkthrough_test.php index 863b87c04d1..9158ac3382c 100644 --- a/question/behaviour/adaptive/tests/walkthrough_test.php +++ b/question/behaviour/adaptive/tests/walkthrough_test.php @@ -761,7 +761,7 @@ class qbehaviour_adaptive_walkthrough_test extends qbehaviour_walkthrough_test_b $q = test_question_maker::make_question('multianswer', 'twosubq'); // To simplify testing, multichoice subquestion's answers are not shuffled. $q->subquestions[2]->shuffleanswers = 0; - $choices = array('' => '', '0' => 'Bow-wow', '1' => 'Wiggly worm', '2' => 'Pussy-cat'); + $choices = array('0' => 'Bow-wow', '1' => 'Wiggly worm', '2' => 'Pussy-cat'); $this->start_attempt_at_question($q, 'adaptive', 12); @@ -777,10 +777,11 @@ class qbehaviour_adaptive_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_output_does_not_contain_text_input_with_class('sub1_answer', 'incorrect'); $this->check_current_output( $this->get_contains_marked_out_of_summary(), - $this->get_contains_select_expectation('sub2_answer', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_validation_error_expectation(), $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub2_answer', $choices, null, true)); // Submit an invalid response. $this->process_submission(array('sub1_answer' => '', 'sub2_answer' => 1, '-submit' => 1)); @@ -790,11 +791,12 @@ class qbehaviour_adaptive_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_mark(null); $this->check_output_contains_text_input('sub1_answer', '', true); $this->check_current_output( - $this->get_contains_select_expectation('sub2_answer', $choices, 1, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_penalty_info_expectation(), $this->get_does_not_contain_total_penalty_expectation(), $this->get_contains_disregarded_info_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub2_answer', $choices, 1, true)); // Check that extract responses will return the reset data. $prefix = $this->quba->get_field_prefix($this->slot); @@ -813,11 +815,12 @@ class qbehaviour_adaptive_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_output_contains_text_input_with_class('sub1_answer', 'incorrect'); $this->check_current_output( $this->get_contains_mark_summary(0), - $this->get_contains_select_expectation('sub2_answer', $choices, 1, true), $this->get_contains_submit_button_expectation(true), $this->get_contains_incorrect_expectation(), $this->get_contains_penalty_info_expectation(4.00), $this->get_does_not_contain_validation_error_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub2_answer', $choices, 1, true)); // Submit the right answer. $this->process_submission(array('sub1_answer' => 'Owl', 'sub2_answer' => 2, '-submit' => 1)); @@ -829,13 +832,14 @@ class qbehaviour_adaptive_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_output_contains_text_input('sub1_answer', 'Owl', true); $this->check_output_contains_text_input_with_class('sub1_answer', 'correct'); $this->check_current_output( - $this->get_contains_select_expectation('sub2_answer', $choices, '2', true), $this->get_contains_mark_summary(8.00), $this->get_contains_submit_button_expectation(true), $this->get_contains_correct_expectation(), $this->get_does_not_contain_penalty_info_expectation(), $this->get_does_not_contain_total_penalty_expectation(), $this->get_does_not_contain_validation_error_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub2_answer', $choices, '2', true)); // Finish the attempt. $this->quba->finish_all_questions(); diff --git a/question/behaviour/interactivecountback/tests/walkthrough_test.php b/question/behaviour/interactivecountback/tests/walkthrough_test.php index 7d550a2ce49..583a41bce33 100644 --- a/question/behaviour/interactivecountback/tests/walkthrough_test.php +++ b/question/behaviour/interactivecountback/tests/walkthrough_test.php @@ -52,7 +52,7 @@ class qbehaviour_interactivecountback_walkthrough_test extends qbehaviour_walkth $choiceorder = $m->get_choice_order(); $orderforchoice = array_combine(array_values($choiceorder), array_keys($choiceorder)); - $choices = array(0 => get_string('choose') . '...'); + $choices = []; foreach ($choiceorder as $key => $choice) { $choices[$key] = $m->choices[$choice]; } @@ -63,16 +63,17 @@ class qbehaviour_interactivecountback_walkthrough_test extends qbehaviour_walkth $this->assertEquals('interactivecountback', $this->quba->get_question_attempt($this->slot)->get_behaviour_name()); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_question_text_expectation($m), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_does_not_contain_num_parts_correct(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Submit an answer with two right, and two wrong. $this->process_submission(array('sub0' => $orderforchoice[1], @@ -83,10 +84,6 @@ class qbehaviour_interactivecountback_walkthrough_test extends qbehaviour_walkth $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_try_again_button_expectation(true), $this->get_does_not_contain_correctness_expectation(), @@ -102,6 +99,11 @@ class qbehaviour_interactivecountback_walkthrough_test extends qbehaviour_walkth $this->quba->get_field_prefix($this->slot) . 'sub2', '0'), $this->get_contains_hidden_expectation( $this->quba->get_field_prefix($this->slot) . 'sub3', $orderforchoice[1])); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false)); // Check that extract responses will return the reset data. $prefix = $this->quba->get_field_prefix($this->slot); @@ -116,15 +118,16 @@ class qbehaviour_interactivecountback_walkthrough_test extends qbehaviour_walkth $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_correctness_expectation(), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(2), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], true)); // Submit the right answer. $this->process_submission(array('sub0' => $orderforchoice[1], @@ -135,14 +138,15 @@ class qbehaviour_interactivecountback_walkthrough_test extends qbehaviour_walkth $this->check_current_state(question_state::$gradedright); $this->check_current_mark(10); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false), $this->get_does_not_contain_submit_button_expectation(), $this->get_does_not_contain_try_again_button_expectation(), $this->get_contains_correct_expectation(), $this->get_contains_standard_correct_combined_feedback_expectation(), new question_no_pattern_expectation('/class="control\b[^"]*\bpartiallycorrect"/')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false)); } } diff --git a/question/engine/tests/helpers.php b/question/engine/tests/helpers.php index eec70bf123e..94d663d70f8 100644 --- a/question/engine/tests/helpers.php +++ b/question/engine/tests/helpers.php @@ -574,6 +574,48 @@ abstract class question_testcase extends advanced_testcase { throw new coding_exception('Unknown expectiontion:'.get_class($expectation)); } + + /** + * Use this function rather than assert when checking the value of options within a select element. + * + * @param question_contains_select_expectation $expectation The select expectation class + * @param string $html The rendered output to check against + */ + public function assert_select_options($expectation, $html) { + if (get_class($expectation) !== 'question_contains_select_expectation') { + throw new coding_exception('Unsuitable expectiontion: '.get_class($expectation)); + } + $dom = new DOMDocument(); + $dom->loadHTML($html); + $selects = $dom->getElementsByTagName('select'); + foreach ($selects as $select) { + if ($select->getAttribute('name') == $expectation->name) { + $options = $select->getElementsByTagName('option'); + foreach ($options as $key => $option) { + if ($key == 0) { + // Check the value of the first option. This is often 'Choose...' or a nbsp. + // Note it is necessary to pass a nbsp character in the test here and not just ' '. + // Many tests do not require checking of this option. + if (isset($expectation->choices[$option->getAttribute('value')])) { + $this->assertEquals($expectation->choices[$option->getAttribute('value')], $option->textContent); + } + continue; + } + // Check the value of the options in the select. + $this->assertEquals($expectation->choices[$option->getAttribute('value')], $option->textContent); + if ($expectation->selected && $option->getAttribute('value') == $expectation->selected) { + // Check the right option is selected. + $this->assertTrue(!empty($option->getAttribute('selected'))); + } + } + if ($expectation->enabled) { + // Check the select element is enabled. + $this->assertTrue(!$select->getAttribute('disabled')); + } + } + } + return; + } } @@ -913,6 +955,20 @@ abstract class qbehaviour_walkthrough_test_base extends question_testcase { } } + /** + * Use this function rather than check_current_output for select expectations where + * checking the value of the options is required. check_current_output only checks + * that the right number of options are available. + * + * @param question_contains_select_expectation $expectations One or more expectations. + */ + protected function check_output_contains_selectoptions(...$expectations) { + $html = $this->quba->render_question($this->slot, $this->displayoptions); + foreach ($expectations as $expectation) { + $this->assert_select_options($expectation, $html); + } + } + protected function get_question_attempt() { return $this->quba->get_question_attempt($this->slot); } diff --git a/question/type/gapselect/renderer.php b/question/type/gapselect/renderer.php index 177e0e58812..76d459df50a 100644 --- a/question/type/gapselect/renderer.php +++ b/question/type/gapselect/renderer.php @@ -57,7 +57,7 @@ class qtype_gapselect_renderer extends qtype_elements_embedded_in_question_text_ $orderedchoices = $question->get_ordered_choices($group); $selectoptions = array(); foreach ($orderedchoices as $orderedchoicevalue => $orderedchoice) { - $selectoptions[$orderedchoicevalue] = $orderedchoice->text; + $selectoptions[$orderedchoicevalue] = format_string($orderedchoice->text); } $feedbackimage = ''; diff --git a/question/type/gapselect/tests/walkthrough_test.php b/question/type/gapselect/tests/walkthrough_test.php index 085b0b118de..5e21fefc614 100644 --- a/question/type/gapselect/tests/walkthrough_test.php +++ b/question/type/gapselect/tests/walkthrough_test.php @@ -52,16 +52,19 @@ class qtype_gapselect_walkthrough_test extends qbehaviour_walkthrough_test_base $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('p1', - array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), null, true), - $this->get_contains_select_expectation('p2', - array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), null, true), - $this->get_contains_select_expectation('p3', - array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + // Note it is possible to check the first select option as below, but it is not required. + // Also note the ' ' in the p2 example below is a nbsp (used when names are short). + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('p1', + ['' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'], null, true), + $this->get_contains_select_expectation('p2', + ['' => ' ', '1' => 'fox', '2' => 'dog'], null, true), + $this->get_contains_select_expectation('p3', + ['1' => 'lazy', '2' => 'assiduous'], null, true)); // Save the wrong answer. $this->process_submission(array('p1' => '2', 'p2' => '2', 'p3' => '2')); @@ -70,17 +73,18 @@ class qtype_gapselect_walkthrough_test extends qbehaviour_walkthrough_test_base $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('p1', - array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 2, true), - $this->get_contains_select_expectation('p2', - array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 2, true), - $this->get_contains_select_expectation('p3', - array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 2, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_correctness_expectation(), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('p1', + ['1' => 'quick', '2' => 'slow'], 2, true), + $this->get_contains_select_expectation('p2', + ['1' => 'fox', '2' => 'dog'], 2, true), + $this->get_contains_select_expectation('p3', + ['1' => 'lazy', '2' => 'assiduous'], 2, true)); // Submit the wrong answer. $this->process_submission(array('p1' => '2', 'p2' => '2', 'p3' => '2', '-submit' => 1)); @@ -89,16 +93,17 @@ class qtype_gapselect_walkthrough_test extends qbehaviour_walkthrough_test_base $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('p1', - array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 2, false), - $this->get_contains_select_expectation('p2', - array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 2, false), - $this->get_contains_select_expectation('p3', - array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 2, false), - $this->get_does_not_contain_submit_button_expectation(), + $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_try_again_button_expectation(true), $this->get_does_not_contain_correctness_expectation(), $this->get_contains_hint_expectation('This is the first hint')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('p1', + ['1' => 'quick', '2' => 'slow'], 2, false), + $this->get_contains_select_expectation('p2', + ['1' => 'fox', '2' => 'dog'], 2, false), + $this->get_contains_select_expectation('p3', + ['1' => 'lazy', '2' => 'assiduous'], 2, false)); // Do try again. $this->process_submission(array('-tryagain' => 1)); @@ -107,17 +112,18 @@ class qtype_gapselect_walkthrough_test extends qbehaviour_walkthrough_test_base $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('p1', - array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 2, true), - $this->get_contains_select_expectation('p2', - array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 2, true), - $this->get_contains_select_expectation('p3', - array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 2, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_correctness_expectation(), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(2), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('p1', + ['1' => 'quick', '2' => 'slow'], 2, true), + $this->get_contains_select_expectation('p2', + ['1' => 'fox', '2' => 'dog'], 2, true), + $this->get_contains_select_expectation('p3', + ['1' => 'lazy', '2' => 'assiduous'], 2, true)); // Submit the right answer. $this->process_submission(array('p1' => '1', 'p2' => '1', 'p3' => '1', '-submit' => 1)); @@ -126,15 +132,16 @@ class qtype_gapselect_walkthrough_test extends qbehaviour_walkthrough_test_base $this->check_current_state(question_state::$gradedright); $this->check_current_mark(2); $this->check_current_output( - $this->get_contains_select_expectation('p1', - array('' => get_string('choosedots'), '1' => 'quick', '2' => 'slow'), 1, false), - $this->get_contains_select_expectation('p2', - array('' => get_string('choosedots'), '1' => 'fox', '2' => 'dog'), 1, false), - $this->get_contains_select_expectation('p3', - array('' => get_string('choosedots'), '1' => 'lazy', '2' => 'assiduous'), 1, false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_correct_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('p1', + ['1' => 'quick', '2' => 'slow'], 1, false), + $this->get_contains_select_expectation('p2', + ['1' => 'fox', '2' => 'dog'], 1, false), + $this->get_contains_select_expectation('p3', + ['1' => 'lazy', '2' => 'assiduous'], 1, false)); // Check regrading does not mess anything up. $this->quba->regrade_all_questions(); @@ -160,11 +167,11 @@ class qtype_gapselect_walkthrough_test extends qbehaviour_walkthrough_test_base // Check the initial state. $this->check_current_state(question_state::$todo); $this->check_current_mark(null); - $this->check_current_output( + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('p1', - array('' => get_string('choosedots'), '1' => 'cat', '2' => 'dog'), null, true), + ['1' => 'cat', '2' => 'dog'], null, true), $this->get_contains_select_expectation('p2', - array('' => get_string('choosedots'), '1' => 'mat', '2' => 'bat'), null, true)); + ['1' => 'mat', '2' => 'bat'], null, true)); } public function test_choices_containing_dollars() { diff --git a/question/type/match/tests/walkthrough_test.php b/question/type/match/tests/walkthrough_test.php index 403d8d3b879..f5bd7af8b7f 100644 --- a/question/type/match/tests/walkthrough_test.php +++ b/question/type/match/tests/walkthrough_test.php @@ -56,12 +56,13 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, true), $this->get_contains_select_expectation('sub1', $choices, null, true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); $this->check_step_count(1); // Save a blank response. @@ -72,12 +73,13 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, true), $this->get_contains_select_expectation('sub1', $choices, null, true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); $this->check_step_count(1); // Finish the attempt. @@ -86,7 +88,7 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { // Verify. $this->check_current_state(question_state::$gaveup); $this->check_current_mark(null); - $this->check_current_output( + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, false), $this->get_contains_select_expectation('sub1', $choices, null, false), $this->get_contains_select_expectation('sub2', $choices, null, false), @@ -111,12 +113,13 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, true), $this->get_contains_select_expectation('sub1', $choices, null, true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Save a partial response. $this->process_submission(array('sub0' => $orderforchoice[1], @@ -126,12 +129,13 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$invalid); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], true), $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Finish the attempt. $this->quba->finish_all_questions(); @@ -140,11 +144,12 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$gradedpartial); $this->check_current_mark(2); $this->check_current_output( + $this->get_contains_partcorrect_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), $this->get_contains_select_expectation('sub2', $choices, null, false), - $this->get_contains_select_expectation('sub3', $choices, null, false), - $this->get_contains_partcorrect_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, false)); } public function test_interactive_correct_no_submit() { @@ -169,14 +174,15 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Save the right answer. $this->process_submission(array('sub0' => $orderforchoice[1], @@ -190,13 +196,14 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$gradedright); $this->check_current_mark(4); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_correct_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false)); } public function test_interactive_partial_no_submit() { @@ -221,14 +228,15 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Save the right answer. $this->process_submission(array('sub0' => $orderforchoice[1], @@ -242,13 +250,14 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$gradedpartial); $this->check_current_mark(2); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub3', $choices, null, false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_partcorrect_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub3', $choices, null, false)); } public function test_interactive_with_invalid() { @@ -273,14 +282,15 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Try to submit an invalid answer. $this->process_submission(array('sub0' => '0', @@ -291,14 +301,15 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$invalid); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_invalid_answer_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Now submit the right answer. $this->process_submission(array('sub0' => $orderforchoice[1], @@ -309,13 +320,14 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$gradedright); $this->check_current_mark(4); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_correct_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[1], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false)); } public function test_match_with_tricky_html_choices() { @@ -346,6 +358,8 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { // Check the initial state. $this->check_current_state(question_state::$todo); $this->check_current_mark(null); + // Do not use check_output_contains_selectoptions as there are multibyte characters ('1 ≤ x ≤ 2') that + // seem to be read as ascii ('1 ≤ x ≤ 2') in this test. $this->check_current_output( $this->get_contains_select_expectation('sub0', $choices, null, true), $this->get_contains_select_expectation('sub1', $choices, null, true), @@ -392,14 +406,15 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Submit a completely wrong response. $this->process_submission(array('sub0' => $orderforchoice[3], @@ -410,10 +425,6 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[3], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[3], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[3], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[3], false), $this->get_contains_hidden_expectation( $this->quba->get_field_prefix($this->slot) . 'sub0', '0'), $this->get_contains_hidden_expectation( @@ -424,6 +435,11 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->quba->get_field_prefix($this->slot) . 'sub3', '0'), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_hint_expectation('This is the first hint.')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[3], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[3], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[3], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[3], false)); // Try again. $this->process_submission(array('sub0' => 0, @@ -434,14 +450,15 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(2), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Submit a partially wrong response. $this->process_submission(array('sub0' => $orderforchoice[3], @@ -452,10 +469,6 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[3], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[3], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false), $this->get_contains_hidden_expectation( $this->quba->get_field_prefix($this->slot) . 'sub0', '0'), $this->get_contains_hidden_expectation( @@ -466,6 +479,11 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->quba->get_field_prefix($this->slot) . 'sub3', $orderforchoice[1]), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_hint_expectation('This is the second hint.')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[3], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[3], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], false)); // Try again. $this->process_submission(array('sub0' => 0, @@ -476,13 +494,15 @@ class qtype_match_walkthrough_test extends qbehaviour_walkthrough_test_base { $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], true), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(1), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[2], true), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[1], true)); + } } diff --git a/question/type/multianswer/tests/walkthrough_test.php b/question/type/multianswer/tests/walkthrough_test.php index a7f21fda0c5..d3f6e45c104 100644 --- a/question/type/multianswer/tests/walkthrough_test.php +++ b/question/type/multianswer/tests/walkthrough_test.php @@ -207,7 +207,7 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas new question_hint_with_parts(11, 'This is the first hint.', FORMAT_HTML, false, true), new question_hint_with_parts(12, 'This is the second hint.', FORMAT_HTML, true, true), ); - $choices = array('' => '', '0' => 'California', '1' => 'Arizona'); + $choices = array('0' => 'California', '1' => 'Arizona'); $this->start_attempt_at_question($q, 'interactive', 4); @@ -218,16 +218,17 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->quba->get_question_attempt($this->slot)->get_behaviour_name()); $this->check_current_output( $this->get_contains_marked_out_of_summary(), - $this->get_contains_select_expectation('sub1_answer', $choices, null, true), - $this->get_contains_select_expectation('sub2_answer', $choices, null, true), - $this->get_contains_select_expectation('sub3_answer', $choices, null, true), - $this->get_contains_select_expectation('sub4_answer', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_validation_error_expectation(), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_does_not_contain_num_parts_correct(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, null, true), + $this->get_contains_select_expectation('sub2_answer', $choices, null, true), + $this->get_contains_select_expectation('sub3_answer', $choices, null, true), + $this->get_contains_select_expectation('sub4_answer', $choices, null, true)); // Submit a completely wrong response. $this->process_submission(array('sub1_answer' => '1', 'sub2_answer' => '0', @@ -237,10 +238,6 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub2_answer', $choices, 0, false), - $this->get_contains_select_expectation('sub3_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub4_answer', $choices, 0, false), $this->get_does_not_contain_num_parts_correct(), $this->get_contains_hidden_expectation( $this->quba->get_field_prefix($this->slot) . 'sub1_answer', ''), @@ -254,6 +251,11 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->get_contains_try_again_button_expectation(true), $this->get_does_not_contain_correctness_expectation(), $this->get_contains_hint_expectation('This is the first hint.')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub2_answer', $choices, 0, false), + $this->get_contains_select_expectation('sub3_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub4_answer', $choices, 0, false)); // Check that, if we review in this state, the try again button is disabled. $displayoptions = new question_display_options(); @@ -270,14 +272,15 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, null, true), - $this->get_contains_select_expectation('sub2_answer', $choices, null, true), - $this->get_contains_select_expectation('sub3_answer', $choices, null, true), - $this->get_contains_select_expectation('sub4_answer', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(2), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, null, true), + $this->get_contains_select_expectation('sub2_answer', $choices, null, true), + $this->get_contains_select_expectation('sub3_answer', $choices, null, true), + $this->get_contains_select_expectation('sub4_answer', $choices, null, true)); // Submit a partially wrong response. $this->process_submission(array('sub1_answer' => '1', 'sub2_answer' => '1', @@ -287,10 +290,6 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub2_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub3_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub4_answer', $choices, 1, false), $this->get_contains_num_parts_correct(2), $this->get_contains_hidden_expectation( $this->quba->get_field_prefix($this->slot) . 'sub1_answer', ''), @@ -302,6 +301,11 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->quba->get_field_prefix($this->slot) . 'sub4_answer', '1'), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_hint_expectation('This is the second hint.')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub2_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub3_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub4_answer', $choices, 1, false)); // Try again. $this->process_submission(array('sub1_answer' => '', @@ -312,14 +316,15 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, '', true), - $this->get_contains_select_expectation('sub2_answer', $choices, '1', true), - $this->get_contains_select_expectation('sub3_answer', $choices, '', true), - $this->get_contains_select_expectation('sub4_answer', $choices, '1', true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(1), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, '', true), + $this->get_contains_select_expectation('sub2_answer', $choices, '1', true), + $this->get_contains_select_expectation('sub3_answer', $choices, '', true), + $this->get_contains_select_expectation('sub4_answer', $choices, '1', true)); } public function test_interactive_partial_response_does_not_reveal_answer() { @@ -330,7 +335,7 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas new question_hint_with_parts(11, 'This is the first hint.', FORMAT_HTML, false, true), new question_hint_with_parts(12, 'This is the second hint.', FORMAT_HTML, true, true), ); - $choices = array('' => '', '0' => 'California', '1' => 'Arizona'); + $choices = array('0' => 'California', '1' => 'Arizona'); $this->start_attempt_at_question($q, 'interactive', 4); @@ -341,16 +346,17 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->quba->get_question_attempt($this->slot)->get_behaviour_name()); $this->check_current_output( $this->get_contains_marked_out_of_summary(), - $this->get_contains_select_expectation('sub1_answer', $choices, null, true), - $this->get_contains_select_expectation('sub2_answer', $choices, null, true), - $this->get_contains_select_expectation('sub3_answer', $choices, null, true), - $this->get_contains_select_expectation('sub4_answer', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_validation_error_expectation(), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_does_not_contain_num_parts_correct(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, null, true), + $this->get_contains_select_expectation('sub2_answer', $choices, null, true), + $this->get_contains_select_expectation('sub3_answer', $choices, null, true), + $this->get_contains_select_expectation('sub4_answer', $choices, null, true)); // Submit an incomplete response response. $this->process_submission(array('sub1_answer' => '1', 'sub2_answer' => '1', '-submit' => 1)); @@ -359,16 +365,17 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$invalid); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, 1, true), - $this->get_contains_select_expectation('sub2_answer', $choices, 1, true), - $this->get_contains_select_expectation('sub3_answer', $choices, null, true), - $this->get_contains_select_expectation('sub4_answer', $choices, null, true), $this->get_does_not_contain_num_parts_correct(), $this->get_contains_validation_error_expectation(), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_try_again_button_expectation(), $this->get_does_not_contain_correctness_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, 1, true), + $this->get_contains_select_expectation('sub2_answer', $choices, 1, true), + $this->get_contains_select_expectation('sub3_answer', $choices, null, true), + $this->get_contains_select_expectation('sub4_answer', $choices, null, true)); $this->render(); $a = array('mark' => '0.00', 'max' => '1.00'); $this->assertNotRegExp('~' . preg_quote(get_string('markoutofmax', 'question', $a), '~') . '~', @@ -386,7 +393,7 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas new question_hint_with_parts(11, 'This is the first hint.', FORMAT_HTML, true, true), new question_hint_with_parts(12, 'This is the second hint.', FORMAT_HTML, true, true), ); - $choices = array('' => '', '0' => 'California', '1' => 'Arizona'); + $choices = array('0' => 'California', '1' => 'Arizona'); $this->start_attempt_at_question($q, 'interactive', 12); @@ -397,15 +404,16 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->quba->get_question_attempt($this->slot)->get_behaviour_name()); $this->check_current_output( $this->get_contains_marked_out_of_summary(), - $this->get_contains_select_expectation('sub1_answer', $choices, null, true), - $this->get_contains_select_expectation('sub2_answer', $choices, null, true), - $this->get_contains_select_expectation('sub3_answer', $choices, null, true), - $this->get_contains_select_expectation('sub4_answer', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_validation_error_expectation(), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, null, true), + $this->get_contains_select_expectation('sub2_answer', $choices, null, true), + $this->get_contains_select_expectation('sub3_answer', $choices, null, true), + $this->get_contains_select_expectation('sub4_answer', $choices, null, true)); // Submit an answer with two right, and two wrong. $this->process_submission(array('sub1_answer' => '1', 'sub2_answer' => '1', @@ -415,15 +423,16 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub2_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub3_answer', $choices, 1, false), - $this->get_contains_select_expectation('sub4_answer', $choices, 1, false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_try_again_button_expectation(true), $this->get_does_not_contain_correctness_expectation(), new question_pattern_expectation('/Tries remaining: 2/'), $this->get_contains_hint_expectation('This is the first hint.')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub2_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub3_answer', $choices, 1, false), + $this->get_contains_select_expectation('sub4_answer', $choices, 1, false)); // Check that extract responses will return the reset data. $prefix = $this->quba->get_field_prefix($this->slot); @@ -439,14 +448,15 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, '', true), - $this->get_contains_select_expectation('sub2_answer', $choices, '1', true), - $this->get_contains_select_expectation('sub3_answer', $choices, '', true), - $this->get_contains_select_expectation('sub4_answer', $choices, '1', true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(2), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, '', true), + $this->get_contains_select_expectation('sub2_answer', $choices, '1', true), + $this->get_contains_select_expectation('sub3_answer', $choices, '', true), + $this->get_contains_select_expectation('sub4_answer', $choices, '1', true)); // Submit the right answer. $this->process_submission(array('sub1_answer' => '0', 'sub2_answer' => '1', @@ -456,14 +466,15 @@ class qtype_multianswer_walkthrough_test extends qbehaviour_walkthrough_test_bas $this->check_current_state(question_state::$gradedright); $this->check_current_mark(10); $this->check_current_output( - $this->get_contains_select_expectation('sub1_answer', $choices, '0', false), - $this->get_contains_select_expectation('sub2_answer', $choices, '1', false), - $this->get_contains_select_expectation('sub3_answer', $choices, '0', false), - $this->get_contains_select_expectation('sub4_answer', $choices, '1', false), $this->get_does_not_contain_submit_button_expectation(), $this->get_does_not_contain_try_again_button_expectation(), $this->get_contains_correct_expectation(), new question_no_pattern_expectation('/class="control\b[^"]*\bpartiallycorrect"/')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub1_answer', $choices, '0', false), + $this->get_contains_select_expectation('sub2_answer', $choices, '1', false), + $this->get_contains_select_expectation('sub3_answer', $choices, '0', false), + $this->get_contains_select_expectation('sub4_answer', $choices, '1', false)); } public function test_deferred_feedback_multiple() { diff --git a/question/type/numerical/tests/walkthrough_test.php b/question/type/numerical/tests/walkthrough_test.php index 0d95cc028b8..e6fc43ae037 100644 --- a/question/type/numerical/tests/walkthrough_test.php +++ b/question/type/numerical/tests/walkthrough_test.php @@ -186,7 +186,6 @@ class qtype_numerical_walkthrough_test extends qbehaviour_walkthrough_test_base $this->start_attempt_at_question($q, 'deferredfeedback', 1); $unitchoices = array( - '' => get_string('choosedots'), 'm' => 'm', 'cm' => 'cm', ); @@ -198,9 +197,10 @@ class qtype_numerical_walkthrough_test extends qbehaviour_walkthrough_test_base $this->get_contains_marked_out_of_summary(), $this->get_does_not_contain_feedback_expectation(), $this->get_does_not_contain_validation_error_expectation(), - $this->get_contains_select_expectation('unit', $unitchoices, null, true), $this->get_does_not_contain_try_again_button_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('unit', $unitchoices, null, true)); // Submit blank. $this->process_submission(array('answer' => '')); @@ -212,9 +212,10 @@ class qtype_numerical_walkthrough_test extends qbehaviour_walkthrough_test_base $this->get_contains_marked_out_of_summary(), $this->get_does_not_contain_feedback_expectation(), $this->get_does_not_contain_validation_error_expectation(), - $this->get_contains_select_expectation('unit', $unitchoices, null, true), $this->get_does_not_contain_try_again_button_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('unit', $unitchoices, null, true)); // Sumit something that does not look like a number, but with a unit. $this->process_submission(array('answer' => 'newt', 'unit' => 'cm')); @@ -228,9 +229,10 @@ class qtype_numerical_walkthrough_test extends qbehaviour_walkthrough_test_base $this->get_contains_validation_error_expectation(), new question_pattern_expectation('/' . preg_quote(get_string('invalidnumber', 'qtype_numerical'), '/') . '/'), - $this->get_contains_select_expectation('unit', $unitchoices, 'cm', true), $this->get_does_not_contain_try_again_button_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('unit', $unitchoices, 'cm', true)); // Now put in the right answer but without a unit. $this->process_submission(array('answer' => '1.25', 'unit' => '')); @@ -243,9 +245,10 @@ class qtype_numerical_walkthrough_test extends qbehaviour_walkthrough_test_base $this->get_contains_validation_error_expectation(), new question_pattern_expectation('/' . preg_quote(get_string('unitnotselected', 'qtype_numerical'), '/') . '/'), - $this->get_contains_select_expectation('unit', $unitchoices, '', true), $this->get_does_not_contain_try_again_button_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('unit', $unitchoices, '', true)); // Now put in the right answer with a unit. $this->process_submission(array('answer' => '1.25', 'unit' => 'm')); @@ -256,9 +259,10 @@ class qtype_numerical_walkthrough_test extends qbehaviour_walkthrough_test_base $this->get_contains_marked_out_of_summary(), $this->get_does_not_contain_feedback_expectation(), $this->get_does_not_contain_validation_error_expectation(), - $this->get_contains_select_expectation('unit', $unitchoices, 'm', true), $this->get_does_not_contain_try_again_button_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('unit', $unitchoices, 'm', true)); // Submit all and finish. $this->finish(); @@ -270,8 +274,9 @@ class qtype_numerical_walkthrough_test extends qbehaviour_walkthrough_test_base $this->get_contains_mark_summary(1), $this->get_contains_correct_expectation(), $this->get_does_not_contain_validation_error_expectation(), - $this->get_contains_select_expectation('unit', $unitchoices, 'm', false), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('unit', $unitchoices, 'm', false)); $this->assertEquals('1.25 m', $this->quba->get_response_summary($this->slot)); } diff --git a/question/type/randomsamatch/tests/walkthrough_test.php b/question/type/randomsamatch/tests/walkthrough_test.php index dfaa54bdfb4..c473af7d5c8 100644 --- a/question/type/randomsamatch/tests/walkthrough_test.php +++ b/question/type/randomsamatch/tests/walkthrough_test.php @@ -46,7 +46,7 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $choiceorder = $m->get_choice_order(); $orderforchoice = array_combine(array_values($choiceorder), array_keys($choiceorder)); - $choices = array(0 => get_string('choose') . '...'); + $choices = []; foreach ($choiceorder as $key => $choice) { $choices[$key] = $m->choices[$choice]; } @@ -55,12 +55,13 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, true), $this->get_contains_select_expectation('sub1', $choices, null, true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); $this->check_step_count(1); // Save a blank response. @@ -71,12 +72,13 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, true), $this->get_contains_select_expectation('sub1', $choices, null, true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); $this->check_step_count(1); // Finish the attempt. @@ -85,7 +87,7 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b // Verify. $this->check_current_state(question_state::$gaveup); $this->check_current_mark(null); - $this->check_current_output( + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, false), $this->get_contains_select_expectation('sub1', $choices, null, false), $this->get_contains_select_expectation('sub2', $choices, null, false), @@ -101,7 +103,7 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $choiceorder = $m->get_choice_order(); $orderforchoice = array_combine(array_values($choiceorder), array_keys($choiceorder)); - $choices = array(0 => get_string('choose') . '...'); + $choices = []; foreach ($choiceorder as $key => $choice) { $choices[$key] = $m->choices[$choice]; } @@ -110,12 +112,13 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, null, true), $this->get_contains_select_expectation('sub1', $choices, null, true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Save a partial response. $this->process_submission(array('sub0' => $orderforchoice[13], @@ -125,12 +128,13 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$invalid); $this->check_current_mark(null); $this->check_current_output( + $this->get_contains_question_text_expectation($m), + $this->get_does_not_contain_feedback_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], true), $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], true), $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), - $this->get_contains_question_text_expectation($m), - $this->get_does_not_contain_feedback_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Finish the attempt. $this->quba->finish_all_questions(); @@ -139,11 +143,12 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$gradedpartial); $this->check_current_mark(2); $this->check_current_output( + $this->get_contains_partcorrect_expectation()); + $this->check_output_contains_selectoptions( $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], false), $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], false), $this->get_contains_select_expectation('sub2', $choices, null, false), - $this->get_contains_select_expectation('sub3', $choices, null, false), - $this->get_contains_partcorrect_expectation()); + $this->get_contains_select_expectation('sub3', $choices, null, false)); } public function test_interactive_correct_no_submit() { @@ -159,7 +164,7 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $choiceorder = $m->get_choice_order(); $orderforchoice = array_combine(array_values($choiceorder), array_keys($choiceorder)); - $choices = array(0 => get_string('choose') . '...'); + $choices = []; foreach ($choiceorder as $key => $choice) { $choices[$key] = $m->choices[$choice]; } @@ -168,14 +173,15 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Save the right answer. $this->process_submission(array('sub0' => $orderforchoice[13], @@ -189,13 +195,14 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$gradedright); $this->check_current_mark(4); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_correct_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], false)); } public function test_interactive_partial_no_submit() { @@ -211,7 +218,7 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $choiceorder = $m->get_choice_order(); $orderforchoice = array_combine(array_values($choiceorder), array_keys($choiceorder)); - $choices = array(0 => get_string('choose') . '...'); + $choices = []; foreach ($choiceorder as $key => $choice) { $choices[$key] = $m->choices[$choice]; } @@ -220,14 +227,15 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Save the right answer. $this->process_submission(array('sub0' => $orderforchoice[13], @@ -241,13 +249,14 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$gradedpartial); $this->check_current_mark(2); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[13], false), - $this->get_contains_select_expectation('sub3', $choices, null, false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_partcorrect_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[13], false), + $this->get_contains_select_expectation('sub3', $choices, null, false)); } public function test_interactive_with_invalid() { @@ -263,7 +272,7 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $choiceorder = $m->get_choice_order(); $orderforchoice = array_combine(array_values($choiceorder), array_keys($choiceorder)); - $choices = array(0 => get_string('choose') . '...'); + $choices = []; foreach ($choiceorder as $key => $choice) { $choices[$key] = $m->choices[$choice]; } @@ -272,14 +281,15 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Try to submit an invalid answer. $this->process_submission(array('sub0' => '0', @@ -290,14 +300,15 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$invalid); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_invalid_answer_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Now submit the right answer. $this->process_submission(array('sub0' => $orderforchoice[13], @@ -308,13 +319,14 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$gradedright); $this->check_current_mark(4); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], false), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_correct_expectation(), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[13], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], false)); } public function test_randomsamatch_clear_wrong() { @@ -330,7 +342,7 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $choiceorder = $m->get_choice_order(); $orderforchoice = array_combine(array_values($choiceorder), array_keys($choiceorder)); - $choices = array(0 => get_string('choose') . '...'); + $choices = []; foreach ($choiceorder as $key => $choice) { $choices[$key] = $m->choices[$choice]; } @@ -339,14 +351,15 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(3), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Submit a completely wrong response. $this->process_submission(array('sub0' => $orderforchoice[16], @@ -357,10 +370,6 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[13], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[13], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[16], false), $this->get_contains_hidden_expectation( $this->quba->get_field_prefix($this->slot) . 'sub0', '0'), $this->get_contains_hidden_expectation( @@ -371,6 +380,11 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->quba->get_field_prefix($this->slot) . 'sub3', '0'), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_hint_expectation('This is the first hint.')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[13], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[13], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[16], false)); // Try again. $this->process_submission(array('sub0' => 0, @@ -381,14 +395,15 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, null, true), - $this->get_contains_select_expectation('sub3', $choices, null, true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(2), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, null, true), + $this->get_contains_select_expectation('sub3', $choices, null, true)); // Submit a partially wrong response. $this->process_submission(array('sub0' => $orderforchoice[16], @@ -399,10 +414,6 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[13], false), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], false), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], false), $this->get_contains_hidden_expectation( $this->quba->get_field_prefix($this->slot) . 'sub0', '0'), $this->get_contains_hidden_expectation( @@ -413,6 +424,11 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->quba->get_field_prefix($this->slot) . 'sub3', $orderforchoice[13]), $this->get_does_not_contain_submit_button_expectation(), $this->get_contains_hint_expectation('This is the second hint.')); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub1', $choices, $orderforchoice[13], false), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], false), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], false)); // Try again. $this->process_submission(array('sub0' => 0, @@ -423,13 +439,14 @@ class qtype_randomsamatch_walkthrough_test extends qbehaviour_walkthrough_test_b $this->check_current_state(question_state::$todo); $this->check_current_mark(null); $this->check_current_output( - $this->get_contains_select_expectation('sub0', $choices, null, true), - $this->get_contains_select_expectation('sub1', $choices, null, true), - $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], true), - $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], true), $this->get_contains_submit_button_expectation(true), $this->get_does_not_contain_feedback_expectation(), $this->get_tries_remaining_expectation(1), $this->get_no_hint_visible_expectation()); + $this->check_output_contains_selectoptions( + $this->get_contains_select_expectation('sub0', $choices, null, true), + $this->get_contains_select_expectation('sub1', $choices, null, true), + $this->get_contains_select_expectation('sub2', $choices, $orderforchoice[16], true), + $this->get_contains_select_expectation('sub3', $choices, $orderforchoice[13], true)); } } -- 2.43.0