/** * Run this test against a particular question. * @param question_usage_by_activity $quba the useage to use when running the test. * @param qtype_stack_question $question the question to test. * @param int $seed the random seed to use. * @return stack_question_test_result the test results. */ public function test_question(question_usage_by_activity $quba, qtype_stack_question $question, $seed) { $slot = $quba->add_question($question, $question->defaultmark); $quba->start_question($slot, $seed); $response = self::compute_response($question, $this->inputs); $quba->process_action($slot, $response); $results = new stack_question_test_result($this); foreach ($this->inputs as $inputname => $notused) { $inputstate = $question->get_input_state($inputname, $response); // The _val below is a hack. Not all inputnames exist explicitly in // the response, but the _val does. Some inputs, e.g. matrices have // many entries in the response so none match $response[$inputname]. if (array_key_exists($inputname, $response)) { $inputresponse = $response[$inputname]; } else { $inputresponse = $response[$inputname . '_val']; } $results->set_input_state($inputname, $inputresponse, $inputstate->contentsdisplayed, $inputstate->status, $inputstate->errors); } foreach ($this->expectedresults as $prtname => $expectedresult) { $result = $question->get_prt_result($prtname, $response, false); $results->set_prt_result($prtname, $result); } return $results; }
protected function start_attempt_at_question($question, $preferredbehaviour, $maxmark = null, $variant = 1) { $this->quba->set_preferred_behaviour($preferredbehaviour); $this->slot = $this->quba->add_question($question, $maxmark); $this->quba->start_question($this->slot, $variant); }