diff options
Diffstat (limited to 'modules/simpletest/drupal_unit_test_case.php')
-rw-r--r-- | modules/simpletest/drupal_unit_test_case.php | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/modules/simpletest/drupal_unit_test_case.php b/modules/simpletest/drupal_unit_test_case.php new file mode 100644 index 000000000..7a7807095 --- /dev/null +++ b/modules/simpletest/drupal_unit_test_case.php @@ -0,0 +1,97 @@ +<?php +// $Id$ + +/** + * Test case Drupal unit tests. + */ +class DrupalUnitTestCase extends UnitTestCase { + protected $created_temp_environment = FALSE; + protected $db_prefix_original; + protected $original_file_directory; + + /** + * Retrieve the test information from getInfo(). + * + * @param string $label Name of the test to be used by the SimpleTest library. + */ + function __construct($label = NULL) { + if (!$label) { + if (method_exists($this, 'getInfo')) { + $info = $this->getInfo(); + $label = $info['name']; + } + } + parent::__construct($label); + } + + /** + * Generates a random database prefix and runs the install scripts on the prefixed database. + * 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. + * + * @param ... List modules to enable. + */ + public function setUp() { + parent::setUp(); + } + + /** + * Create a temporary environment for tests to take place in so that changes + * will be reverted and other tests won't be affected. + * + * Generates a random database prefix and runs the install scripts on the prefixed database. + * 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. + */ + protected function createTempEnvironment() { + global $db_prefix, $simpletest_ua_key; + $this->created_temp_environment = TRUE; + if ($simpletest_ua_key) { + $this->db_prefix_original = $db_prefix; + $clean_url_original = variable_get('clean_url', 0); + $db_prefix = 'simpletest'. mt_rand(1000, 1000000); + include_once './includes/install.inc'; + drupal_install_system(); + $modules = array_unique(array_merge(func_get_args(), drupal_verify_profile('default', 'en'))); + drupal_install_modules($modules); + $this->_modules = drupal_map_assoc($modules); + $this->_modules['system'] = 'system'; + $task = 'profile'; + default_profile_tasks($task, ''); + menu_rebuild(); + actions_synchronize(); + _drupal_flush_css_js(); + variable_set('install_profile', 'default'); + variable_set('install_task', 'profile-finished'); + variable_set('clean_url', $clean_url_original); + + // Use temporary files directory with the same prefix as database. + $this->original_file_directory = file_directory_path(); + variable_set('file_directory_path', file_directory_path() .'/'. $db_prefix); + file_check_directory(file_directory_path(), TRUE); // Create the files directory. + } + } + + /** + * Delete created files and temporary files directory, delete the tables created by setUp(), + * and reset the database prefix. + */ + public function tearDown() { + global $db_prefix; + if ($this->created_temp_environment && preg_match('/simpletest\d+/', $db_prefix)) { + // Delete temporary files directory and reset files directory path. + simpletest_clean_temporary_directory(file_directory_path()); + variable_set('file_directory_path', $this->original_file_directory); + + $schema = drupal_get_schema(NULL, TRUE); + $ret = array(); + foreach ($schema as $name => $table) { + db_drop_table($ret, $name); + } + $db_prefix = $this->db_prefix_original; + } + parent::tearDown(); + } +} |