123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- <?php
- namespace JeroenDesloovere\VCard\tests;
- // required to load
- require_once __DIR__ . '/../vendor/autoload.php';
- /*
- * This file is part of the VCard PHP Class from Jeroen Desloovere.
- *
- * For the full copyright and license information, please view the license
- * file that was distributed with this source code.
- */
- use JeroenDesloovere\VCard\VCard;
- /**
- * This class will test our VCard PHP Class which can generate VCards.
- */
- class VCardTest extends \PHPUnit_Framework_TestCase
- {
- /**
- * @var VCard
- */
- protected $vcard = null;
- /**
- * Data provider for testEmail()
- *
- * @return array
- */
- public function emailDataProvider()
- {
- return [
- [['john@doe.com']],
- [['john@doe.com', 'WORK' => 'john@work.com']],
- [['WORK' => 'john@work.com', 'HOME' => 'john@home.com']],
- [['PREF;WORK' => 'john@work.com', 'HOME' => 'john@home.com']],
- ];
- }
- /**
- * Set up before class
- *
- * @return void
- */
- public function setUp()
- {
- // set timezone
- date_default_timezone_set('Europe/Brussels');
- $this->vcard = new VCard();
- $this->firstName = 'Jeroen';
- $this->lastName = 'Desloovere';
- $this->additional = '&';
- $this->prefix = 'Mister';
- $this->suffix = 'Junior';
-
- $this->emailAddress1 = '';
- $this->emailAddress2 = '';
- $this->firstName2 = 'Ali';
- $this->lastName2 = 'ÖZSÜT';
- $this->firstName3 = 'Garçon';
- $this->lastName3 = 'Jéroèn';
- }
- /**
- * Tear down after class
- */
- public function tearDown()
- {
- $this->vcard = null;
- }
- public function testAddAddress()
- {
- $this->assertEquals($this->vcard, $this->vcard->addAddress(
- '',
- '88th Floor',
- '555 East Flours Street',
- 'Los Angeles',
- 'CA',
- '55555',
- 'USA'
- ));
- $this->assertContains('ADR;WORK;POSTAL;CHARSET=utf-8:;88th Floor;555 East Flours Street;Los Angele', $this->vcard->getOutput());
- // Should fold on row 75, so we should not see the full address.
- $this->assertNotContains('ADR;WORK;POSTAL;CHARSET=utf-8:;88th Floor;555 East Flours Street;Los Angeles;CA;55555;', $this->vcard->getOutput());
- }
- public function testAddBirthday()
- {
- $this->assertEquals($this->vcard, $this->vcard->addBirthday(''));
- }
- public function testAddCompany()
- {
- $this->assertEquals($this->vcard, $this->vcard->addCompany(''));
- }
- public function testAddCategories()
- {
- $this->assertEquals($this->vcard, $this->vcard->addCategories([]));
- }
- public function testAddEmail()
- {
- $this->assertEquals($this->vcard, $this->vcard->addEmail($this->emailAddress1));
- $this->assertEquals($this->vcard, $this->vcard->addEmail($this->emailAddress2));
- $this->assertEquals(2, count($this->vcard->getProperties()));
- }
- public function testAddJobTitle()
- {
- $this->assertEquals($this->vcard, $this->vcard->addJobtitle(''));
- }
- public function testAddRole()
- {
- $this->assertEquals($this->vcard, $this->vcard->addRole(''));
- }
- public function testAddName()
- {
- $this->assertEquals($this->vcard, $this->vcard->addName(''));
- }
- public function testAddNote()
- {
- $this->assertEquals($this->vcard, $this->vcard->addNote(''));
- }
- public function testAddPhoneNumber()
- {
- $this->assertEquals($this->vcard, $this->vcard->addPhoneNumber(''));
- $this->assertEquals($this->vcard, $this->vcard->addPhoneNumber(''));
- $this->assertEquals(2, count($this->vcard->getProperties()));
- }
- public function testAddPhotoWithJpgPhoto()
- {
- $return = $this->vcard->addPhoto(__DIR__ . '/image.jpg', true);
- $this->assertEquals($this->vcard, $return);
- }
- public function testAddPhotoWithRemoteJpgPhoto()
- {
- $return = $this->vcard->addPhoto(
- 'https://raw.githubusercontent.com/jeroendesloovere/vcard/master/tests/image.jpg',
- true
- );
- $this->assertEquals($this->vcard, $return);
- }
- /**
- * Test adding remote empty photo
- *
- * @expectedException Exception
- * @expectedExceptionMessage Returned data is not an image.
- */
- public function testAddPhotoWithRemoteEmptyJpgPhoto()
- {
- $this->vcard->addPhoto(
- 'https://raw.githubusercontent.com/jeroendesloovere/vcard/master/tests/empty.jpg',
- true
- );
- }
- public function testAddPhotoContentWithJpgPhoto()
- {
- $return = $this->vcard->addPhotoContent(file_get_contents(__DIR__ . '/image.jpg'));
- $this->assertEquals($this->vcard, $return);
- }
- /**
- * Test adding empty photo
- *
- * @expectedException Exception
- * @expectedExceptionMessage Returned data is not an image.
- */
- public function testAddPhotoContentWithEmptyContent()
- {
- $this->vcard->addPhotoContent('');
- }
- public function testAddLogoWithJpgImage()
- {
- $return = $this->vcard->addLogo(__DIR__ . '/image.jpg', true);
- $this->assertEquals($this->vcard, $return);
- }
- public function testAddLogoWithJpgImageNoInclude()
- {
- $return = $this->vcard->addLogo(__DIR__ . '/image.jpg', false);
- $this->assertEquals($this->vcard, $return);
- }
- public function testAddLogoContentWithJpgImage()
- {
- $return = $this->vcard->addLogoContent(file_get_contents(__DIR__ . '/image.jpg'));
- $this->assertEquals($this->vcard, $return);
- }
- /**
- * Test adding empty photo
- *
- * @expectedException Exception
- * @expectedExceptionMessage Returned data is not an image.
- */
- public function testAddLogoContentWithEmptyContent()
- {
- $this->vcard->addLogoContent('');
- }
- public function testAddUrl()
- {
- $this->assertEquals($this->vcard, $this->vcard->addUrl('1'));
- $this->assertEquals($this->vcard, $this->vcard->addUrl('2'));
- $this->assertEquals(2, count($this->vcard->getProperties()));
- }
- /**
- * Test adding local photo using an empty file
- *
- * @expectedException Exception
- * @expectedExceptionMessage Returned data is not an image.
- */
- public function testAddPhotoWithEmptyFile()
- {
- $this->vcard->addPhoto(__DIR__ . '/emptyfile', true);
- }
- /**
- * Test adding logo with no value
- *
- * @expectedException Exception
- * @expectedExceptionMessage Returned data is not an image.
- */
- public function testAddLogoWithNoValue()
- {
- $this->vcard->addLogo(__DIR__ . '/emptyfile', true);
- }
- /**
- * Test adding photo with no photo
- *
- * @expectedException Exception
- * @expectedExceptionMessage Returned data is not an image.
- */
- public function testAddPhotoWithNoPhoto()
- {
- $this->vcard->addPhoto(__DIR__ . '/wrongfile', true);
- }
- /**
- * Test adding logo with no image
- *
- * @expectedException Exception
- * @expectedExceptionMessage Returned data is not an image.
- */
- public function testAddLogoWithNoImage()
- {
- $this->vcard->addLogo(__DIR__ . '/wrongfile', true);
- }
- /**
- * Test charset
- */
- public function testCharset()
- {
- $charset = 'ISO-8859-1';
- $this->vcard->setCharset($charset);
- $this->assertEquals($charset, $this->vcard->getCharset());
- }
- /**
- * Test Email
- *
- * @dataProvider emailDataProvider $emails
- */
- public function testEmail($emails = [])
- {
- foreach ($emails as $key => $email) {
- if (is_string($key)) {
- $this->vcard->addEmail($email, $key);
- } else {
- $this->vcard->addEmail($email);
- }
- }
- foreach ($emails as $key => $email) {
- if (is_string($key)) {
- $this->assertContains('EMAIL;INTERNET;' . $key . ':' . $email, $this->vcard->getOutput());
- } else {
- $this->assertContains('EMAIL;INTERNET:' . $email, $this->vcard->getOutput());
- }
- }
- }
- /**
- * Test first name and last name
- */
- public function testFirstNameAndLastName()
- {
- $this->vcard->addName(
- $this->lastName,
- $this->firstName
- );
- $this->assertEquals('jeroen-desloovere', $this->vcard->getFilename());
- }
- /**
- * Test full blown name
- */
- public function testFullBlownName()
- {
- $this->vcard->addName(
- $this->lastName,
- $this->firstName,
- $this->additional,
- $this->prefix,
- $this->suffix
- );
- $this->assertEquals('mister-jeroen-desloovere-junior', $this->vcard->getFilename());
- }
- /**
- * Test multiple birthdays
- *
- * @expectedException Exception
- */
- public function testMultipleBirthdays()
- {
- $this->assertEquals($this->vcard, $this->vcard->addBirthday('1'));
- $this->assertEquals($this->vcard, $this->vcard->addBirthday('2'));
- }
- /**
- * Test multiple categories
- *
- * @expectedException Exception
- */
- public function testMultipleCategories()
- {
- $this->assertEquals($this->vcard, $this->vcard->addCategories(['1']));
- $this->assertEquals($this->vcard, $this->vcard->addCategories(['2']));
- }
- /**
- * Test multiple companies
- *
- * @expectedException Exception
- */
- public function testMultipleCompanies()
- {
- $this->assertEquals($this->vcard, $this->vcard->addCompany('1'));
- $this->assertEquals($this->vcard, $this->vcard->addCompany('2'));
- }
- /**
- * Test multiple job titles
- *
- * @expectedException Exception
- */
- public function testMultipleJobtitles()
- {
- $this->assertEquals($this->vcard, $this->vcard->addJobtitle('1'));
- $this->assertEquals($this->vcard, $this->vcard->addJobtitle('2'));
- }
- /**
- * Test multiple roles
- *
- * @expectedException Exception
- */
- public function testMultipleRoles()
- {
- $this->assertEquals($this->vcard, $this->vcard->addRole('1'));
- $this->assertEquals($this->vcard, $this->vcard->addRole('2'));
- }
- /**
- * Test multiple names
- *
- * @expectedException Exception
- */
- public function testMultipleNames()
- {
- $this->assertEquals($this->vcard, $this->vcard->addName('1'));
- $this->assertEquals($this->vcard, $this->vcard->addName('2'));
- }
- /**
- * Test multiple notes
- *
- * @expectedException Exception
- */
- public function testMultipleNotes()
- {
- $this->assertEquals($this->vcard, $this->vcard->addNote('1'));
- $this->assertEquals($this->vcard, $this->vcard->addNote('2'));
- }
- /**
- * Test special first name and last name
- */
- public function testSpecialFirstNameAndLastName()
- {
- $this->vcard->addName(
- $this->lastName2,
- $this->firstName2
- );
- $this->assertEquals('ali-ozsut', $this->vcard->getFilename());
- }
- /**
- * Test special first name and last name
- */
- public function testSpecialFirstNameAndLastName2()
- {
- $this->vcard->addName(
- $this->lastName3,
- $this->firstName3
- );
- $this->assertEquals('garcon-jeroen', $this->vcard->getFilename());
- }
- /**
- * Test multiple labels
- */
- public function testMultipleLabels()
- {
- $this->assertSame($this->vcard, $this->vcard->addLabel('My label'));
- $this->assertSame($this->vcard, $this->vcard->addLabel('My work label', 'WORK'));
- $this->assertSame(2, count($this->vcard->getProperties()));
- $this->assertContains('LABEL:My label', $this->vcard->getOutput());
- $this->assertContains('LABEL;WORK:My work label', $this->vcard->getOutput());
- }
- public function testChunkSplitUnicode()
- {
- $class_handler = new \ReflectionClass('JeroenDesloovere\VCard\VCard');
- $method_handler = $class_handler->getMethod('chunk_split_unicode');
- $method_handler->setAccessible(true);
- $ascii_input="Lorem ipsum dolor sit amet,";
- $ascii_output = $method_handler->invokeArgs(new VCard(), [$ascii_input,10,'|']);
- $unicode_input='Τη γλώσσα μου έδωσαν ελληνική το σπίτι φτωχικό στις αμμουδιές του Ομήρου.';
- $unicode_output = $method_handler->invokeArgs(new VCard(), [$unicode_input,10,'|']);
- $this->assertEquals(
- "Lorem ipsu|m dolor si|t amet,|",
- $ascii_output);
- $this->assertEquals(
- "Τη γλώσσα |μου έδωσαν| ελληνική |το σπίτι φ|τωχικό στι|ς αμμουδιέ|ς του Ομήρ|ου.|",
- $unicode_output);
- }
- }
|