Run all tests in this class.
Regardless of whether $methods are passed or not, only method names starting with "test" are executed.
$methods: (optional) A list of method names in the test case class to run; e.g., array('testFoo', 'testBar'). By default, all methods of the class are taken into account, but it can be useful to only run a few selected test methods during debugging.
public function run(array $methods = array()) {
TestBundle::$currentTest = $this;
$simpletest_config = config('simpletest.settings');
$class = get_class($this);
if ($simpletest_config
->get('verbose')) {
// Initialize verbose debugging.
$this->verbose = TRUE;
$this->verboseDirectory = variable_get('file_public_path', conf_path() . '/files') . '/simpletest/verbose';
$this->verboseDirectoryUrl = file_create_url($this->verboseDirectory);
if (file_prepare_directory($this->verboseDirectory, FILE_CREATE_DIRECTORY) && !file_exists($this->verboseDirectory . '/.htaccess')) {
file_put_contents($this->verboseDirectory . '/.htaccess', "<IfModule mod_expires.c>\nExpiresActive Off\n</IfModule>\n");
}
$this->verboseClassName = str_replace("\\", "_", $class);
}
// HTTP auth settings (<username>:<password>) for the simpletest browser
// when sending requests to the test site.
$this->httpauth_method = (int) $simpletest_config
->get('httpauth.method');
$username = $simpletest_config
->get('httpauth.username');
$password = $simpletest_config
->get('httpauth.password');
if (!empty($username) && !empty($password)) {
$this->httpauth_credentials = $username . ':' . $password;
}
set_error_handler(array(
$this,
'errorHandler',
));
// Iterate through all the methods in this class, unless a specific list of
// methods to run was passed.
$class_methods = get_class_methods($class);
if ($methods) {
$class_methods = array_intersect($class_methods, $methods);
}
$missing_requirements = $this
->checkRequirements();
if (!empty($missing_requirements)) {
$missing_requirements_object = new ReflectionObject($this);
$caller = array(
'file' => $missing_requirements_object
->getFileName(),
);
foreach ($missing_requirements as $missing_requirement) {
TestBase::insertAssert($this->testId, $class, FALSE, $missing_requirement, 'Requirements check.', $caller);
}
}
else {
foreach ($class_methods as $method) {
// If the current method starts with "test", run it - it's a test.
if (strtolower(substr($method, 0, 4)) == 'test') {
// Insert a fail record. This will be deleted on completion to ensure
// that testing completed.
$method_info = new ReflectionMethod($class, $method);
$caller = array(
'file' => $method_info
->getFileName(),
'line' => $method_info
->getStartLine(),
'function' => $class . '->' . $method . '()',
);
$completion_check_id = TestBase::insertAssert($this->testId, $class, FALSE, t('The test did not complete due to a fatal error.'), 'Completion check', $caller);
$this
->setUp();
if ($this->setup) {
try {
$this
->{$method}();
// Finish up.
} catch (Exception $e) {
$this
->exceptionHandler($e);
}
$this
->tearDown();
}
else {
$this
->fail(t("The test cannot be executed because it has not been set up properly."));
}
// Remove the completion check record.
TestBase::deleteAssert($completion_check_id);
}
}
}
TestBundle::$currentTest = NULL;
// Clear out the error messages and restore error handler.
drupal_get_messages();
restore_error_handler();
}