wiki.techinc.nl/tests/phpunit/includes/media/BitmapMetadataHandlerTest.php
umherirrender 99159fd750 wfTimestamp should not die on bogus input [Regression]
Followup I68eb9f27

No caller of wfTimestamp can handle the exception, false is always used,
as the method comment says.

See bug 40037 for File related timestamps.
The api result is also not b/c:
<api servedby="mw70">
  <error code="internal_api_error_TimestampException" info="Exception
Caught: MWTimestamp::setTimestamp : Invalid timestamp - te"
xml:space="preserve" />
</api>

Change-Id: I1e8c785941d35678f3d12824bdde0ce245572592
2012-09-14 18:28:22 +02:00

146 lines
4.5 KiB
PHP

<?php
class BitmapMetadataHandlerTest extends MediaWikiTestCase {
public function setUp() {
$this->filePath = __DIR__ . '/../../data/media/';
}
/**
* Test if having conflicting metadata values from different
* types of metadata, that the right one takes precedence.
*
* Basically the file has IPTC and XMP metadata, the
* IPTC should override the XMP, except for the multilingual
* translation (to en) where XMP should win.
*/
public function testMultilingualCascade() {
if ( !wfDl( 'exif' ) ) {
$this->markTestSkipped( "This test needs the exif extension." );
}
if ( !wfDl( 'xml' ) ) {
$this->markTestSkipped( "This test needs the xml extension." );
}
global $wgShowEXIF;
$oldExif = $wgShowEXIF;
$wgShowEXIF = true;
$meta = BitmapMetadataHandler::Jpeg( $this->filePath .
'/Xmp-exif-multilingual_test.jpg' );
$expected = array(
'x-default' => 'right(iptc)',
'en' => 'right translation',
'_type' => 'lang'
);
$this->assertArrayHasKey( 'ImageDescription', $meta,
'Did not extract any ImageDescription info?!' );
$this->assertEquals( $expected, $meta['ImageDescription'] );
$wgShowEXIF = $oldExif;
}
/**
* Test for jpeg comments are being handled by
* BitmapMetadataHandler correctly.
*
* There's more extensive tests of comment extraction in
* JpegMetadataExtractorTests.php
*/
public function testJpegComment() {
$meta = BitmapMetadataHandler::Jpeg( $this->filePath .
'jpeg-comment-utf.jpg' );
$this->assertEquals( 'UTF-8 JPEG Comment — ¼',
$meta['JPEGFileComment'][0] );
}
/**
* Make sure a bad iptc block doesn't stop the other metadata
* from being extracted.
*/
public function testBadIPTC() {
$meta = BitmapMetadataHandler::Jpeg( $this->filePath .
'iptc-invalid-psir.jpg' );
$this->assertEquals( 'Created with GIMP', $meta['JPEGFileComment'][0] );
}
public function testIPTCDates() {
$meta = BitmapMetadataHandler::Jpeg( $this->filePath .
'iptc-timetest.jpg' );
$this->assertEquals( '2020:07:14 01:36:05', $meta['DateTimeDigitized'] );
$this->assertEquals( '1997:03:02 00:01:02', $meta['DateTimeOriginal'] );
}
/**
* File has an invalid time (+ one valid but really weird time)
* that shouldn't be included
*/
public function testIPTCDatesInvalid() {
$meta = BitmapMetadataHandler::Jpeg( $this->filePath .
'iptc-timetest-invalid.jpg' );
$this->assertEquals( '1845:03:02 00:01:02', $meta['DateTimeOriginal'] );
$this->assertFalse( isset( $meta['DateTimeDigitized'] ) );
}
/**
* XMP data should take priority over iptc data
* when hash has been updated, but not when
* the hash is wrong.
*/
public function testMerging() {
$merger = new BitmapMetadataHandler();
$merger->addMetadata( array( 'foo' => 'xmp' ), 'xmp-general' );
$merger->addMetadata( array( 'bar' => 'xmp' ), 'xmp-general' );
$merger->addMetadata( array( 'baz' => 'xmp' ), 'xmp-general' );
$merger->addMetadata( array( 'fred' => 'xmp' ), 'xmp-general' );
$merger->addMetadata( array( 'foo' => 'iptc (hash)' ), 'iptc-good-hash' );
$merger->addMetadata( array( 'bar' => 'iptc (bad hash)' ), 'iptc-bad-hash' );
$merger->addMetadata( array( 'baz' => 'iptc (bad hash)' ), 'iptc-bad-hash' );
$merger->addMetadata( array( 'fred' => 'iptc (no hash)' ), 'iptc-no-hash' );
$merger->addMetadata( array( 'baz' => 'exif' ), 'exif' );
$actual = $merger->getMetadataArray();
$expected = array(
'foo' => 'xmp',
'bar' => 'iptc (bad hash)',
'baz' => 'exif',
'fred' => 'xmp',
);
$this->assertEquals( $expected, $actual );
}
public function testPNGXMP() {
if ( !wfDl( 'xml' ) ) {
$this->markTestSkipped( "This test needs the xml extension." );
}
$handler = new BitmapMetadataHandler();
$result = $handler->png( $this->filePath . 'xmp.png' );
$expected = array (
'frameCount' => 0,
'loopCount' => 1,
'duration' => 0,
'bitDepth' => 1,
'colorType' => 'index-coloured',
'metadata' => array (
'SerialNumber' => '123456789',
'_MW_PNG_VERSION' => 1,
),
);
$this->assertEquals( $expected, $result );
}
public function testPNGNative() {
$handler = new BitmapMetadataHandler();
$result = $handler->png( $this->filePath . 'Png-native-test.png' );
$expected = 'http://example.com/url';
$this->assertEquals( $expected, $result['metadata']['Identifier']['x-default'] );
}
public function testTiffByteOrder() {
$handler = new BitmapMetadataHandler();
$res = $handler->getTiffByteOrder( $this->filePath . 'test.tiff' );
$this->assertEquals( 'LE', $res );
}
}