function MimeTypeTest::testFileMimeTypeDetection

Same name in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php \Drupal\KernelTests\Core\File\MimeTypeTest::testFileMimeTypeDetection()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php \Drupal\KernelTests\Core\File\MimeTypeTest::testFileMimeTypeDetection()
  3. 11.x core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php \Drupal\KernelTests\Core\File\MimeTypeTest::testFileMimeTypeDetection()

Tests mapping of mimetypes from filenames.

File

core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php, line 22

Class

MimeTypeTest
Tests filename mimetype detection.

Namespace

Drupal\KernelTests\Core\File

Code

public function testFileMimeTypeDetection() : 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',
        'pcf.z' => 'application/octet-stream',
        'jar' => 'application/octet-stream',
        'some.junk' => 'application/octet-stream',
        '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',
    ];
    $guesser = $this->container
        ->get('file.mime_type.guesser');
    // 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);
    }
    // Now test the extension guesser by passing in a custom mapping.
    $mapping = [
        'mimetypes' => [
            0 => 'application/java-archive',
            1 => 'image/jpeg',
        ],
        'extensions' => [
            'jar' => 0,
            'jpg' => 1,
        ],
    ];
    $test_case = [
        'test.jar' => 'application/java-archive',
        'test.jpeg' => NULL,
        'test.jpg' => 'image/jpeg',
        'test.jar.jpg' => 'image/jpeg',
        'test.jpg.jar' => 'application/java-archive',
        'test.pcf.z' => NULL,
        'pcf.z' => NULL,
        'jar' => NULL,
        'some.junk' => NULL,
        'foo.file_test_1' => NULL,
        'foo.file_test_2' => NULL,
        'foo.doc' => NULL,
        'test.ogg' => NULL,
    ];
    $extension_guesser = $this->container
        ->get('file.mime_type.guesser.extension');
    $extension_guesser->setMapping($mapping);
    foreach ($test_case as $input => $expected) {
        $output = $extension_guesser->guessMimeType($input);
        $this->assertSame($expected, $output);
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.