b412f9c4c9
AMOS BEGIN MOV [pluginname,report_unittest],[pluginname,tool_unittest] MOV [unittest:view,report_unittest],[unittest:execute,tool_unittest] MOV [dbtest,core_admin],[dbtest,tool_unittest] MOV [addconfigprefix,core_simpletest],[addconfigprefix,tool_unittest] MOV [all,core_simpletest],[all,tool_unittest] MOV [codecoverageanalysis,core_simpletest],[codecoverageanalysis,tool_unittest] MOV [codecoveragecompletereport,core_simpletest],[codecoveragecompletereport,tool_unittest] MOV [codecoveragedisabled,core_simpletest],[codecoveragedisabled,tool_unittest] MOV [codecoveragelatestdetails,core_simpletest],[codecoveragelatestdetails,tool_unittest] MOV [codecoveragelatestreport,core_simpletest],[codecoveragelatestreport,tool_unittest] MOV [confignonwritable,core_simpletest],[confignonwritable,tool_unittest] MOV [coveredlines,core_simpletest],[coveredlines,tool_unittest] MOV [coveredpercentage,core_simpletest],[coveredpercentage,tool_unittest] MOV [deletingnoninsertedrecord,core_simpletest],[deletingnoninsertedrecord,tool_unittest] MOV [deletingnoninsertedrecords,core_simpletest],[deletingnoninsertedrecords,tool_unittest] MOV [droptesttables,core_simpletest],[droptesttables,tool_unittest] MOV [exception,core_simpletest],[exception,tool_unittest] MOV [executablelines,core_simpletest],[executablelines,tool_unittest] MOV [fail,core_simpletest],[fail,tool_unittest] MOV [ignorefile,core_simpletest],[ignorefile,tool_unittest] MOV [ignorethisfile,core_simpletest],[ignorethisfile,tool_unittest] MOV [installtesttables,core_simpletest],[installtesttables,tool_unittest] MOV [moodleunittests,core_simpletest],[moodleunittests,tool_unittest] MOV [notice,core_simpletest],[notice,tool_unittest] MOV [onlytest,core_simpletest],[onlytest,tool_unittest] MOV [pass,core_simpletest],[pass,tool_unittest] MOV [pathdoesnotexist,core_simpletest],[pathdoesnotexist,tool_unittest] MOV [prefix,core_simpletest],[prefix,tool_unittest] MOV [prefixnotset,core_simpletest],[prefixnotset,tool_unittest] MOV [reinstalltesttables,core_simpletest],[reinstalltesttables,tool_unittest] MOV [retest,core_simpletest],[retest,tool_unittest] MOV [retestonlythisfile,core_simpletest],[retestonlythisfile,tool_unittest] MOV [runall,core_simpletest],[runall,tool_unittest] MOV [runat,core_simpletest],[runat,tool_unittest] MOV [runonlyfile,core_simpletest],[runonlyfile,tool_unittest] MOV [runonlyfolder,core_simpletest],[runonlyfolder,tool_unittest] MOV [runtests,core_simpletest],[runtests,tool_unittest] MOV [rununittests,core_simpletest],[rununittests,tool_unittest] MOV [showpasses,core_simpletest],[showpasses,tool_unittest] MOV [showsearch,core_simpletest],[showsearch,tool_unittest] MOV [skip,core_simpletest],[skip,tool_unittest] MOV [stacktrace,core_simpletest],[stacktrace,tool_unittest] MOV [summary,core_simpletest],[summary,tool_unittest] MOV [tablesnotsetup,core_simpletest],[tablesnotsetup,tool_unittest] MOV [testdboperations,core_simpletest],[testdboperations,tool_unittest] MOV [testtablescsvfileunwritable,core_simpletest],[testtablescsvfileunwritable,tool_unittest] MOV [testtablesneedupgrade,core_simpletest],[testtablesneedupgrade,tool_unittest] MOV [testtablesok,core_simpletest],[testtablesok,tool_unittest] MOV [thorough,core_simpletest],[thorough,tool_unittest] MOV [timetakes,core_simpletest],[timetakes,tool_unittest] MOV [totallines,core_simpletest],[totallines,tool_unittest] MOV [uncaughtexception,core_simpletest],[uncaughtexception,tool_unittest] MOV [uncoveredlines,core_simpletest],[uncoveredlines,tool_unittest] MOV [unittestprefixsetting,core_simpletest],[unittestprefixsetting,tool_unittest] MOV [unittests,core_simpletest],[unittests,tool_unittest] MOV [updatingnoninsertedrecord,core_simpletest],[updatingnoninsertedrecord,tool_unittest] MOV [version,core_simpletest],[version,tool_unittest] AMOS END
231 lines
6.8 KiB
PHP
231 lines
6.8 KiB
PHP
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* 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 '<li>' . basename(realpath($path)) . '<ul>';
|
|
}
|
|
|
|
$files = scandir($path);
|
|
static $s_count = 0;
|
|
|
|
foreach ($files as $file) {
|
|
if ($file == '.' || $file == '..') {
|
|
continue;
|
|
}
|
|
$file_path = $path . '/' . $file;
|
|
if (is_dir($file_path)) {
|
|
if ($file != 'CVS' && $file != '.git' && !in_array($file_path, $this->ignorefolders)) {
|
|
$this->_recurseFolders($file_path);
|
|
}
|
|
} elseif (preg_match('/simpletest(\/|\\\\)test.*\.php$/', $file_path)) {
|
|
|
|
$s_count++;
|
|
// OK, found: this shows as a 'Notice' for any 'simpletest/test*.php' file.
|
|
$this->addTestCase(new FindFileNotice($file_path, 'Found unit test file, '. $s_count));
|
|
|
|
// addTestFile: Unfortunately this doesn't return fail/success (bool).
|
|
$this->addTestFile($file_path, true);
|
|
}
|
|
}
|
|
|
|
if ($this->showsearch) {
|
|
echo '</ul></li>';
|
|
}
|
|
return $s_count;
|
|
}
|
|
|
|
function findTestFiles($dir) {
|
|
if ($this->showsearch) {
|
|
echo '<p>Searching folder: ' . realpath($dir) . '</p><ul>';
|
|
}
|
|
$path = $dir;
|
|
$count = $this->_recurseFolders($path);
|
|
if ($count <= 0) {
|
|
$this->addTestCase(new BadAutoGroupTest($path, 'Search complete. No unit test files found'));
|
|
} else {
|
|
$this->addTestCase(new AutoGroupTestNotice($path, 'Search complete. Total unit test files found: '. $count));
|
|
}
|
|
if ($this->showsearch) {
|
|
echo '</ul>';
|
|
}
|
|
return $count;
|
|
}
|
|
|
|
function addTestFile($file, $internalcall = false) {
|
|
if ($this->showsearch) {
|
|
if ($internalcall) {
|
|
echo '<li><b>' . basename($file) . '</b></li>';
|
|
} else {
|
|
echo '<p>Adding test file: ' . realpath($file) . '</p>';
|
|
}
|
|
// 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 { }
|