diff --git a/core/core.services.yml b/core/core.services.yml index 10d512169036b0f368cc508ad5f5b405e6b1672d..c4c75937bcb7f481b87c51ea840a62071ebadfc8 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -1168,7 +1168,6 @@ services: alias: plugin.manager.element_info file.mime_type.guesser: class: Drupal\Core\File\MimeType\MimeTypeGuesser - arguments: ['@stream_wrapper_manager'] tags: - { name: service_collector, tag: mime_type_guesser, call: addGuesser } file.mime_type.guesser.extension: @@ -1176,14 +1175,6 @@ services: arguments: ['@module_handler'] tags: - { name: mime_type_guesser } - file.mime_type.guesser.fileinfo: - class: Symfony\Component\HttpFoundation\File\MimeType\FileinfoMimeTypeGuesser - tags: - - { name: mime_type_guesser, priority: 64 } - file.mime_type.guesser.filebinary: - class: Symfony\Component\HttpFoundation\File\MimeType\FileBinaryMimeTypeGuesser - tags: - - { name: mime_type_guesser, priority: 32 } renderer: class: Drupal\Core\Render\Renderer arguments: ['@controller_resolver', '@theme.manager', '@plugin.manager.element_info', '@request_stack', '@cache_factory', '@cache_contexts'] diff --git a/core/includes/file.inc b/core/includes/file.inc index 066f0bd2acbbf8cb2067aad1dd2a41788d33e46c..d47fbc44f054c1930a4ae6311c39b155c1bc9a6e 100644 --- a/core/includes/file.inc +++ b/core/includes/file.inc @@ -1150,6 +1150,32 @@ function file_upload_max_size() { return $max_size; } +/** + * Determines an Internet Media Type or MIME type from a filename. + * + * @param $uri + * A string containing the URI, path, or filename. + * @param $mapping + * An optional map of extensions to their mimetypes, in the form: + * - 'mimetypes': a list of mimetypes, keyed by an identifier, + * - 'extensions': the mapping itself, an associative array in which the key + * is the extension (lowercase) and the value is the mimetype identifier. + * + * @return + * The internet media type registered for the extension or + * application/octet-stream for unknown extensions. + * + * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0. Calls are + * passed on to a new file.mime_type.guesser service, and the $mapping + * parameter is ignored. Use + * \Drupal::service('file.mime_type.guesser')->guess($uri). + * + * @see \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser::guess() + */ +function file_get_mimetype($uri, $mapping = NULL) { + return \Drupal::service('file.mime_type.guesser')->guess($uri); +} + /** * Sets the permissions on a file or directory. * diff --git a/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php b/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php index dda1c4e9312bfb00beb8338d995190c431ced3e9..53712cae10085d35dcf4f0adc87a422040886f13 100644 --- a/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php +++ b/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php @@ -16,12 +16,12 @@ class ExtensionMimeTypeGuesser implements MimeTypeGuesserInterface { /** - * MIME extension mappings. + * Default MIME extension mapping. * * @var array * Array of mimetypes correlated to the extensions that relate to them. */ - protected $mapping = array( + protected $defaultMapping = array( 'mimetypes' => array( 0 => 'application/andrew-inset', 1 => 'application/atom', @@ -864,10 +864,41 @@ class ExtensionMimeTypeGuesser implements MimeTypeGuesserInterface { ), ); + /** + * The MIME types mapping array after going through the module handler. + * + * @var array + */ + protected $mapping; + + /** + * The module handler. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** + * Constructs a new ExtensionMimeTypeGuesser. + * + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. + */ + public function __construct(ModuleHandlerInterface $module_handler) { + $this->moduleHandler = $module_handler; + } + /** * {@inheritdoc} */ public function guess($path) { + if ($this->mapping === NULL) { + $mapping = $this->defaultMapping; + // Allow modules to alter the default mapping. + $this->moduleHandler->alter('file_mimetype_mapping', $mapping); + $this->mapping = $mapping; + } + $extension = ''; $file_parts = explode('.', drupal_basename($path)); @@ -889,4 +920,14 @@ public function guess($path) { return 'application/octet-stream'; } + /** + * Sets the mimetypes/extension mapping to use when guessing mimetype. + * + * @param array|null $mapping + * Passing a NULL mapping will cause guess() to use self::$defaultMapping. + */ + public function setMapping(array $mapping = NULL) { + $this->mapping = $mapping; + } + } diff --git a/core/lib/Drupal/Core/File/MimeType/MimeTypeGuesser.php b/core/lib/Drupal/Core/File/MimeType/MimeTypeGuesser.php index ee3bc7defe1e6b7061aed33a6c4edacaa07ae448..20544638a090e335e9ebab9b0d0c6a48af5d79ea 100644 --- a/core/lib/Drupal/Core/File/MimeType/MimeTypeGuesser.php +++ b/core/lib/Drupal/Core/File/MimeType/MimeTypeGuesser.php @@ -7,7 +7,6 @@ namespace Drupal\Core\File\MimeType; -use Drupal\Core\StreamWrapper\StreamWrapperManager; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser as SymfonyMimeTypeGuesser; use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface; @@ -17,13 +16,6 @@ */ class MimeTypeGuesser implements MimeTypeGuesserInterface { - /** - * The stream wrapper manager. - * - * @var \Drupal\Core\StreamWrapper\StreamWrapperManager - */ - protected $streamWrapperManager; - /** * An array of arrays of registered guessers keyed by priority. * @@ -43,21 +35,11 @@ class MimeTypeGuesser implements MimeTypeGuesserInterface { */ protected $sortedGuessers = NULL; - /** - * Constructs the mime type guesser service. - * - * @param \Drupal\Core\StreamWrapper\StreamWrapperManager $stream_wrapper_manager - * The stream wrapper manager. - */ - public function __construct(StreamWrapperManager $stream_wrapper_manager) { - $this->streamWrapperManager = $stream_wrapper_manager; - } - /** * {@inheritdoc} */ public function guess($path) { - if ($wrapper = $this->streamWrapperManager->getViaUri($path)) { + if ($wrapper = file_stream_wrapper_get_instance_by_uri($path)) { // Get the real path from the stream wrapper. $path = $wrapper->realpath(); } @@ -86,15 +68,9 @@ public function guess($path) { * @return $this */ public function addGuesser(MimeTypeGuesserInterface $guesser, $priority = 0) { - // Only add guessers which are supported. - // @see \Symfony\Component\HttpFoundation\File\MimeType\FileinfoMimeTypeGuesser - // @see \Symfony\Component\HttpFoundation\File\MimeType\FileBinaryMimeTypeGuesser - $supported = method_exists($guesser, 'isSupported') ? $guesser->isSupported() : TRUE; - if ($supported) { - $this->guessers[$priority][] = $guesser; - // Mark sorted guessers for rebuild. - $this->sortedGuessers = NULL; - } + $this->guessers[$priority][] = $guesser; + // Mark sorted guessers for rebuild. + $this->sortedGuessers = NULL; return $this; } diff --git a/core/modules/file/file.module b/core/modules/file/file.module index e572585ddf9516e96a911631cb8ac79b0284a53b..654530165cf340fc246736360864737153198b62 100644 --- a/core/modules/file/file.module +++ b/core/modules/file/file.module @@ -756,7 +756,7 @@ function file_save_upload($form_field_name, $validators = array(), $destination 'uri' => $file_info->getRealPath(), 'filesize' => $file_info->getSize(), ); - $values['filemime'] = \Drupal::service('file.mime_type.guesser')->guess($values['uri']); + $values['filemime'] = file_get_mimetype($values['filename']); $file = entity_create('file', $values); $extensions = ''; diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php index 2dbbf31aa9260750a29b5372906287cc847eab3a..7cf5058b237ae42382bcf044f49a91d63c4d5d88 100644 --- a/core/modules/file/src/Entity/File.php +++ b/core/modules/file/src/Entity/File.php @@ -185,7 +185,7 @@ public static function preCreate(EntityStorageInterface $storage, array &$values // Automatically detect filemime if not set. if (!isset($values['filemime']) && isset($values['uri'])) { - $values['filemime'] = \Drupal::service('file.mime_type.guesser')->guess($values['uri']); + $values['filemime'] = file_get_mimetype($values['uri']); } } diff --git a/core/modules/file/src/Tests/FileManagedUnitTestBase.php b/core/modules/file/src/Tests/FileManagedUnitTestBase.php index d822aeaa60795dbb6e9f4a92cee482fd86dc9b3c..00448c515f6d734aa98fdbb556498dd6017a9201 100644 --- a/core/modules/file/src/Tests/FileManagedUnitTestBase.php +++ b/core/modules/file/src/Tests/FileManagedUnitTestBase.php @@ -151,8 +151,7 @@ function assertSameFile(FileInterface $file1, FileInterface $file2) { * * @param $filepath * Optional string specifying the file path. If none is provided then a - * randomly named file with the extension .txt will be created in the site's - * files directory. + * randomly named file will be created in the site's files directory. * @param $contents * Optional contents to save into the file. If a NULL value is provided an * arbitrary string will be used. @@ -183,8 +182,7 @@ function createFile($filepath = NULL, $contents = NULL, $scheme = NULL) { * * @param string $filepath * Optional string specifying the file path. If none is provided then a - * randomly named file with the extension .txt will be created in the site's - * files directory. + * randomly named file will be created in the site's files directory. * @param string $contents * Optional contents to save into the file. If a NULL value is provided an * arbitrary string will be used. @@ -204,7 +202,7 @@ function createUri($filepath = NULL, $contents = NULL, $scheme = NULL) { if (!isset($scheme)) { $scheme = file_default_scheme(); } - $filepath = $scheme . '://' . $filepath . '.txt'; + $filepath = $scheme . '://' . $filepath; if (!isset($contents)) { $contents = "file_put_contents() doesn't seem to appreciate empty strings so let's put in some data."; diff --git a/core/modules/file/src/Tests/SaveDataTest.php b/core/modules/file/src/Tests/SaveDataTest.php index bf1255fe38ffff65cba17050008d67e9393b26f3..8368e0b33ce1497896d1a2e4591eee3f3ae73f04 100644 --- a/core/modules/file/src/Tests/SaveDataTest.php +++ b/core/modules/file/src/Tests/SaveDataTest.php @@ -25,7 +25,7 @@ function testWithoutFilename() { $this->assertEqual(file_default_scheme(), file_uri_scheme($result->getFileUri()), "File was placed in Drupal's files directory."); $this->assertEqual($result->getFilename(), drupal_basename($result->getFileUri()), "Filename was set to the file's basename."); $this->assertEqual($contents, file_get_contents($result->getFileUri()), 'Contents of the file are correct.'); - $this->assertEqual($result->getMimeType(), 'text/plain', 'A MIME type was set.'); + $this->assertEqual($result->getMimeType(), 'application/octet-stream', 'A MIME type was set.'); $this->assertTrue($result->isPermanent(), "The file's status was set to permanent."); // Check that the correct hooks were called. @@ -74,7 +74,7 @@ function testExistingRename() { $this->assertEqual('public', file_uri_scheme($result->getFileUri()), "File was placed in Drupal's files directory."); $this->assertEqual($result->getFilename(), $existing->getFilename(), 'Filename was set to the basename of the source, rather than that of the renamed file.'); $this->assertEqual($contents, file_get_contents($result->getFileUri()), 'Contents of the file are correct.'); - $this->assertEqual($result->getMimeType(), 'text/plain', 'A MIME type was set.'); + $this->assertEqual($result->getMimeType(), 'application/octet-stream', 'A MIME type was set.'); $this->assertTrue($result->isPermanent(), "The file's status was set to permanent."); // Check that the correct hooks were called. @@ -102,7 +102,7 @@ function testExistingReplace() { $this->assertEqual('public', file_uri_scheme($result->getFileUri()), "File was placed in Drupal's files directory."); $this->assertEqual($result->getFilename(), $existing->getFilename(), 'Filename was set to the basename of the existing file, rather than preserving the original name.'); $this->assertEqual($contents, file_get_contents($result->getFileUri()), 'Contents of the file are correct.'); - $this->assertEqual($result->getMimeType(), 'text/plain', 'A MIME type was set.'); + $this->assertEqual($result->getMimeType(), 'application/octet-stream', 'A MIME type was set.'); $this->assertTrue($result->isPermanent(), "The file's status was set to permanent."); // Check that the correct hooks were called. diff --git a/core/modules/file/tests/file_test/file_test.module b/core/modules/file/tests/file_test/file_test.module index 8c12c563cbb38175d0aa14c14d6b20b7eb3a3ff3..6ee2ecc32170fccdce9c72c0de05012d02377567 100644 --- a/core/modules/file/tests/file_test/file_test.module +++ b/core/modules/file/tests/file_test/file_test.module @@ -283,6 +283,21 @@ function file_test_file_url_alter(&$uri) { } } +/** + * Implements hook_file_mimetype_mapping_alter(). + */ +function file_test_file_mimetype_mapping_alter(&$mapping) { + // Add new mappings. + $mapping['mimetypes']['file_test_mimetype_1'] = 'madeup/file_test_1'; + $mapping['mimetypes']['file_test_mimetype_2'] = 'madeup/file_test_2'; + $mapping['mimetypes']['file_test_mimetype_3'] = 'madeup/doc'; + $mapping['extensions']['file_test_1'] = 'file_test_mimetype_1'; + $mapping['extensions']['file_test_2'] = 'file_test_mimetype_2'; + $mapping['extensions']['file_test_3'] = 'file_test_mimetype_2'; + // Override existing mapping. + $mapping['extensions']['doc'] = 'file_test_mimetype_3'; +} + /** * Helper validator that returns the $errors parameter. */ diff --git a/core/modules/system/file.api.php b/core/modules/system/file.api.php index 21b62b3f78ba9a62022e24dba175aaed603bcf90..a4fd8e4c6106d905173e03c6f39257db31527877 100644 --- a/core/modules/system/file.api.php +++ b/core/modules/system/file.api.php @@ -99,6 +99,30 @@ function hook_file_url_alter(&$uri) { } } +/** + * Alter MIME type mappings used to determine MIME type from a file extension. + * + * Invoked by \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser::guess(). It + * is used to allow modules to add to or modify the default mapping from + * \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser::$defaultMapping. + * + * @param $mapping + * An array of mimetypes correlated to the extensions that relate to them. + * The array has 'mimetypes' and 'extensions' elements, each of which is an + * array. + * + * @see \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser::guess() + * @see \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser::$defaultMapping + */ +function hook_file_mimetype_mapping_alter(&$mapping) { + // Add new MIME type 'drupal/info'. + $mapping['mimetypes']['example_info'] = 'drupal/info'; + // Add new extension '.info.yml' and map it to the 'drupal/info' MIME type. + $mapping['extensions']['info'] = 'example_info'; + // Override existing extension mapping for '.ogg' files. + $mapping['extensions']['ogg'] = 189; +} + /** * Alter archiver information declared by other modules. * diff --git a/core/modules/system/src/Form/ThemeSettingsForm.php b/core/modules/system/src/Form/ThemeSettingsForm.php index 1e40d85848cee6decfaa7e0ffd2db2cb0a7ff5d9..79cf30505d40682c499c143b09efbe745dd10148 100644 --- a/core/modules/system/src/Form/ThemeSettingsForm.php +++ b/core/modules/system/src/Form/ThemeSettingsForm.php @@ -12,7 +12,6 @@ use Drupal\Core\Render\Element; use Drupal\Core\StreamWrapper\PublicStream; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Drupal\Core\Cache\Cache; use Drupal\Core\Config\ConfigFactoryInterface; @@ -45,13 +44,6 @@ class ThemeSettingsForm extends ConfigFormBase { */ protected $editableConfig = []; - /** - * The mime type guesser. - * - * @var \Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface - */ - protected $mimeTypeGuesser; - /** * Constructs a ThemeSettingsForm object. * @@ -61,15 +53,12 @@ class ThemeSettingsForm extends ConfigFormBase { * The module handler instance to use. * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler * The theme handler. - * @param \Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface $mime_type_guesser - * The mime type guesser. */ - public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, MimeTypeGuesserInterface $mime_type_guesser) { + public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler) { parent::__construct($config_factory); $this->moduleHandler = $module_handler; $this->themeHandler = $theme_handler; - $this->mimeTypeGuesser = $mime_type_guesser; } /** @@ -79,8 +68,7 @@ public static function create(ContainerInterface $container) { return new static( $container->get('config.factory'), $container->get('module_handler'), - $container->get('theme_handler'), - $container->get('file.mime_type.guesser') + $container->get('theme_handler') ); } @@ -458,7 +446,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { } if (empty($values['default_favicon']) && !empty($values['favicon_path'])) { - $values['favicon_mimetype'] = $this->mimeTypeGuesser->guess($values['favicon_path']); + $values['favicon_mimetype'] = file_get_mimetype($values['favicon_path']); } } diff --git a/core/modules/system/src/Tests/File/MimeTypeTest.php b/core/modules/system/src/Tests/File/MimeTypeTest.php new file mode 100644 index 0000000000000000000000000000000000000000..f09b60dd845fa325086e72d9b17cca0cdbe871df --- /dev/null +++ b/core/modules/system/src/Tests/File/MimeTypeTest.php @@ -0,0 +1,94 @@ + 'application/java-archive', + 'test.jpeg' => 'image/jpeg', + 'test.JPEG' => 'image/jpeg', + 'test.jpg' => 'image/jpeg', + 'test.jar.jpg' => 'image/jpeg', + 'test.jpg.jar' => 'application/java-archive', + 'test.pcf.Z' => 'application/x-font', + 'pcf.z' => 'application/octet-stream', + 'jar' => 'application/octet-stream', + 'some.junk' => 'application/octet-stream', + 'foo.file_test_1' => 'madeup/file_test_1', + 'foo.file_test_2' => 'madeup/file_test_2', + 'foo.doc' => 'madeup/doc', + 'test.ogg' => 'audio/ogg', + ); + + $guesser = $this->container->get('file.mime_type.guesser'); + // Test using default mappings. + foreach ($test_case as $input => $expected) { + // Test stream [URI]. + $output = $guesser->guess($prefix . $input); + $this->assertIdentical($output, $expected, format_string('Mimetype for %input is %output (expected: %expected).', array('%input' => $input, '%output' => $output, '%expected' => $expected))); + + // Test normal path equivalent + $output = $guesser->guess($input); + $this->assertIdentical($output, $expected, format_string('Mimetype (using default mappings) for %input is %output (expected: %expected).', array('%input' => $input, '%output' => $output, '%expected' => $expected))); + } + + // Now test the extension gusser by passing in a custom mapping. + $mapping = array( + 'mimetypes' => array( + 0 => 'application/java-archive', + 1 => 'image/jpeg', + ), + 'extensions' => array( + 'jar' => 0, + 'jpg' => 1, + ) + ); + + $test_case = array( + 'test.jar' => 'application/java-archive', + 'test.jpeg' => 'application/octet-stream', + 'test.jpg' => 'image/jpeg', + 'test.jar.jpg' => 'image/jpeg', + 'test.jpg.jar' => 'application/java-archive', + 'test.pcf.z' => 'application/octet-stream', + 'pcf.z' => 'application/octet-stream', + 'jar' => 'application/octet-stream', + 'some.junk' => 'application/octet-stream', + 'foo.file_test_1' => 'application/octet-stream', + 'foo.file_test_2' => 'application/octet-stream', + 'foo.doc' => 'application/octet-stream', + 'test.ogg' => 'application/octet-stream', + ); + $extension_guesser = $this->container->get('file.mime_type.guesser.extension'); + $extension_guesser->setMapping($mapping); + + foreach ($test_case as $input => $expected) { + $output = $extension_guesser->guess($input); + $this->assertIdentical($output, $expected, format_string('Mimetype (using passed-in mappings) for %input is %output (expected: %expected).', array('%input' => $input, '%output' => $output, '%expected' => $expected))); + } + } +} diff --git a/core/tests/Drupal/Tests/Core/File/ExtensionMimeTypeGuesserTest.php b/core/tests/Drupal/Tests/Core/File/ExtensionMimeTypeGuesserTest.php deleted file mode 100644 index b1160de29664a3098f576dc3eb4c131333beadce..0000000000000000000000000000000000000000 --- a/core/tests/Drupal/Tests/Core/File/ExtensionMimeTypeGuesserTest.php +++ /dev/null @@ -1,59 +0,0 @@ -assertEquals($mime_type, $guesser->guess($path)); - } - - /** - * Provides data for ExtensionMimeTypeGuesserTest::testGuesser(). - */ - public function guesserDataProvider() { - return [ - ['test.jar', 'application/java-archive'], - ['test.jpeg', 'image/jpeg'], - ['test.JPEG', 'image/jpeg'], - ['test.jpg', 'image/jpeg'], - ['test.jar.jpg', 'image/jpeg'], - ['test.jpg.jar', 'application/java-archive'], - ['test.pcf.Z', 'application/x-font'], - ['pcf.z', 'application/octet-stream'], - ['jar', 'application/octet-stream'], - ['some.junk', 'application/octet-stream'], - ['foo.file_test_1', 'application/octet-stream'], - ['foo.file_test_2', 'application/octet-stream'], - ['foo.doc', 'application/msword'], - ['test.ogg', 'audio/ogg'], - ]; - } - -} - -} -namespace { - if (!function_exists('drupal_basename')) { - function drupal_basename($uri, $suffix = NULL) { - return basename($uri, $suffix); - } - } -} diff --git a/core/tests/Drupal/Tests/Core/File/MimeTypeGuesserTest.php b/core/tests/Drupal/Tests/Core/File/MimeTypeGuesserTest.php index 87729bd59d86bf26f8342b4aa14240d3b69f7f6d..a1bf9c2327cbaab93fe2fc6fcc591d6db3db4c65 100644 --- a/core/tests/Drupal/Tests/Core/File/MimeTypeGuesserTest.php +++ b/core/tests/Drupal/Tests/Core/File/MimeTypeGuesserTest.php @@ -14,39 +14,10 @@ /** * @coversDefaultClass \Drupal\Core\File\MimeType\MimeTypeGuesser - * @group File + * @group DrupalKernel */ class MimeTypeGuesserTest extends UnitTestCase { - /** - * @covers ::guess - * @covers ::addGuesser - * @covers ::sortGuessers - */ - public function testGuess() { - $stream_wrapper_manager = $this->getMockBuilder('Drupal\Core\StreamWrapper\StreamWrapperManager') - ->disableOriginalConstructor() - ->getMock(); - $stream_wrapper_manager->expects($this->any()) - ->method('getViaUri') - ->willReturn(NULL); - $mime_guesser_service = new MimeTypeGuesser($stream_wrapper_manager); - $guesser_1 = $this->getMock('Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface'); - $guesser_1->expects($this->once()) - ->method('guess') - ->with('file.txt') - ->willReturn('text/plain'); - $mime_guesser_service->addGuesser($guesser_1); - $this->assertEquals('text/plain', $mime_guesser_service->guess('file.txt')); - $guesser_2 = $this->getMock('Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface'); - $guesser_2->expects($this->once()) - ->method('guess') - ->with('file.txt') - ->willReturn('text/x-diff'); - $mime_guesser_service->addGuesser($guesser_2, 10); - $this->assertEquals('text/x-diff', $mime_guesser_service->guess('file.txt')); - } - /** * @covers ::registerWithSymfonyGuesser * @@ -62,11 +33,8 @@ public function testSymfonyGuesserRegistration() { if (count($guessers)) { $this->assertNotInstanceOf('Drupal\Core\File\MimeType\MimeTypeGuesser', $guessers[0]); } - $stream_wrapper_manager = $this->getMockBuilder('Drupal\Core\StreamWrapper\StreamWrapperManager') - ->disableOriginalConstructor() - ->getMock(); $container = new ContainerBuilder(); - $container->set('file.mime_type.guesser', new MimeTypeGuesser($stream_wrapper_manager)); + $container->set('file.mime_type.guesser', new MimeTypeGuesser()); MimeTypeGuesser::registerWithSymfonyGuesser($container); $guessers = $this->readAttribute($symfony_guesser, 'guessers'); $this->assertInstanceOf('Drupal\Core\File\MimeType\MimeTypeGuesser', $guessers[0]);