You are here

protected function DrupalWebTestCase::setUp in SimpleTest 7.2

Same name and namespace in other branches
  1. 6.2 drupal_web_test_case.php \DrupalWebTestCase::setUp()
  2. 7 drupal_web_test_case.php \DrupalWebTestCase::setUp()

Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix. A temporary files directory is created with the same name as the database prefix.

Parameters

...: List of modules to enable for the duration of the test. This can be either a single array or a variable number of string arguments.

3 calls to DrupalWebTestCase::setUp()
SimpleTestFolderTestCase::setUp in ./simpletest.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
SimpleTestFunctionalTest::setUp in ./simpletest.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
SimpleTestURLTestCase::setUp in ./simpletest.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
4 methods override DrupalWebTestCase::setUp()
DrupalRemoteTestCase::setUp in ./drupal_web_test_case.php
Determine when to run against remote environment.
SimpleTestFolderTestCase::setUp in ./simpletest.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
SimpleTestFunctionalTest::setUp in ./simpletest.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
SimpleTestURLTestCase::setUp in ./simpletest.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…

File

./drupal_web_test_case.php, line 1236
Provides DrupalTestCase, DrupalUnitTestCase, and DrupalWebTestCase classes.

Class

DrupalWebTestCase
Test case for typical Drupal tests.

Code

protected function setUp() {
  global $user, $language, $conf;

  // Generate a temporary prefixed database to ensure that tests have a clean starting point.
  $this->databasePrefix = 'simpletest' . mt_rand(1000, 1000000);
  db_update('simpletest_test_id')
    ->fields(array(
    'last_prefix' => $this->databasePrefix,
  ))
    ->condition('test_id', $this->testId)
    ->execute();

  // Clone the current connection and replace the current prefix.
  $connection_info = Database::getConnectionInfo('default');
  Database::renameConnection('default', 'simpletest_original_default');
  foreach ($connection_info as $target => $value) {
    $connection_info[$target]['prefix'] = array(
      'default' => $value['prefix']['default'] . $this->databasePrefix,
    );
  }
  Database::addConnectionInfo('default', 'default', $connection_info['default']);

  // Store necessary current values before switching to prefixed database.
  $this->originalLanguage = $language;
  $this->originalLanguageDefault = variable_get('language_default');
  $this->originalFileDirectory = variable_get('file_public_path', conf_path() . '/files');
  $this->originalProfile = drupal_get_profile();
  $this->removeTables = variable_get('simpletest_remove_tables', TRUE);
  $clean_url_original = variable_get('clean_url', 0);

  // Save and clean shutdown callbacks array because it static cached and
  // will be changed by the test run. If we don't, then it will contain
  // callbacks from both environments. So testing environment will try
  // to call handlers from original environment.
  $callbacks =& drupal_register_shutdown_function();
  $this->originalShutdownCallbacks = $callbacks;
  $callbacks = array();

  // Create test directory ahead of installation so fatal errors and debug
  // information can be logged during installation process.
  // Use temporary files directory with the same prefix as the database.
  $public_files_directory = $this->originalFileDirectory . '/simpletest/' . substr($this->databasePrefix, 10);
  $private_files_directory = $public_files_directory . '/private';
  $temp_files_directory = $private_files_directory . '/temp';

  // Create the directories
  file_prepare_directory($public_files_directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
  file_prepare_directory($private_files_directory, FILE_CREATE_DIRECTORY);
  file_prepare_directory($temp_files_directory, FILE_CREATE_DIRECTORY);
  $this->generatedTestFiles = FALSE;

  // Log fatal errors.
  ini_set('log_errors', 1);
  ini_set('error_log', $public_files_directory . '/error.log');

  // Reset all statics and variables to perform tests in a clean environment.
  $conf = array();
  drupal_static_reset();

  // Set the test information for use in other parts of Drupal.
  $test_info =& $GLOBALS['drupal_test_info'];
  $test_info['test_run_id'] = $this->databasePrefix;
  $test_info['in_child_site'] = FALSE;
  $this
    ->setUpInstall(func_get_args(), $public_files_directory, $private_files_directory, $temp_files_directory);

  // Rebuild caches.
  drupal_static_reset();
  drupal_flush_all_caches();

  // Register actions declared by any modules.
  actions_synchronize();

  // Reload global $conf array and permissions.
  $this
    ->refreshVariables();
  $this
    ->checkPermissions(array(), TRUE);

  // Reset statically cached schema for new database prefix.
  drupal_get_schema(NULL, TRUE);

  // Run cron once in that environment, as install.php does at the end of
  // the installation process.
  drupal_cron_run();

  // Log in with a clean $user.
  $this->originalUser = $user;
  drupal_save_session(FALSE);
  $user = user_load(1);
  $this
    ->setUpVariables($clean_url_original);

  // Set up English language.
  unset($GLOBALS['conf']['language_default']);
  $language = language_default();

  // Use the test mail class instead of the default mail handler class.
  variable_set('mail_system', array(
    'default-system' => 'TestingMailSystem',
  ));
  drupal_set_time_limit($this->timeLimit);
}