123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- <?php
- namespace Sabre\VObject;
- use
- Sabre\VObject\Component\VCalendar,
- Sabre\VObject\Component\VCard;
- class ComponentTest extends \PHPUnit_Framework_TestCase {
- function testIterate() {
- $comp = new VCalendar(array(), false);
- $sub = $comp->createComponent('VEVENT');
- $comp->add($sub);
- $sub = $comp->createComponent('VTODO');
- $comp->add($sub);
- $count = 0;
- foreach($comp->children() as $key=>$subcomponent) {
- $count++;
- $this->assertInstanceOf('Sabre\\VObject\\Component',$subcomponent);
- }
- $this->assertEquals(2,$count);
- $this->assertEquals(1,$key);
- }
- function testMagicGet() {
- $comp = new VCalendar(array(), false);
- $sub = $comp->createComponent('VEVENT');
- $comp->add($sub);
- $sub = $comp->createComponent('VTODO');
- $comp->add($sub);
- $event = $comp->vevent;
- $this->assertInstanceOf('Sabre\\VObject\\Component', $event);
- $this->assertEquals('VEVENT', $event->name);
- $this->assertInternalType('null', $comp->vjournal);
- }
- function testMagicGetGroups() {
- $comp = new VCard();
- $sub = $comp->createProperty('GROUP1.EMAIL','1@1.com');
- $comp->add($sub);
- $sub = $comp->createProperty('GROUP2.EMAIL','2@2.com');
- $comp->add($sub);
- $sub = $comp->createProperty('EMAIL','3@3.com');
- $comp->add($sub);
- $emails = $comp->email;
- $this->assertEquals(3, count($emails));
- $email1 = $comp->{"group1.email"};
- $this->assertEquals('EMAIL', $email1[0]->name);
- $this->assertEquals('GROUP1', $email1[0]->group);
- $email3 = $comp->{".email"};
- $this->assertEquals('EMAIL', $email3[0]->name);
- $this->assertEquals(null, $email3[0]->group);
- }
- function testMagicIsset() {
- $comp = new VCalendar();
- $sub = $comp->createComponent('VEVENT');
- $comp->add($sub);
- $sub = $comp->createComponent('VTODO');
- $comp->add($sub);
- $this->assertTrue(isset($comp->vevent));
- $this->assertTrue(isset($comp->vtodo));
- $this->assertFalse(isset($comp->vjournal));
- }
- function testMagicSetScalar() {
- $comp = new VCalendar();
- $comp->myProp = 'myValue';
- $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->MYPROP);
- $this->assertEquals('myValue',(string)$comp->MYPROP);
- }
- function testMagicSetScalarTwice() {
- $comp = new VCalendar(array(), false);
- $comp->myProp = 'myValue';
- $comp->myProp = 'myValue';
- $this->assertEquals(1,count($comp->children()));
- $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->MYPROP);
- $this->assertEquals('myValue',(string)$comp->MYPROP);
- }
- function testMagicSetArray() {
- $comp = new VCalendar();
- $comp->ORG = array('Acme Inc', 'Section 9');
- $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->ORG);
- $this->assertEquals(array('Acme Inc', 'Section 9'),$comp->ORG->getParts());
- }
- function testMagicSetComponent() {
- $comp = new VCalendar();
- // Note that 'myProp' is ignored here.
- $comp->myProp = $comp->createComponent('VEVENT');
- $this->assertEquals(1, count($comp));
- $this->assertEquals('VEVENT',$comp->VEVENT->name);
- }
- function testMagicSetTwice() {
- $comp = new VCalendar(array(), false);
- $comp->VEVENT = $comp->createComponent('VEVENT');
- $comp->VEVENT = $comp->createComponent('VEVENT');
- $this->assertEquals(1, count($comp->children()));
- $this->assertEquals('VEVENT',$comp->VEVENT->name);
- }
- function testArrayAccessGet() {
- $comp = new VCalendar(array(), false);
- $event = $comp->createComponent('VEVENT');
- $event->summary = 'Event 1';
- $comp->add($event);
- $event2 = clone $event;
- $event2->summary = 'Event 2';
- $comp->add($event2);
- $this->assertEquals(2,count($comp->children()));
- $this->assertTrue($comp->vevent[1] instanceof Component);
- $this->assertEquals('Event 2', (string)$comp->vevent[1]->summary);
- }
- function testArrayAccessExists() {
- $comp = new VCalendar();
- $event = $comp->createComponent('VEVENT');
- $event->summary = 'Event 1';
- $comp->add($event);
- $event2 = clone $event;
- $event2->summary = 'Event 2';
- $comp->add($event2);
- $this->assertTrue(isset($comp->vevent[0]));
- $this->assertTrue(isset($comp->vevent[1]));
- }
- /**
- * @expectedException LogicException
- */
- function testArrayAccessSet() {
- $comp = new VCalendar();
- $comp['hey'] = 'hi there';
- }
- /**
- * @expectedException LogicException
- */
- function testArrayAccessUnset() {
- $comp = new VCalendar();
- unset($comp[0]);
- }
- function testAddScalar() {
- $comp = new VCalendar(array(), false);
- $comp->add('myprop','value');
- $this->assertEquals(1, count($comp->children()));
- $bla = $comp->children[0];
- $this->assertTrue($bla instanceof Property);
- $this->assertEquals('MYPROP',$bla->name);
- $this->assertEquals('value',(string)$bla);
- }
- function testAddScalarParams() {
- $comp = new VCalendar(array(), false);
- $comp->add('myprop','value',array('param1'=>'value1'));
- $this->assertEquals(1, count($comp->children()));
- $bla = $comp->children[0];
- $this->assertInstanceOf('Sabre\\VObject\\Property', $bla);
- $this->assertEquals('MYPROP',$bla->name);
- $this->assertEquals('value', (string)$bla);
- $this->assertEquals(1, count($bla->parameters()));
- $this->assertEquals('PARAM1',$bla->parameters['PARAM1']->name);
- $this->assertEquals('value1',$bla->parameters['PARAM1']->getValue());
- }
- function testAddComponent() {
- $comp = new VCalendar(array(), false);
- $comp->add($comp->createComponent('VEVENT'));
- $this->assertEquals(1, count($comp->children()));
- $this->assertEquals('VEVENT',$comp->VEVENT->name);
- }
- function testAddComponentTwice() {
- $comp = new VCalendar(array(), false);
- $comp->add($comp->createComponent('VEVENT'));
- $comp->add($comp->createComponent('VEVENT'));
- $this->assertEquals(2, count($comp->children()));
- $this->assertEquals('VEVENT',$comp->VEVENT->name);
- }
- /**
- * @expectedException InvalidArgumentException
- */
- function testAddArgFail() {
- $comp = new VCalendar();
- $comp->add($comp->createComponent('VEVENT'),'hello');
- }
- /**
- * @expectedException InvalidArgumentException
- */
- function testAddArgFail2() {
- $comp = new VCalendar();
- $comp->add(array());
- }
- function testMagicUnset() {
- $comp = new VCalendar(array(), false);
- $comp->add($comp->createComponent('VEVENT'));
- unset($comp->vevent);
- $this->assertEquals(0, count($comp->children()));
- }
- function testCount() {
- $comp = new VCalendar();
- $this->assertEquals(1,$comp->count());
- }
- function testChildren() {
- $comp = new VCalendar(array(), false);
- // Note that 'myProp' is ignored here.
- $comp->add($comp->createComponent('VEVENT'));
- $comp->add($comp->createComponent('VTODO'));
- $r = $comp->children();
- $this->assertInternalType('array', $r);
- $this->assertEquals(2,count($r));
- }
- function testGetComponents() {
- $comp = new VCalendar();
- $comp->add($comp->createProperty('FOO','BAR'));
- $comp->add($comp->createComponent('VTODO'));
- $r = $comp->getComponents();
- $this->assertInternalType('array', $r);
- $this->assertEquals(1, count($r));
- $this->assertEquals('VTODO', $r[0]->name);
- }
- function testSerialize() {
- $comp = new VCalendar(array(), false);
- $this->assertEquals("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n", $comp->serialize());
- }
- function testSerializeChildren() {
- $comp = new VCalendar(array(), false);
- $event = $comp->add($comp->createComponent('VEVENT'));
- unset($event->DTSTAMP, $event->UID);
- $comp->add($comp->createComponent('VTODO'));
- $str = $comp->serialize();
- $this->assertEquals("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", $str);
- }
- function testSerializeOrderCompAndProp() {
- $comp = new VCalendar(array(), false);
- $comp->add($event = $comp->createComponent('VEVENT'));
- $comp->add('PROP1','BLABLA');
- $comp->add('VERSION','2.0');
- $comp->add($comp->createComponent('VTIMEZONE'));
- unset($event->DTSTAMP, $event->UID);
- $str = $comp->serialize();
- $this->assertEquals("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPROP1:BLABLA\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", $str);
- }
- function testAnotherSerializeOrderProp() {
- $prop4s=array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10');
- $comp = new VCard(array(), false);
- $comp->__set('SOMEPROP','FOO');
- $comp->__set('ANOTHERPROP','FOO');
- $comp->__set('THIRDPROP','FOO');
- foreach ($prop4s as $prop4) {
- $comp->add('PROP4', 'FOO '.$prop4);
- }
- $comp->__set('PROPNUMBERFIVE', 'FOO');
- $comp->__set('PROPNUMBERSIX', 'FOO');
- $comp->__set('PROPNUMBERSEVEN', 'FOO');
- $comp->__set('PROPNUMBEREIGHT', 'FOO');
- $comp->__set('PROPNUMBERNINE', 'FOO');
- $comp->__set('PROPNUMBERTEN', 'FOO');
- $comp->__set('VERSION','2.0');
- $comp->__set('UID', 'FOO');
- $str = $comp->serialize();
- $this->assertEquals("BEGIN:VCARD\r\nVERSION:2.0\r\nSOMEPROP:FOO\r\nANOTHERPROP:FOO\r\nTHIRDPROP:FOO\r\nPROP4:FOO 1\r\nPROP4:FOO 2\r\nPROP4:FOO 3\r\nPROP4:FOO 4\r\nPROP4:FOO 5\r\nPROP4:FOO 6\r\nPROP4:FOO 7\r\nPROP4:FOO 8\r\nPROP4:FOO 9\r\nPROP4:FOO 10\r\nPROPNUMBERFIVE:FOO\r\nPROPNUMBERSIX:FOO\r\nPROPNUMBERSEVEN:FOO\r\nPROPNUMBEREIGHT:FOO\r\nPROPNUMBERNINE:FOO\r\nPROPNUMBERTEN:FOO\r\nUID:FOO\r\nEND:VCARD\r\n", $str);
- }
- function testInstantiateWithChildren() {
- $comp = new VCard(array(
- 'ORG' => array('Acme Inc.', 'Section 9'),
- 'FN' => 'Finn The Human',
- ));
- $this->assertEquals(array('Acme Inc.', 'Section 9'), $comp->ORG->getParts());
- $this->assertEquals('Finn The Human', $comp->FN->getValue());
- }
- function testInstantiateSubComponent() {
- $comp = new VCalendar();
- $event = $comp->createComponent('VEVENT', array(
- $comp->createProperty('UID', '12345'),
- ));
- $comp->add($event);
- $this->assertEquals('12345', $comp->VEVENT->UID->getValue());
- }
- function testRemoveByName() {
- $comp = new VCalendar(array(), false);
- $comp->add('prop1','val1');
- $comp->add('prop2','val2');
- $comp->add('prop2','val2');
- $comp->remove('prop2');
- $this->assertFalse(isset($comp->prop2));
- $this->assertTrue(isset($comp->prop1));
- }
- function testRemoveByObj() {
- $comp = new VCalendar(array(), false);
- $comp->add('prop1','val1');
- $prop = $comp->add('prop2','val2');
- $comp->remove($prop);
- $this->assertFalse(isset($comp->prop2));
- $this->assertTrue(isset($comp->prop1));
- }
- /**
- * @expectedException InvalidArgumentException
- */
- function testRemoveNotFound() {
- $comp = new VCalendar(array(), false);
- $prop = $comp->createProperty('A','B');
- $comp->remove($prop);
- }
- /**
- * @dataProvider ruleData
- */
- function testValidateRules($componentList, $errorCount) {
- $vcard = new Component\VCard();
- $component = new FakeComponent($vcard,'Hi', array(), $defaults = false );
- foreach($componentList as $v) {
- $component->add($v,'Hello.');
- }
- $this->assertEquals($errorCount, count($component->validate()));
- }
- function testValidateRepair() {
- $vcard = new Component\VCard();
- $component = new FakeComponent($vcard,'Hi', array(), $defaults = false );
- $component->validate(Component::REPAIR);
- $this->assertEquals('yow', $component->BAR->getValue());
- }
- function ruleData() {
- return array(
- array(array(), 2),
- array(array('FOO'), 3),
- array(array('BAR'), 1),
- array(array('BAZ'), 1),
- array(array('BAR','BAZ'), 0),
- array(array('BAR','BAZ','ZIM',), 0),
- array(array('BAR','BAZ','ZIM','GIR'), 0),
- array(array('BAR','BAZ','ZIM','GIR','GIR'), 1),
- );
- }
- }
- class FakeComponent extends Component {
- public function getValidationRules() {
- return array(
- 'FOO' => '0',
- 'BAR' => '1',
- 'BAZ' => '+',
- 'ZIM' => '*',
- 'GIR' => '?',
- );
- }
- public function getDefaults() {
- return array(
- 'BAR' => 'yow',
- );
- }
- }
|