summaryrefslogtreecommitdiff
path: root/modules/simpletest/tests/file.test
diff options
context:
space:
mode:
Diffstat (limited to 'modules/simpletest/tests/file.test')
-rw-r--r--modules/simpletest/tests/file.test66
1 files changed, 66 insertions, 0 deletions
diff --git a/modules/simpletest/tests/file.test b/modules/simpletest/tests/file.test
index 46931e69b..cf7c8f1ca 100644
--- a/modules/simpletest/tests/file.test
+++ b/modules/simpletest/tests/file.test
@@ -1888,6 +1888,8 @@ class FileDownloadTest extends FileTestCase {
function setUp() {
parent::setUp('file_test');
+ // Clear out any hook calls.
+ file_test_reset();
}
/**
@@ -1937,6 +1939,70 @@ class FileDownloadTest extends FileTestCase {
$this->drupalHead($url);
$this->assertResponse(404, t('Correctly returned 404 response for a non-existent file.'));
}
+
+ /**
+ * Test file_create_url().
+ */
+ function testFileCreateUrl() {
+ global $base_url;
+
+ $basename = " -._~!$'\"()*@[]?&+%#,;=:\n\x00" . // "Special" ASCII characters.
+ "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
+ "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets.
+ $basename_encoded = '%20-._%7E%21%24%27%22%28%29%2A%40%5B%5D%3F%26%2B%25%23%2C%3B%3D%3A__' .
+ '%2523%2525%2526%252B%252F%253F' .
+ '%C3%A9%C3%B8%C3%AF%D0%B2%CE%B2%E4%B8%AD%E5%9C%8B%E6%9B%B8%DB%9E';
+
+ $this->checkUrl('public', '', $basename, $base_url . '/' . file_directory_path() . '/' . $basename_encoded);
+ $this->checkUrl('private', '', $basename, $base_url . '/system/files/' . $basename_encoded);
+ $this->checkUrl('private', '', $basename, $base_url . '/?q=system/files/' . $basename_encoded, '0');
+ }
+
+ /**
+ * Download a file from the URL generated by file_create_url().
+ *
+ * Create a file with the specified scheme, directory and filename; check that
+ * the URL generated by file_create_url() for the specified file equals the
+ * specified URL; fetch the URL and then compare the contents to the file.
+ *
+ * @param $scheme
+ * A scheme, e.g. "public"
+ * @param $directory
+ * A directory, possibly ""
+ * @param $filename
+ * A filename
+ * @param $expected_url
+ * The expected URL
+ * @param $clean_url
+ * The value of the clean_url setting
+ */
+ private function checkUrl($scheme, $directory, $filename, $expected_url, $clean_url = '1') {
+ variable_set('clean_url', $clean_url);
+
+ // Convert $filename to a valid filename, i.e. strip characters not
+ // supported by the filesystem, and create the file in the specified
+ // directory.
+ $filepath = file_create_filename($filename, $directory);
+ $directory_uri = $scheme . '://' . dirname($filepath);
+ file_prepare_directory($directory_uri, FILE_CREATE_DIRECTORY);
+ $file = $this->createFile($filepath, NULL, $scheme);
+
+ $url = file_create_url($file->uri);
+ $this->assertEqual($url, $expected_url, t('Generated URL matches expected URL.'));
+
+ if ($scheme == 'private') {
+ // Tell the implementation of hook_file_download() in file_test.module
+ // that this file may be downloaded.
+ file_test_set_return('download', array('x-foo' => 'Bar'));
+ }
+
+ $this->drupalGet($url);
+ if ($this->assertResponse(200) == 'pass') {
+ $this->assertRaw(file_get_contents($file->uri), t('Contents of the file are correct.'));
+ }
+
+ file_delete($file);
+ }
}
/**