1<?php
2
3namespace Sabre\VObject\Parser;
4
5use
6    Sabre\VObject\Reader;
7
8class QuotedPrintableTest extends \PHPUnit_Framework_TestCase {
9
10    function testReadQuotedPrintableSimple() {
11
12        $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aach=65n\r\nEND:VCARD";
13
14        $result = Reader::read($data);
15
16        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
17        $this->assertEquals('VCARD', $result->name);
18        $this->assertEquals(1, count($result->children()));
19        $this->assertEquals("Aachen", $this->getPropertyValue($result->LABEL));
20
21    }
22
23    function testReadQuotedPrintableNewlineSoft() {
24
25        $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aa=\r\n ch=\r\n en\r\nEND:VCARD";
26        $result = Reader::read($data);
27
28        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
29        $this->assertEquals('VCARD', $result->name);
30        $this->assertEquals(1, count($result->children()));
31        $this->assertEquals("Aachen", $this->getPropertyValue($result->LABEL));
32
33    }
34
35    function testReadQuotedPrintableNewlineHard() {
36
37        $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aachen=0D=0A=\r\n Germany\r\nEND:VCARD";
38        $result = Reader::read($data);
39
40        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
41        $this->assertEquals('VCARD', $result->name);
42        $this->assertEquals(1, count($result->children()));
43        $this->assertEquals("Aachen\r\nGermany", $this->getPropertyValue($result->LABEL));
44
45
46    }
47
48    function testReadQuotedPrintableCompatibilityMS() {
49
50        $data = "BEGIN:VCARD\r\nLABEL;ENCODING=QUOTED-PRINTABLE:Aachen=0D=0A=\r\nDeutschland:okay\r\nEND:VCARD";
51        $result = Reader::read($data, Reader::OPTION_FORGIVING);
52
53        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
54        $this->assertEquals('VCARD', $result->name);
55        $this->assertEquals(1, count($result->children()));
56        $this->assertEquals("Aachen\r\nDeutschland:okay", $this->getPropertyValue($result->LABEL));
57
58    }
59
60    function testReadQuotesPrintableCompoundValues() {
61
62        $data = <<<VCF
63BEGIN:VCARD
64VERSION:2.1
65N:Doe;John;;;
66FN:John Doe
67ADR;WORK;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;;M=C3=BCnster =
68Str. 1;M=C3=BCnster;;48143;Deutschland
69END:VCARD
70VCF;
71
72        $result = Reader::read($data, Reader::OPTION_FORGIVING);
73        $this->assertEquals([
74            '', '', 'Münster Str. 1', 'Münster', '', '48143', 'Deutschland'
75        ], $result->ADR->getParts());
76
77
78    }
79
80    private function getPropertyValue(\Sabre\VObject\Property $property) {
81
82        return (string)$property;
83
84        /*
85        $param = $property['encoding'];
86        if ($param !== null) {
87            $encoding = strtoupper((string)$param);
88            if ($encoding === 'QUOTED-PRINTABLE') {
89                $value = quoted_printable_decode($value);
90            } else {
91                throw new Exception();
92            }
93        }
94
95        $param = $property['charset'];
96        if ($param !== null) {
97            $charset = strtoupper((string)$param);
98            if ($charset !== 'UTF-8') {
99                $value = mb_convert_encoding($value, 'UTF-8', $charset);
100            }
101        } else {
102            $value = StringUtil::convertToUTF8($value);
103        }
104
105        return $value;
106         */
107    }
108}
109