. /** * A SimpleTest GroupTest that automatically finds all the * test files in a directory tree according to certain rules. * * @package tool * @subpackage unittest * @copyright © 2006 The Open University * @author N.D.Freear@open.ac.uk, T.J.Hunt@open.ac.uk * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ if (!defined('MOODLE_INTERNAL')) { die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page } require_once($CFG->libdir . '/simpletestlib/test_case.php'); /** * This is a composite test class for finding test cases and * other RunnableTest classes in a directory tree and combining * them into a group test. * @package SimpleTestEx */ class AutoGroupTest extends TestSuite { var $showsearch; function AutoGroupTest($showsearch, $test_name = null) { $this->TestSuite($test_name); $this->showsearch = $showsearch; } function run(&$reporter) { global $UNITTEST; $UNITTEST->running = true; $return = parent::run($reporter); unset($UNITTEST->running); return $return; } function setLabel($test_name) { //:HACK: there is no GroupTest::setLabel, so access parent::_label. $this->_label = $test_name; } function addIgnoreFolder($ignorefolder) { $this->ignorefolders[]=$ignorefolder; } function _recurseFolders($path) { if ($this->showsearch) { echo '
Searching folder: ' . realpath($dir) . '
Adding test file: ' . realpath($file) . '
'; } // Make sure that syntax errors show up suring the search, otherwise you often // get blank screens because evil people turn down error_reporting elsewhere. error_reporting(E_ALL); } if(!is_file($file) ){ parent::addTestCase(new BadTest($file, 'Not a file or does not exist')); } parent::addTestFile($file); } } /* ======================================================================= */ // get_class_ex: Insert spaces to prettify the class-name. function get_class_ex($object) { return preg_replace('/(.?)([A-Z])/', '${1} ${2}', get_class($object)); } /** * A failing test base-class for when a test suite has NOT loaded properly. * See class, simple_test.php: BadGroupTest. * @package SimpleTestEx */ class BadTest { var $label; var $error; function BadTest($label, $error) { $this->label = $label; $this->error = $error; } function getLabel() { return $this->label; } function run(&$reporter) { $reporter->paintGroupStart(basename(__FILE__), $this->getSize()); $reporter->paintFail(get_class_ex($this) .' [' . $this->getLabel() . '] with error [' . $this->error . ']'); $reporter->paintGroupEnd($this->getLabel()); return $reporter->getStatus(); } /** * @return int the number of test cases starting. */ function getSize() { return 0; } } /** * An informational notice base-class for when a test suite is being processed. * See class, simple_test.php: BadGroupTest. * @package SimpleTestEx */ class Notice { var $label; var $status; function Notice($label, $error) { $this->label = $label; $this->status = $error; } function getLabel() { return $this->label; } function run(&$reporter) { $reporter->paintGroupStart(basename(__FILE__), $this->getSize()); $reporter->paintNotice(get_class_ex($this) . ' ['. $this->getLabel() .'] with status [' . $this->status . ']'); $reporter->paintGroupEnd($this->getLabel()); return $reporter->getStatus(); } function getSize() { return 0; } } /** * A failing folder test for when the test-user specifies an invalid directory * (run.php?folder=woops). * @package SimpleTestEx */ class BadFolderTest extends BadTest { } /** * A failing auto test for when no unit test files are found. * @package SimpleTestEx */ class BadAutoGroupTest extends BadTest { } /** * Auto group test notices - 1. Search complete. 2. A test file has been found. * @package SimpleTestEx */ class AutoGroupTestNotice extends Notice { } class FindFileNotice extends Notice { }