|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 // This file is part of Moodle - http://moodle.org/ 00003 // 00004 // Moodle is free software: you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation, either version 3 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // Moodle is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00016 00027 defined('MOODLE_INTERNAL') || die(); 00028 00029 require_once($CFG->dirroot . '/mod/quiz/locallib.php'); 00030 00031 00038 class quiz_locallib_test extends UnitTestCase { 00039 public static $includecoverage = array('mod/quiz/locallib.php'); 00040 public function test_quiz_questions_in_quiz() { 00041 $this->assertEqual(quiz_questions_in_quiz(''), ''); 00042 $this->assertEqual(quiz_questions_in_quiz('0'), ''); 00043 $this->assertEqual(quiz_questions_in_quiz('0,0'), ''); 00044 $this->assertEqual(quiz_questions_in_quiz('0,0,0'), ''); 00045 $this->assertEqual(quiz_questions_in_quiz('1'), '1'); 00046 $this->assertEqual(quiz_questions_in_quiz('1,2'), '1,2'); 00047 $this->assertEqual(quiz_questions_in_quiz('1,0,2'), '1,2'); 00048 $this->assertEqual(quiz_questions_in_quiz('0,1,0,0,2,0'), '1,2'); 00049 } 00050 00051 public function test_quiz_number_of_pages() { 00052 $this->assertEqual(quiz_number_of_pages('0'), 1); 00053 $this->assertEqual(quiz_number_of_pages('0,0'), 2); 00054 $this->assertEqual(quiz_number_of_pages('0,0,0'), 3); 00055 $this->assertEqual(quiz_number_of_pages('1,0'), 1); 00056 $this->assertEqual(quiz_number_of_pages('1,2,0'), 1); 00057 $this->assertEqual(quiz_number_of_pages('1,0,2,0'), 2); 00058 $this->assertEqual(quiz_number_of_pages('1,2,3,0'), 1); 00059 $this->assertEqual(quiz_number_of_pages('1,2,3,0'), 1); 00060 $this->assertEqual(quiz_number_of_pages('0,1,0,0,2,0'), 4); 00061 } 00062 00063 public function test_quiz_number_of_questions_in_quiz() { 00064 $this->assertEqual(quiz_number_of_questions_in_quiz('0'), 0); 00065 $this->assertEqual(quiz_number_of_questions_in_quiz('0,0'), 0); 00066 $this->assertEqual(quiz_number_of_questions_in_quiz('0,0,0'), 0); 00067 $this->assertEqual(quiz_number_of_questions_in_quiz('1,0'), 1); 00068 $this->assertEqual(quiz_number_of_questions_in_quiz('1,2,0'), 2); 00069 $this->assertEqual(quiz_number_of_questions_in_quiz('1,0,2,0'), 2); 00070 $this->assertEqual(quiz_number_of_questions_in_quiz('1,2,3,0'), 3); 00071 $this->assertEqual(quiz_number_of_questions_in_quiz('1,2,3,0'), 3); 00072 $this->assertEqual(quiz_number_of_questions_in_quiz('0,1,0,0,2,0'), 2); 00073 $this->assertEqual(quiz_number_of_questions_in_quiz('10,,0,0'), 1); 00074 } 00075 00076 public function test_quiz_clean_layout() { 00077 // Without stripping empty pages. 00078 $this->assertEqual(quiz_clean_layout(',,1,,,2,,'), '1,2,0'); 00079 $this->assertEqual(quiz_clean_layout(''), '0'); 00080 $this->assertEqual(quiz_clean_layout('0'), '0'); 00081 $this->assertEqual(quiz_clean_layout('0,0'), '0,0'); 00082 $this->assertEqual(quiz_clean_layout('0,0,0'), '0,0,0'); 00083 $this->assertEqual(quiz_clean_layout('1'), '1,0'); 00084 $this->assertEqual(quiz_clean_layout('1,2'), '1,2,0'); 00085 $this->assertEqual(quiz_clean_layout('1,0,2'), '1,0,2,0'); 00086 $this->assertEqual(quiz_clean_layout('0,1,0,0,2,0'), '0,1,0,0,2,0'); 00087 00088 // With stripping empty pages. 00089 $this->assertEqual(quiz_clean_layout('', true), '0'); 00090 $this->assertEqual(quiz_clean_layout('0', true), '0'); 00091 $this->assertEqual(quiz_clean_layout('0,0', true), '0'); 00092 $this->assertEqual(quiz_clean_layout('0,0,0', true), '0'); 00093 $this->assertEqual(quiz_clean_layout('1', true), '1,0'); 00094 $this->assertEqual(quiz_clean_layout('1,2', true), '1,2,0'); 00095 $this->assertEqual(quiz_clean_layout('1,0,2', true), '1,0,2,0'); 00096 $this->assertEqual(quiz_clean_layout('0,1,0,0,2,0', true), '1,0,2,0'); 00097 } 00098 00099 public function test_quiz_repaginate() { 00100 // Test starting with 1 question per page. 00101 $this->assertEqual(quiz_repaginate('1,0,2,0,3,0', 0), '1,2,3,0'); 00102 $this->assertEqual(quiz_repaginate('1,0,2,0,3,0', 3), '1,2,3,0'); 00103 $this->assertEqual(quiz_repaginate('1,0,2,0,3,0', 2), '1,2,0,3,0'); 00104 $this->assertEqual(quiz_repaginate('1,0,2,0,3,0', 1), '1,0,2,0,3,0'); 00105 00106 // Test starting with all on one page page. 00107 $this->assertEqual(quiz_repaginate('1,2,3,0', 0), '1,2,3,0'); 00108 $this->assertEqual(quiz_repaginate('1,2,3,0', 3), '1,2,3,0'); 00109 $this->assertEqual(quiz_repaginate('1,2,3,0', 2), '1,2,0,3,0'); 00110 $this->assertEqual(quiz_repaginate('1,2,3,0', 1), '1,0,2,0,3,0'); 00111 00112 // Test single question case. 00113 $this->assertEqual(quiz_repaginate('100,0', 0), '100,0'); 00114 $this->assertEqual(quiz_repaginate('100,0', 1), '100,0'); 00115 00116 // No questions case. 00117 $this->assertEqual(quiz_repaginate('0', 0), '0'); 00118 00119 // Test empty pages are removed. 00120 $this->assertEqual(quiz_repaginate('1,2,3,0,0,0', 0), '1,2,3,0'); 00121 $this->assertEqual(quiz_repaginate('1,0,0,0,2,3,0', 0), '1,2,3,0'); 00122 $this->assertEqual(quiz_repaginate('0,0,0,1,2,3,0', 0), '1,2,3,0'); 00123 00124 // Test shuffle option. 00125 $this->assertTrue(in_array(quiz_repaginate('1,2,0', 0, true), 00126 array('1,2,0', '2,1,0'))); 00127 $this->assertTrue(in_array(quiz_repaginate('1,2,0', 1, true), 00128 array('1,0,2,0', '2,0,1,0'))); 00129 } 00130 00131 public function test_quiz_rescale_grade() { 00132 $quiz = new stdClass(); 00133 $quiz->decimalpoints = 2; 00134 $quiz->questiondecimalpoints = 3; 00135 $quiz->grade = 10; 00136 $quiz->sumgrades = 10; 00137 $this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, false), 0.12345678); 00138 $this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, true), format_float(0.12, 2)); 00139 $this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, 'question'), 00140 format_float(0.123, 3)); 00141 $quiz->sumgrades = 5; 00142 $this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, false), 0.24691356); 00143 $this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, true), format_float(0.25, 2)); 00144 $this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, 'question'), 00145 format_float(0.247, 3)); 00146 } 00147 00148 public function test_quiz_get_slot_for_question() { 00149 $quiz = new stdClass(); 00150 $quiz->questions = '1,2,0,7,0'; 00151 $this->assertEqual(1, quiz_get_slot_for_question($quiz, 1)); 00152 $this->assertEqual(3, quiz_get_slot_for_question($quiz, 7)); 00153 } 00154 }