81c1d2878fdee31575ad258b3744f303c367962e
[lhc/web/wiklou.git] / tests / phpunit / includes / media / IPTCTest.php
1 <?php
2
3 class IPTCTest extends MediaWikiTestCase {
4
5 /**
6 * @covers IPTC::getCharset
7 */
8 public function testRecognizeUtf8() {
9 // utf-8 is the only one used in practise.
10 $res = IPTC::getCharset( "\x1b%G" );
11 $this->assertEquals( 'UTF-8', $res );
12 }
13
14 /**
15 * @covers IPTC::Parse
16 */
17 public function testIPTCParseNoCharset88591() {
18 // basically IPTC for keyword with value of 0xBC which is 1/4 in iso-8859-1
19 // This data doesn't specify a charset. We're supposed to guess
20 // (which basically means utf-8 if valid, windows 1252 (iso 8859-1) if not)
21 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x06\x1c\x02\x19\x00\x01\xBC";
22 $res = IPTC::Parse( $iptcData );
23 $this->assertEquals( array( '¼' ), $res['Keywords'] );
24 }
25
26 /**
27 * @covers IPTC::Parse
28 */
29 public function testIPTCParseNoCharset88591b() {
30 /* This one contains a sequence that's valid iso 8859-1 but not valid utf8 */
31 /* \xC3 = Ã, \xB8 = ¸ */
32 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x09\x1c\x02\x19\x00\x04\xC3\xC3\xC3\xB8";
33 $res = IPTC::Parse( $iptcData );
34 $this->assertEquals( array( 'ÃÃø' ), $res['Keywords'] );
35 }
36
37 /**
38 * Same as testIPTCParseNoCharset88591b, but forcing the charset to utf-8.
39 * What should happen is the first "\xC3\xC3" should be dropped as invalid,
40 * leaving \xC3\xB8, which is ø
41 * @covers IPTC::Parse
42 */
43 public function testIPTCParseForcedUTFButInvalid() {
44 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x11\x1c\x02\x19\x00\x04\xC3\xC3\xC3\xB8"
45 . "\x1c\x01\x5A\x00\x03\x1B\x25\x47";
46 $res = IPTC::Parse( $iptcData );
47 $this->assertEquals( array( 'ø' ), $res['Keywords'] );
48 }
49
50 /**
51 * @covers IPTC::Parse
52 */
53 public function testIPTCParseNoCharsetUTF8() {
54 $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x07\x1c\x02\x19\x00\x02¼";
55 $res = IPTC::Parse( $iptcData );
56 $this->assertEquals( array( '¼' ), $res['Keywords'] );
57 }
58
59 /**
60 * Testing something that has 2 values for keyword
61 * @covers IPTC::Parse
62 */
63 public function testIPTCParseMulti() {
64 $iptcData = /* identifier */ "Photoshop 3.0\08BIM\4\4"
65 /* length */ . "\0\0\0\0\0\x0D"
66 . "\x1c\x02\x19" . "\x00\x01" . "\xBC"
67 . "\x1c\x02\x19" . "\x00\x02" . "\xBC\xBD";
68 $res = IPTC::Parse( $iptcData );
69 $this->assertEquals( array( '¼', '¼½' ), $res['Keywords'] );
70 }
71
72 /**
73 * @covers IPTC::Parse
74 */
75 public function testIPTCParseUTF8() {
76 // This has the magic "\x1c\x01\x5A\x00\x03\x1B\x25\x47" which marks content as UTF8.
77 $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";
78 $res = IPTC::Parse( $iptcData );
79 $this->assertEquals( array( '¼' ), $res['Keywords'] );
80 }
81 }