Browse Source

Port Xml::fromArray() fix from 2.x

Port fix for zero values from 2.x

Refs #9870
Mark Story 9 years ago
parent
commit
82d3473835
2 changed files with 23 additions and 5 deletions
  1. 1 1
      src/Utility/Xml.php
  2. 22 4
      tests/TestCase/Utility/XmlTest.php

+ 1 - 1
src/Utility/Xml.php

@@ -335,7 +335,7 @@ class Xml
                 $childNS = $value['xmlns:'];
                 unset($value['xmlns:']);
             }
-        } elseif (!empty($value) || $value === 0) {
+        } elseif (!empty($value) || $value === 0 || $value === '0') {
             $childValue = (string)$value;
         }
 

+ 22 - 4
tests/TestCase/Utility/XmlTest.php

@@ -377,19 +377,37 @@ XML;
         $obj = Xml::fromArray($xml, 'attributes');
         $xmlText = '<' . '?xml version="1.0" encoding="UTF-8"?><tags><tag id="1">defect</tag></tags>';
         $this->assertXmlStringEqualsXmlString($xmlText, $obj->asXML());
+    }
 
-        $xml = [
-            'tag' => [
+    /**
+     * Test fromArray() with zero values.
+     *
+     * @return void
+     */
+    public function testFromArrayZeroValue()
+    {
+        $xml = array(
+            'tag' => array(
                 '@' => 0,
                 '@test' => 'A test'
-            ]
-        ];
+            )
+        );
         $obj = Xml::fromArray($xml);
         $xmlText = <<<XML
 <?xml version="1.0" encoding="UTF-8"?>
 <tag test="A test">0</tag>
 XML;
         $this->assertXmlStringEqualsXmlString($xmlText, $obj->asXML());
+
+        $xml = array(
+            'tag' => array('0')
+        );
+        $obj = Xml::fromArray($xml);
+        $xmlText = <<<XML
+<?xml version="1.0" encoding="UTF-8"?>
+<tag>0</tag>
+XML;
+        $this->assertXmlStringEqualsXmlString($xmlText, $obj->asXML());
     }
 
     /**