From ced34cb15e095836767971aa4d27b141fb1d7ec9 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Sat, 18 Oct 2014 08:47:54 -0400 Subject: [PATCH] Merge pull request #230 from bytesatwork-xx/master --- tests/Framework/VCard.php | 97 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 96 insertions(+), 1 deletions(-) diff --git a/tests/Framework/VCard.php b/tests/Framework/VCard.php index a830c2c..6eea2c1 100644 --- a/tests/Framework/VCard.php +++ b/tests/Framework/VCard.php @@ -10,7 +10,7 @@ function _srcpath($fn) { - return realpath(dirname(__FILE__) . '/../src/' . $fn); + return realpath(__DIR__ . '/../src/' . $fn); } function test_parse_one() @@ -33,6 +33,71 @@ $this->assertEquals("roundcube@gmail.com", $vcard->email[0], "Use PREF e-mail as primary"); } + /** + * Make sure MOBILE phone is returned as CELL (as specified in standard) + */ + function test_parse_three() + { + $vcard = new rcube_vcard(file_get_contents($this->_srcpath('johndoe.vcf')), null); + + $vcf = $vcard->export(); + $this->assertRegExp('/TEL;CELL:\+987654321/', $vcf, "Return CELL instead of MOBILE (import)"); + + $vcard = new rcube_vcard(); + $vcard->set('phone', '+987654321', 'MOBILE'); + + $vcf = $vcard->export(); + $this->assertRegExp('/TEL;TYPE=CELL:\+987654321/', $vcf, "Return CELL instead of MOBILE (set)"); + } + + /** + * Backslash escaping test (#1488896) + */ + function test_parse_four() + { + $vcard = "BEGIN:VCARD\nVERSION:3.0\nN:last\\;;first\\\\;middle\\\\\\;\\\\;prefix;\nFN:test\nEND:VCARD"; + $vcard = new rcube_vcard($vcard, null); + $vcard = $vcard->get_assoc(); + + $this->assertEquals("last;", $vcard['surname'], "Decode backslash character"); + $this->assertEquals("first\\", $vcard['firstname'], "Decode backslash character"); + $this->assertEquals("middle\\;\\", $vcard['middlename'], "Decode backslash character"); + $this->assertEquals("prefix", $vcard['prefix'], "Decode backslash character"); + } + + /** + * Backslash parsing test (#1489085) + */ + function test_parse_five() + { + $vcard = "BEGIN:VCARD\nVERSION:3.0\nN:last\\\\\\a;fir\\nst\nURL:http\\://domain.tld\nEND:VCARD"; + $vcard = new rcube_vcard($vcard, null); + $vcard = $vcard->get_assoc(); + + $this->assertEquals("last\\a", $vcard['surname'], "Decode dummy backslash character"); + $this->assertEquals("fir\nst", $vcard['firstname'], "Decode backslash character"); + $this->assertEquals("http://domain.tld", $vcard['website:other'][0], "Decode dummy backslash character"); + } + + /** + * Some Apple vCard quirks (#1489993) + */ + function test_parse_six() + { + $vcard = new rcube_vcard("BEGIN:VCARD\n" + . "VERSION:3.0\n" + . "N:;;;;\n" + . "FN:Apple Computer AG\n" + . "ITEM1.ADR;type=WORK;type=pref:;;Birgistrasse 4a;Wallisellen-Zürich;;8304;Switzerland\n" + . "PHOTO;ENCODING=B:aHR0cDovL3Rlc3QuY29t\n" + . "END:VCARD" + ); + + $result = $vcard->get_assoc(); + + $this->assertCount(1, $result['address:work'], "ITEM1.-prefixed entry"); + } + function test_import() { $input = file_get_contents($this->_srcpath('apple.vcf')); @@ -49,6 +114,36 @@ $this->assertEquals("Iksiñski", $vcards2[0]->surname, "Detect charset in encoded values"); } + function test_import_photo_encoding() + { + $input = file_get_contents($this->_srcpath('photo.vcf')); + + $vcards = rcube_vcard::import($input); + $vcard = $vcards[0]->get_assoc(); + + $this->assertCount(1, $vcards, "Detected 1 vcard"); + + // ENCODING=b case (#1488683) + $this->assertEquals("/9j/4AAQSkZJRgABAQA", substr(base64_encode($vcard['photo']), 0, 19), "Photo decoding"); + $this->assertEquals("Müller", $vcard['surname'], "Unicode characters"); + + $input = str_replace('ENCODING=b:', 'ENCODING=base64;jpeg:', $input); + + $vcards = rcube_vcard::import($input); + $vcard = $vcards[0]->get_assoc(); + + // ENCODING=base64 case (#1489977) + $this->assertEquals("/9j/4AAQSkZJRgABAQA", substr(base64_encode($vcard['photo']), 0, 19), "Photo decoding"); + + $input = str_replace('PHOTO;ENCODING=base64;jpeg:', 'PHOTO:data:image/jpeg;base64,', $input); + + $vcards = rcube_vcard::import($input); + $vcard = $vcards[0]->get_assoc(); + + // vcard4.0 "PHOTO:data:image/jpeg;base64," case (#1489977) + $this->assertEquals("/9j/4AAQSkZJRgABAQA", substr(base64_encode($vcard['photo']), 0, 19), "Photo decoding"); + } + function test_encodings() { $input = file_get_contents($this->_srcpath('utf-16_sample.vcf')); -- Gitblit v1.9.1