--- a/lib/Protobuf-PHP/tests/Protobuf.Codec.Xml.spec.php
+++ b/lib/Protobuf-PHP/tests/Protobuf.Codec.Xml.spec.php
@@ -1,1 +1,178 @@
+string = 'FOO';
+ $simple->int32 = 1000;
+ $xml = Protobuf::encode($simple);
+ $sxe = simplexml_load_string($xml);
+ $sxe->string should eq "FOO";
+ $sxe->int32 should eq 1000;
+ end.
+
+ it. "a message with repeated fields"
+
+ $repeated = new \Tests\Repeated();
+ $repeated->addString('one');
+ $repeated->addString('two');
+ $repeated->addString('three');
+ $xml = Protobuf::encode($repeated);
+ $xml = simplexml_load_string($xml);
+ $xml->string[0] should eq 'one';
+ $xml->string[1] should eq 'two';
+ $xml->string[2] should eq 'three';
+
+ $repeated = new Tests\Repeated();
+ $repeated->addInt(1);
+ $repeated->addInt(2);
+ $repeated->addInt(3);
+ $xml = Protobuf::encode($repeated);
+ $xml = simplexml_load_string($xml);
+ $xml->int[0] should eq 1;
+ $xml->int[1] should eq 2;
+ $xml->int[2] should eq 3;
+
+ $repeated = new Tests\Repeated();
+ $nested = new Tests\Repeated\Nested();
+ $nested->setId(1);
+ $repeated->addNested($nested);
+ $nested = new Tests\Repeated\Nested();
+ $nested->setId(2);
+ $repeated->addNested($nested);
+ $nested = new Tests\Repeated\Nested();
+ $nested->setId(3);
+ $repeated->addNested($nested);
+ $xml = Protobuf::encode($repeated);
+ $xml = simplexml_load_string($xml);
+ $xml->nested[0]->id should eq 1;
+ $xml->nested[1]->id should eq 2;
+ $xml->nested[2]->id should eq 3;
+ end.
+
+ it. "a complex message"
+
+ $book = new Tests\AddressBook();
+ $person = new Tests\Person();
+ $person->name = 'John Doe';
+ $person->id = 2051;
+ $person->email = 'john.doe@gmail.com';
+ $phone = new Tests\Person\PhoneNumber;
+ $phone->number = '1231231212';
+ $phone->type = Tests\Person\PhoneType::HOME;
+ $person->addPhone($phone);
+ $phone = new Tests\Person\PhoneNumber;
+ $phone->number = '55512321312';
+ $phone->type = Tests\Person\PhoneType::MOBILE;
+ $person->addPhone($phone);
+ $book->addPerson($person);
+
+ $person = new Tests\Person();
+ $person->name = 'Iván Montes';
+ $person->id = 23;
+ $person->email = 'drslump@pollinimini.net';
+ $phone = new Tests\Person\PhoneNumber;
+ $phone->number = '3493123123';
+ $phone->type = Tests\Person\PhoneType::WORK;
+ $person->addPhone($phone);
+ $book->addPerson($person);
+
+ $xml = Protobuf::encode($book);
+ $xml = simplexml_load_string($xml);
+
+ $xml->person[0]->name should eq "John Doe";
+ $xml->person[0]->phone[1]->number should eq "55512321312";
+ $xml->person[1]->id should eq 23;
+ $xml->person[1]->phone[0]->type should eq 2;
+ end.
+ end;
+
+ describe "unserialize"
+
+ it "should unserialize a simple message"
+ $xml = new SimpleXmlElement('');
+ $xml->addChild('string', 'FOO');
+ $xml->addChild('int32', 1000);
+
+ $simple = Protobuf::decode('Tests\Simple', $xml);
+ $simple should be instanceof 'Tests\Simple';
+ $simple->string should equal 'FOO';
+ $simple->int32 should equal 1000;
+ end.
+
+ it "a message with repeated fields"
+
+ $xml = new SimpleXMLElement('');
+ $xml->addChild('string', 'one');
+ $xml->addChild('string', 'two');
+ $xml->addChild('string', 'three');
+
+ $repeated = Protobuf::decode('Tests\Repeated', $xml);
+ $repeated->getString() should eq array('one', 'two', 'three');
+
+ $xml = new SimpleXMLElement('');
+ $xml->addChild('int', 1);
+ $xml->addChild('int', 2);
+ $xml->addChild('int', 3);
+
+ $repeated = Protobuf::decode('Tests\Repeated', $xml);
+ $repeated should be instanceof 'Tests\Repeated';
+ $repeated->getInt() should eq array(1,2,3);
+
+ $xml = new SimpleXMLElement('');
+ $xml->addChild('nested')->addChild('id', 1);
+ $xml->addChild('nested')->addChild('id', 2);
+ $xml->addChild('nested')->addChild('id', 3);
+
+ $repeated = Protobuf::decode('Tests\Repeated', $xml);
+ $repeated should be instanceof 'Tests\Repeated';
+ foreach ($repeated->getNested() as $i=>$nested) {
+ $nested->getId() should eq ($i+1);
+ }
+ end.
+
+ it "a complex message"
+
+ $xml = new SimpleXMLElement('');
+ $p = $xml->addChild('person');
+ $p->addChild('name', 'John Doe');
+ $p->addChild('id', 2051);
+ $p->addChild('email', 'john.doe@gmail.com');
+ $p = $p->addChild('phone');
+ $p->addChild('number', '1231231212');
+ $p->addChild('type', 1);
+ $p = $xml->addChild('person');
+ $p->addChild('name', 'Iván Montes');
+ $p->addChild('id', 23);
+ $p->addChild('email', 'drslump@pollinimini.net');
+ $p = $p->addChild('phone');
+ $p->addChild('number', '3493123123');
+ $p->addChild('type', 2);
+
+ $complex = Protobuf::decode('Tests\AddressBook', $xml->asXML());
+ count($complex->person) should eq 2;
+ $complex->getPerson(0)->name should eq 'John Doe';
+ $complex->getPerson(1)->name should eq 'Iván Montes';
+ $complex->getPerson(1)->getPhone(0)->number should eq '3493123123';
+ end.
+
+ end;
+end;
+