diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php index b9cd243be717cd4898415bcdce82eea024c49ba7..19fe544c00f228673a0ff1f820526f98cf40c0c6 100644 --- a/modules/simpletest/drupal_web_test_case.php +++ b/modules/simpletest/drupal_web_test_case.php @@ -690,6 +690,11 @@ class DrupalWebTestCase extends DrupalTestCase { */ protected $session_id = NULL; + /** + * Whether the files were copied to the test files directory. + */ + protected $generatedTestFiles = FALSE; + /** * Constructor for DrupalWebTestCase. */ @@ -839,13 +844,36 @@ protected function drupalCreateContentType($settings = array()) { * List of files that match filter. */ protected function drupalGetTestFiles($type, $size = NULL) { - $files = array(); + if (empty($this->generatedTestFiles)) { + // Generate binary test files. + $lines = array(64, 1024); + $count = 0; + foreach ($lines as $line) { + simpletest_generate_file('binary-' . $count++, 64, $line, 'binary'); + } + + // Generate text test files. + $lines = array(16, 256, 1024, 2048, 20480); + $count = 0; + foreach ($lines as $line) { + simpletest_generate_file('text-' . $count++, 64, $line); + } + + // Copy other test files from simpletest. + $original = drupal_get_path('module', 'simpletest') . '/files'; + $files = file_scan_directory($original, '/(html|image|javascript|php|sql)-.*/'); + $destination_path = file_directory_path('public'); + foreach ($files as $file) { + file_unmanaged_copy($file->uri, $destination_path); + } + $this->generatedTestFiles = TRUE; + } + + $files = array(); // Make sure type is valid. if (in_array($type, array('binary', 'html', 'image', 'javascript', 'php', 'sql', 'text'))) { - // Use original file directory instead of one created during setUp(). - $path = $this->originalFileDirectory . '/simpletest'; - $files = file_scan_directory($path, '/' . $type . '\-.*/'); + $files = file_scan_directory(file_directory_path('public'), '/' . $type . '\-.*/'); // If size is set then remove any files that are not of that size. if ($size !== NULL) { @@ -1088,6 +1116,7 @@ protected function setUp() { 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); diff --git a/modules/simpletest/simpletest.install b/modules/simpletest/simpletest.install index 802303192559a610cfdaf6a8cd34a08739a8598b..68eb578152f1a261bc2b82dedad74c4c6c97f13c 100644 --- a/modules/simpletest/simpletest.install +++ b/modules/simpletest/simpletest.install @@ -6,97 +6,6 @@ * Install, update and uninstall functions for the simpletest module. */ -/** - * Implements hook_install(). - */ -function simpletest_install() { - // Check for files directory. - $path = 'public://simpletest'; - if (file_prepare_directory($path, FILE_CREATE_DIRECTORY)) { - // Generate binary and text test files. - $generated = FALSE; - if (simpletest_get_file_count($path, 'binary') == 0) { - $lines = array(64, 1024); - foreach ($lines as $line) { - simpletest_generate_file('binary', 64, $line, 'binary'); - } - $generated = TRUE; - } - - if (simpletest_get_file_count($path, 'text') == 0) { - $lines = array(16, 256, 1024, 2048, 20480); - foreach ($lines as $line) { - simpletest_generate_file('text', 64, $line); - } - $generated = TRUE; - } - - // Copy other test files for consistency. - $original = drupal_get_path('module', 'simpletest') . '/files'; - $files = file_scan_directory($original, '/(html|image|javascript|php|sql)-.*/'); - - // If there are more files in SimpleTest's files directory than the site's - // files directory, restore all the files. This situation might occur when - // an errant test deletes one or more files from the site's files - // directory. It serves a convenience to developers so that they can get - // the test files back easily. - if (count($files) > count(file_scan_directory($path, '/(html|image|javascript|php|sql)-.*/'))) { - foreach ($files as $file) { - file_unmanaged_copy($file->uri, $path, FILE_EXISTS_REPLACE); - } - $generated = TRUE; - } - - if ($generated) { - drupal_set_message('Extra test files generated/copied.'); - } - } -} - -/** - * Generate test file. - */ -function simpletest_generate_file($filename, $width, $lines, $type = 'binary-text') { - $size = $width * $lines - $lines; - - // Generate random text - $text = ''; - for ($i = 0; $i < $size; $i++) { - switch ($type) { - case 'text': - $text .= chr(rand(32, 126)); - break; - case 'binary': - $text .= chr(rand(0, 31)); - break; - case 'binary-text': - default: - $text .= rand(0, 1); - break; - } - } - $text = wordwrap($text, $width - 1, "\n", TRUE) . "\n"; // Add \n for symetrical file. - - // Create filename. - $path = file_directory_path() . '/simpletest/'; - $count = simpletest_get_file_count($path, $filename); - file_put_contents($path . $filename . '-' . ($count + 1) . '.txt', $text); -} - -/** - * Get the number of files that have the specified filename base. - */ -function simpletest_get_file_count($directory, $filename) { - $files = scandir($directory); - $count = 0; - foreach ($files as $file) { - if (preg_match('/' . $filename . '.*?/', $file)) { - $count++; - } - } - return $count; -} - /** * Implements hook_uninstall(). */ diff --git a/modules/simpletest/simpletest.module b/modules/simpletest/simpletest.module index 6b7db15ccd892ea0f4156ea05593c1533aa93e1d..b702dc06fb0fded2289ac667f700412c5f01c23c 100644 --- a/modules/simpletest/simpletest.module +++ b/modules/simpletest/simpletest.module @@ -399,6 +399,35 @@ function simpletest_registry_files_alter(&$files, $modules) { } } +/** + * Generate test file. + */ +function simpletest_generate_file($filename, $width, $lines, $type = 'binary-text') { + $size = $width * $lines - $lines; + + // Generate random text + $text = ''; + for ($i = 0; $i < $size; $i++) { + switch ($type) { + case 'text': + $text .= chr(rand(32, 126)); + break; + case 'binary': + $text .= chr(rand(0, 31)); + break; + case 'binary-text': + default: + $text .= rand(0, 1); + break; + } + } + $text = wordwrap($text, $width - 1, "\n", TRUE) . "\n"; // Add \n for symetrical file. + + // Create filename. + file_put_contents(file_directory_path() . '/' . $filename . '.txt', $text); + return $filename; +} + /** * Remove all temporary database tables and directories. */