* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace JMS\SerializerBundle\Tests\Serializer; use JMS\SerializerBundle\Tests\Fixtures\InvalidUsageOfXmlValue; use JMS\SerializerBundle\Exception\InvalidArgumentException; use JMS\SerializerBundle\Annotation\Type; use JMS\SerializerBundle\Annotation\XmlValue; use JMS\SerializerBundle\Tests\Fixtures\PersonCollection; use JMS\SerializerBundle\Tests\Fixtures\PersonLocation; use JMS\SerializerBundle\Tests\Fixtures\Person; use JMS\SerializerBundle\Tests\Fixtures\ObjectWithVirtualXmlProperties; use JMS\SerializerBundle\Tests\Fixtures\ObjectWithXmlKeyValuePairs; class XmlSerializationTest extends BaseSerializationTest { /** * @expectedException \RuntimeException */ public function testInvalidUsageOfXmlValue() { $obj = new InvalidUsageOfXmlValue(); $this->serialize($obj); } public function testPropertyIsObjectWithAttributeAndValue() { $personCollection = new PersonLocation; $person = new Person; $person->name = 'Matthias Noback'; $person->age = 28; $personCollection->person = $person; $personCollection->location = 'The Netherlands'; $this->assertEquals($this->getContent('person_location'), $this->serialize($personCollection)); } public function testPropertyIsCollectionOfObjectsWithAttributeAndValue() { $personCollection = new PersonCollection; $person = new Person; $person->name = 'Matthias Noback'; $person->age = 28; $personCollection->persons->add($person); $personCollection->location = 'The Netherlands'; $this->assertEquals($this->getContent('person_collection'), $this->serialize($personCollection)); } /** * @expectedException \InvalidArgumentException * @expectedExceptionMessage Document types are not allowed */ public function testExternalEntitiesAreDisabledByDefault() { $this->deserialize(' ]> &foo; ', 'stdClass'); } /** * @expectedException \InvalidArgumentException * @expectedExceptionMessage Document types are not allowed */ public function testDocumentTypesAreNotAllowed() { $this->deserialize('', 'stdClass'); } public function testVirtualAttributes() { $serializer = $this->getSerializer(); $serializer->setGroups(array('attributes')); $this->assertEquals($this->getContent('virtual_attributes'), $serializer->serialize(new ObjectWithVirtualXmlProperties(),'xml')); } public function testVirtualValues() { $serializer = $this->getSerializer(); $serializer->setGroups(array('values')); $this->assertEquals($this->getContent('virtual_values'), $serializer->serialize(new ObjectWithVirtualXmlProperties(),'xml')); } public function testVirtualXmlList() { $serializer = $this->getSerializer(); $serializer->setGroups(array('list')); $this->assertEquals($this->getContent('virtual_properties_list'), $serializer->serialize(new ObjectWithVirtualXmlProperties(),'xml')); } public function testVirtualXmlMap() { $serializer = $this->getSerializer(); $serializer->setGroups(array('map')); $this->assertEquals($this->getContent('virtual_properties_map'), $serializer->serialize(new ObjectWithVirtualXmlProperties(),'xml')); } public function testArrayKeyValues() { $serializer = $this->getSerializer(); $this->assertEquals($this->getContent('array_key_values'), $serializer->serialize(new ObjectWithXmlKeyValuePairs(), 'xml')); } protected function getContent($key) { if (!file_exists($file = __DIR__.'/xml/'.$key.'.xml')) { throw new InvalidArgumentException(sprintf('The key "%s" is not supported.', $key)); } return file_get_contents($file); } protected function getFormat() { return 'xml'; } }