Bladeren bron

Unserialization of XML booleans

Asmir Mustafic 11 jaren geleden
bovenliggende
commit
dba6a1c513

+ 4 - 4
src/JMS/Serializer/XmlDeserializationVisitor.php

@@ -104,9 +104,9 @@ class XmlDeserializationVisitor extends AbstractVisitor
     {
         $data = (string) $data;
 
-        if ('true' === $data) {
+        if ('true' === $data || '1' === $data) {
             $data = true;
-        } elseif ('false' === $data) {
+        } elseif ('false' === $data || '0' === $data) {
             $data = false;
         } else {
             throw new RuntimeException(sprintf('Could not convert data to boolean. Expected "true", or "false", but got %s.', json_encode($data)));
@@ -224,9 +224,9 @@ class XmlDeserializationVisitor extends AbstractVisitor
                 $nodes = $data->xpath('./@'.$attributeName);
                 if (!empty($nodes)) {
                     $v = (string) reset($nodes);
-                    $metadata->reflection->setValue($this->currentObject, $v);    
+                    $metadata->reflection->setValue($this->currentObject, $v);
                 }
-                
+
             } elseif (isset($data[$name])) {
                 $v = $this->navigator->accept($data[$name], $metadata->type, $context);
                 $metadata->reflection->setValue($this->currentObject, $v);

+ 16 - 0
tests/JMS/Serializer/Tests/Serializer/XmlSerializationTest.php

@@ -47,6 +47,22 @@ class XmlSerializationTest extends BaseSerializationTest
         $this->serialize($obj);
     }
 
+
+    /**
+     * @dataProvider getXMLBooleans
+     */
+    public function testXMLBooleans($xmlBoolean, $boolean)
+    {
+        if ($this->hasDeserializer()) {
+            $this->assertSame($boolean, $this->deserialize('<result>'.$xmlBoolean.'</result>', 'boolean'));
+        }
+    }
+
+    public function getXMLBooleans()
+    {
+        return array(array('true', true), array('false', false), array('1', true), array('0', false));
+    }
+
     public function testPropertyIsObjectWithAttributeAndValue()
     {
         $personCollection = new PersonLocation;