You are here

public function MimeTypeTest::testFileMimeTypeDetection in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/modules/system/src/Tests/File/MimeTypeTest.php \Drupal\system\Tests\File\MimeTypeTest::testFileMimeTypeDetection()

Test mapping of mimetypes from filenames.

File

core/modules/system/src/Tests/File/MimeTypeTest.php, line 27
Contains \Drupal\system\Tests\File\MimeTypeTest.

Class

MimeTypeTest
Tests filename mimetype detection.

Namespace

Drupal\system\Tests\File

Code

public function testFileMimeTypeDetection() {
  $prefix = 'public://';
  $test_case = array(
    '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' => '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,
    )));
  }
}