MediaWiki
REL1_21
|
00001 <?php 00002 class IPTCTest extends MediaWikiTestCase { 00003 public function testRecognizeUtf8() { 00004 // utf-8 is the only one used in practise. 00005 $res = IPTC::getCharset( "\x1b%G" ); 00006 $this->assertEquals( 'UTF-8', $res ); 00007 } 00008 00009 public function testIPTCParseNoCharset88591() { 00010 // basically IPTC for keyword with value of 0xBC which is 1/4 in iso-8859-1 00011 // This data doesn't specify a charset. We're supposed to guess 00012 // (which basically means utf-8 if valid, windows 1252 (iso 8859-1) if not) 00013 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x06\x1c\x02\x19\x00\x01\xBC"; 00014 $res = IPTC::Parse( $iptcData ); 00015 $this->assertEquals( array( '¼' ), $res['Keywords'] ); 00016 } 00017 00018 /* This one contains a sequence that's valid iso 8859-1 but not valid utf8 */ 00019 /* \xC3 = Ã, \xB8 = ¸ */ 00020 public function testIPTCParseNoCharset88591b() { 00021 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x09\x1c\x02\x19\x00\x04\xC3\xC3\xC3\xB8"; 00022 $res = IPTC::Parse( $iptcData ); 00023 $this->assertEquals( array( 'ÃÃø' ), $res['Keywords'] ); 00024 } 00025 00026 /* Same as testIPTCParseNoCharset88591b, but forcing the charset to utf-8. 00027 * What should happen is the first "\xC3\xC3" should be dropped as invalid, 00028 * leaving \xC3\xB8, which is ø 00029 */ 00030 public function testIPTCParseForcedUTFButInvalid() { 00031 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x11\x1c\x02\x19\x00\x04\xC3\xC3\xC3\xB8" 00032 . "\x1c\x01\x5A\x00\x03\x1B\x25\x47"; 00033 $res = IPTC::Parse( $iptcData ); 00034 $this->assertEquals( array( 'ø' ), $res['Keywords'] ); 00035 } 00036 00037 public function testIPTCParseNoCharsetUTF8() { 00038 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x07\x1c\x02\x19\x00\x02¼"; 00039 $res = IPTC::Parse( $iptcData ); 00040 $this->assertEquals( array( '¼' ), $res['Keywords'] ); 00041 } 00042 00043 // Testing something that has 2 values for keyword 00044 public function testIPTCParseMulti() { 00045 $iptcData = /* identifier */ "Photoshop 3.0\08BIM\4\4" 00046 /* length */ . "\0\0\0\0\0\x0D" 00047 . "\x1c\x02\x19" . "\x00\x01" . "\xBC" 00048 . "\x1c\x02\x19" . "\x00\x02" . "\xBC\xBD"; 00049 $res = IPTC::Parse( $iptcData ); 00050 $this->assertEquals( array( '¼', '¼½' ), $res['Keywords'] ); 00051 } 00052 00053 public function testIPTCParseUTF8() { 00054 // This has the magic "\x1c\x01\x5A\x00\x03\x1B\x25\x47" which marks content as UTF8. 00055 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x0F\x1c\x02\x19\x00\x02¼\x1c\x01\x5A\x00\x03\x1B\x25\x47"; 00056 $res = IPTC::Parse( $iptcData ); 00057 $this->assertEquals( array( '¼' ), $res['Keywords'] ); 00058 } 00059 00060 }