ExifBitmapTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. /**
  3. * @group Media
  4. */
  5. class ExifBitmapTest extends MediaWikiMediaTestCase {
  6. /**
  7. * @var ExifBitmapHandler
  8. */
  9. protected $handler;
  10. protected function setUp() {
  11. parent::setUp();
  12. $this->checkPHPExtension( 'exif' );
  13. $this->setMwGlobals( 'wgShowEXIF', true );
  14. $this->handler = new ExifBitmapHandler;
  15. }
  16. /**
  17. * @covers ExifBitmapHandler::isMetadataValid
  18. */
  19. public function testIsOldBroken() {
  20. $res = $this->handler->isMetadataValid( null, ExifBitmapHandler::OLD_BROKEN_FILE );
  21. $this->assertEquals( ExifBitmapHandler::METADATA_COMPATIBLE, $res );
  22. }
  23. /**
  24. * @covers ExifBitmapHandler::isMetadataValid
  25. */
  26. public function testIsBrokenFile() {
  27. $res = $this->handler->isMetadataValid( null, ExifBitmapHandler::BROKEN_FILE );
  28. $this->assertEquals( ExifBitmapHandler::METADATA_GOOD, $res );
  29. }
  30. /**
  31. * @covers ExifBitmapHandler::isMetadataValid
  32. */
  33. public function testIsInvalid() {
  34. $res = $this->handler->isMetadataValid( null, 'Something Invalid Here.' );
  35. $this->assertEquals( ExifBitmapHandler::METADATA_BAD, $res );
  36. }
  37. /**
  38. * @covers ExifBitmapHandler::isMetadataValid
  39. */
  40. public function testGoodMetadata() {
  41. // phpcs:ignore Generic.Files.LineLength
  42. $meta = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:2;}';
  43. $res = $this->handler->isMetadataValid( null, $meta );
  44. $this->assertEquals( ExifBitmapHandler::METADATA_GOOD, $res );
  45. }
  46. /**
  47. * @covers ExifBitmapHandler::isMetadataValid
  48. */
  49. public function testIsOldGood() {
  50. // phpcs:ignore Generic.Files.LineLength
  51. $meta = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:1;}';
  52. $res = $this->handler->isMetadataValid( null, $meta );
  53. $this->assertEquals( ExifBitmapHandler::METADATA_COMPATIBLE, $res );
  54. }
  55. /**
  56. * Handle metadata from paged tiff handler (gotten via instant commons) gracefully.
  57. * @covers ExifBitmapHandler::isMetadataValid
  58. */
  59. public function testPagedTiffHandledGracefully() {
  60. // phpcs:ignore Generic.Files.LineLength
  61. $meta = 'a:6:{s:9:"page_data";a:1:{i:1;a:5:{s:5:"width";i:643;s:6:"height";i:448;s:5:"alpha";s:4:"true";s:4:"page";i:1;s:6:"pixels";i:288064;}}s:10:"page_count";i:1;s:10:"first_page";i:1;s:9:"last_page";i:1;s:4:"exif";a:9:{s:10:"ImageWidth";i:643;s:11:"ImageLength";i:448;s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:4;s:12:"RowsPerStrip";i:50;s:19:"PlanarConfiguration";i:1;s:22:"MEDIAWIKI_EXIF_VERSION";i:1;}s:21:"TIFF_METADATA_VERSION";s:3:"1.4";}';
  62. $res = $this->handler->isMetadataValid( null, $meta );
  63. $this->assertEquals( ExifBitmapHandler::METADATA_BAD, $res );
  64. }
  65. /**
  66. * @covers ExifBitmapHandler::convertMetadataVersion
  67. */
  68. public function testConvertMetadataLatest() {
  69. $metadata = [
  70. 'foo' => [ 'First', 'Second', '_type' => 'ol' ],
  71. 'MEDIAWIKI_EXIF_VERSION' => 2
  72. ];
  73. $res = $this->handler->convertMetadataVersion( $metadata, 2 );
  74. $this->assertEquals( $metadata, $res );
  75. }
  76. /**
  77. * @covers ExifBitmapHandler::convertMetadataVersion
  78. */
  79. public function testConvertMetadataToOld() {
  80. $metadata = [
  81. 'foo' => [ 'First', 'Second', '_type' => 'ol' ],
  82. 'bar' => [ 'First', 'Second', '_type' => 'ul' ],
  83. 'baz' => [ 'First', 'Second' ],
  84. 'fred' => 'Single',
  85. 'MEDIAWIKI_EXIF_VERSION' => 2,
  86. ];
  87. $expected = [
  88. 'foo' => "\n#First\n#Second",
  89. 'bar' => "\n*First\n*Second",
  90. 'baz' => "\n*First\n*Second",
  91. 'fred' => 'Single',
  92. 'MEDIAWIKI_EXIF_VERSION' => 1,
  93. ];
  94. $res = $this->handler->convertMetadataVersion( $metadata, 1 );
  95. $this->assertEquals( $expected, $res );
  96. }
  97. /**
  98. * @covers ExifBitmapHandler::convertMetadataVersion
  99. */
  100. public function testConvertMetadataSoftware() {
  101. $metadata = [
  102. 'Software' => [ [ 'GIMP', '1.1' ] ],
  103. 'MEDIAWIKI_EXIF_VERSION' => 2,
  104. ];
  105. $expected = [
  106. 'Software' => 'GIMP (Version 1.1)',
  107. 'MEDIAWIKI_EXIF_VERSION' => 1,
  108. ];
  109. $res = $this->handler->convertMetadataVersion( $metadata, 1 );
  110. $this->assertEquals( $expected, $res );
  111. }
  112. /**
  113. * @covers ExifBitmapHandler::convertMetadataVersion
  114. */
  115. public function testConvertMetadataSoftwareNormal() {
  116. $metadata = [
  117. 'Software' => [ "GIMP 1.2", "vim" ],
  118. 'MEDIAWIKI_EXIF_VERSION' => 2,
  119. ];
  120. $expected = [
  121. 'Software' => "\n*GIMP 1.2\n*vim",
  122. 'MEDIAWIKI_EXIF_VERSION' => 1,
  123. ];
  124. $res = $this->handler->convertMetadataVersion( $metadata, 1 );
  125. $this->assertEquals( $expected, $res );
  126. }
  127. }