ExtensionMimeTypeGuesserLegacyTest.php
Namespace
Drupal\KernelTests\Core\File\MimeTypeFile
-
core/
tests/ Drupal/ KernelTests/ Core/ File/ MimeType/ ExtensionMimeTypeGuesserLegacyTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\KernelTests\Core\File\MimeType;
use Drupal\KernelTests\KernelTestBase;
// cspell:ignore garply tarz
/**
* Tests filename mimetype detection.
*
* Installing the 'file_deprecated_test' module allows the legacy hook
* file_deprecated_test_file_mimetype_mapping_alter to execute and add some
* mappings. We check here that they are.
*
* @group File
* @group legacy
* @coversDefaultClass \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser
*/
class ExtensionMimeTypeGuesserLegacyTest extends KernelTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'file_deprecated_test',
'file_test',
];
/**
* Tests mapping of mimetypes from filenames.
*
* @covers ::guessMimeType
*/
public function testGuessMimeType() : void {
$prefixes = [
'public://',
'private://',
'temporary://',
'dummy-remote://',
];
$test_case = [
'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',
'test.garply.waldo' => 'application/x-garply-waldo',
'pcf.z' => 'application/x-compress',
'jar' => NULL,
'garply.waldo' => NULL,
'some.junk' => NULL,
// Mime type added by file_test_mimetype_alter()
'foo.file_test_1' => 'made_up/file_test_1',
'foo.file_test_2' => 'made_up/file_test_2',
'foo.doc' => 'made_up/doc',
'test.ogg' => 'audio/ogg',
'foobar.z' => 'application/x-compress',
'foobar.tar' => 'application/x-tar',
'foobar.tar.z' => 'application/x-tarz',
'foobar.0.zip' => 'application/zip',
'foobar..zip' => 'application/zip',
];
$this->expectDeprecation('The deprecated alter hook hook_file_mimetype_mapping_alter() is implemented in these locations: file_deprecated_test_file_mimetype_mapping_alter. This hook is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. Implement a \\Drupal\\Core\\File\\Event\\MimeTypeMapLoadedEvent listener instead. See https://www.drupal.org/node/3494040');
/** @var \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser $guesser */
$guesser = \Drupal::service('file.mime_type.guesser.extension');
// Test using default mappings.
foreach ($test_case as $input => $expected) {
// Test stream [URI].
foreach ($prefixes as $prefix) {
$output = $guesser->guessMimeType($prefix . $input);
$this->assertSame($expected, $output);
}
// Test normal path equivalent.
$output = $guesser->guessMimeType($input);
$this->assertSame($expected, $output);
}
}
/**
* Tests mapping of mimetypes from filenames.
*
* @covers ::guessMimeType
* @covers ::setMapping
*/
public function testFileMimeTypeDetectionCustomMapping() : void {
/** @var \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser $extension_guesser */
$extension_guesser = \Drupal::service('file.mime_type.guesser.extension');
// Pass in a custom mapping.
$mapping = [
'mimetypes' => [
0 => 'application/java-archive',
1 => 'image/jpeg',
],
'extensions' => [
'jar' => 0,
'jpg' => 1,
],
];
$this->expectDeprecation('Drupal\\Core\\File\\MimeType\\ExtensionMimeTypeGuesser::setMapping() is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. Use \\Drupal\\Core\\File\\MimeType\\MimeTypeMapInterface::addMapping() instead or define your own MimeTypeMapInterface implementation. See https://www.drupal.org/node/3494040');
$extension_guesser->setMapping($mapping);
$test_case = [
'test.jar' => 'application/java-archive',
'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',
'test.garply.waldo' => 'application/x-garply-waldo',
'pcf.z' => 'application/x-compress',
'jar' => NULL,
'garply.waldo' => NULL,
'some.junk' => NULL,
'foo.file_test_1' => 'made_up/file_test_1',
'foo.file_test_2' => 'made_up/file_test_2',
'foo.doc' => 'made_up/doc',
'test.ogg' => 'audio/ogg',
'foobar.z' => 'application/x-compress',
'foobar.tar' => 'application/x-tar',
'foobar.tar.z' => 'application/x-tarz',
];
foreach ($test_case as $input => $expected) {
$output = $extension_guesser->guessMimeType($input);
$this->assertSame($expected, $output, 'Failed for extension ' . $input);
}
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
ExtensionMimeTypeGuesserLegacyTest | Tests filename mimetype detection. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.