Index: modules/simpletest/tests/file.test =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v retrieving revision 1.19 diff -u -p -r1.19 file.test --- modules/simpletest/tests/file.test 6 Jan 2009 12:00:40 -0000 1.19 +++ modules/simpletest/tests/file.test 7 Jan 2009 21:12:38 -0000 @@ -1270,3 +1270,120 @@ class FileNameMungingTest extends FileTe } } +/** + * Test the url() function. + * + */ +class FileURLTest extends FileTestCase { + + /** + * Preserve original file system settings. + * + */ + function setUp() { + parent::setUp('file_test'); + $this->file_directory_path = file_directory_path(); + $this->file_downloads = variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC); + } + + function tearDown() { + parent::tearDown(); + variable_set('file_directory_path', $this->file_directory_path); + variable_set('file_downloads', $this->file_downloads); + } + + function getInfo() { + return array( + 'name' => t('File URL creation'), + 'description' => t('Tests the creation of URLs linking to files'), + 'group' => t('File'), + ); + } + + function testPublicFiles() { + variable_set('file_directory_path', $this->file_directory_path); + variable_set('file_downloads', FILE_DOWNLOADS_PUBLIC); + $file = $this->createFile(); + + if (variable_get('clean_url', 0)) { + $this->assertEqual( + $expected = '/' . file_directory_path() . '/' . basename($file->filepath), + $actual = url($file->filepath), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + $this->assertEqual( + $expected = $GLOBALS['base_url'] . '/' . file_directory_path() . '/' . basename($file->filepath), + $actual = url($file->filepath, array('absolute' => TRUE)), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + } + else { + $this->assertEqual( + $expected = '/' . file_directory_path() . '/' . basename($file->filepath), + $actual = url($file->filepath), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + $this->assertEqual( + $expected = $GLOBALS['base_url'] . '/' . file_directory_path() . '/' . basename($file->filepath), + $actual = url($file->filepath, array('absolute' => TRUE)), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + } + } + + function testPrivateFilesInDocroot() { + variable_set('file_directory_path', $this->file_directory_path); + variable_set('file_downloads', FILE_DOWNLOADS_PRIVATE); + $file = $this->createFile(); + $localpath = str_replace($this->file_directory_path . '/', '', $file->filepath); + + if (variable_get('clean_url', 0)) { + $this->assertEqual( + $expected = '/system/files/' . $localpath, + $actual = url($file->filepath), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + $this->assertEqual( + $expected = $GLOBALS['base_url'] . '/system/files/' . $localpath, + $actual = url($file->filepath, array('absolute' => TRUE)), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + } + else { + $script = (strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') === FALSE) ? 'index.php' : ''; + $this->assertEqual( + $expected = "/$script?q=" . 'system/files/' . $localpath, + $actual = url($file->filepath), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + $this->assertEqual( + $expected = $GLOBALS['base_url'] . "/$script?q=" . 'system/files/' . $localpath, + $actual = url($file->filepath, array('absolute' => TRUE)), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + } + } + + function testPrivateFilesOutDocroot() { + // The assumption is that the temp directory is outside the DocumentRoot, exists, and is writeable + variable_set('file_directory_path', file_directory_temp(). '/' . uniqid() . '_files'); + variable_set('file_downloads', FILE_DOWNLOADS_PRIVATE); + mkdir(file_directory_path()); + $file = $this->createFile(); + $localpath = str_replace(variable_get('file_directory_path', '') . '/', '', $file->filepath); + + if (variable_get('clean_url', 0)) { + $this->assertEqual( + $expected = '/system/files/' . $localpath, + $actual = url($file->filepath), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + $this->assertEqual( + $expected = $GLOBALS['base_url'] . '/system/files/' . $localpath, + $actual = url($file->filepath, array('absolute' => TRUE)), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + } + else { + $script = (strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') === FALSE) ? 'index.php' : ''; + $this->assertEqual( + $expected = "/$script?q=" . 'system/files/' . $localpath, + $actual = url($file->filepath), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + $this->assertEqual( + $expected = $GLOBALS['base_url'] . "/$script?q=" . 'system/files/' . $localpath, + $actual = url($file->filepath, array('absolute' => TRUE)), + t('Expected @expected, got @actual', array('@expected' => $expected, '@actual' => $actual))); + } + } +}