MediaWiki  REL1_21
IPTCTest.php
Go to the documentation of this file.
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 }