/**
  * Run all tests in this class.
  *
  * Regardless of whether $methods are passed or not, only method names
  * starting with "test" are executed.
  *
  * @param $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())
 {
     $config = config('simpletest.settings');
     // Initialize verbose debugging.
     simpletest_verbose(NULL, config_get('system.core', 'file_public_path'), get_class($this));
     // HTTP auth settings (<username>:<password>) for the simpletest browser
     // when sending requests to the test site.
     $this->httpauth_method = $config->get('simpletest_method');
     $username = $config->get('simpletest_username', NULL);
     $password = $config->get('simpletest_password', NULL);
     if (!empty($username) && !empty($password)) {
         $this->httpauth_credentials = $username . ':' . $password;
     }
     set_error_handler(array($this, 'errorHandler'));
     $class = get_class($this);
     // 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) {
             BackdropTestCase::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 = BackdropTestCase::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.
                 BackdropTestCase::deleteAssert($completion_check_id);
             }
         }
     }
     // Clear out the error messages and restore error handler.
     backdrop_get_messages();
     restore_error_handler();
 }
 /**
  * Run all tests in this class.
  *
  * Regardless of whether $methods are passed or not, only method names
  * starting with "test" are executed.
  *
  * @param $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())
 {
     // Initialize verbose debugging.
     simpletest_verbose(NULL, variable_get('file_public_path', conf_path() . '/files'), get_class($this));
     // HTTP auth settings (<username>:<password>) for the simpletest browser
     // when sending requests to the test site.
     $this->httpauth_method = variable_get('simpletest_httpauth_method', CURLAUTH_BASIC);
     $username = variable_get('simpletest_httpauth_username', NULL);
     $password = variable_get('simpletest_httpauth_password', NULL);
     if ($username && $password) {
         $this->httpauth_credentials = $username . ':' . $password;
     }
     set_error_handler(array($this, 'errorHandler'));
     $class = get_class($this);
     // 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);
     }
     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 = DrupalTestCase::insertAssert($this->testId, $class, FALSE, t('The test did not complete due to a fatal error.'), 'Completion check', $caller);
             $this->setUp();
             try {
                 $this->{$method}();
                 // Finish up.
             } catch (Exception $e) {
                 $this->exceptionHandler($e);
             }
             $this->tearDown();
             // Remove the completion check record.
             DrupalTestCase::deleteAssert($completion_check_id);
         }
     }
     // Clear out the error messages and restore error handler.
     drupal_get_messages();
     restore_error_handler();
 }
 /**
  * Log verbose message in a text file.
  *
  * The a link to the vebose message will be placed in the test results via
  * as a passing assertion with the text '[verbose message]'.
  *
  * @param $message
  *   The verbose message to be stored.
  * @see simpletest_verbose()
  */
 protected function verbose($message)
 {
     if ($id = simpletest_verbose($message)) {
         $this->pass(l(t('Verbose message'), $this->originalFileDirectory . '/simpletest/verbose/' . get_class($this) . '-' . $id . '.html', array('attributes' => array('target' => '_blank'))), 'Debug');
     }
 }
 /**
  * Log verbose message in a text file.
  *
  * The a link to the vebose message will be placed in the test results via
  * as a passing assertion with the text '[verbose message]'.
  *
  * @param $message
  *   The verbose message to be stored.
  * @see simpletest_verbose()
  */
 protected function verbose($message)
 {
     if ($id = simpletest_verbose($message)) {
         $url = file_create_url($this->originalFileDirectory . '/simpletest/verbose/' . get_class($this) . '-' . $id . '.html');
         $this->error(l(t('Verbose message'), $url, array('attributes' => array('target' => '_blank'))), 'User notice');
     }
 }
 /**
  * Log verbose message in a text file.
  *
  * The a link to the vebose message will be placed in the test results via
  * as a passing assertion with the text '[verbose message]'.
  *
  * @param $message
  *   The verbose message to be stored.
  * @see simpletest_verbose()
  */
 protected function verbose($message)
 {
     if ($id = simpletest_verbose($message)) {
         $this->pass(l(t('Verbose message'), url($this->originalFileDirectory . '/simpletest/verbose.html', array('fragment' => $id))), 'Debug');
     }
 }