From a6d94c1b53e105732add1b0b4fad949dbaf11113 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Tue, 31 Jan 2017 12:07:40 +0100 Subject: [PATCH 1/3] [Yaml] Allow dumping empty array as YAML sequence --- src/Symfony/Component/Yaml/CHANGELOG.md | 9 +++++++++ src/Symfony/Component/Yaml/Inline.php | 2 +- .../Component/Yaml/Tests/DumperTest.php | 18 ++++++++++++++++++ src/Symfony/Component/Yaml/Yaml.php | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Yaml/CHANGELOG.md b/src/Symfony/Component/Yaml/CHANGELOG.md index 45c331f986..e80d4973cb 100644 --- a/src/Symfony/Component/Yaml/CHANGELOG.md +++ b/src/Symfony/Component/Yaml/CHANGELOG.md @@ -1,6 +1,15 @@ CHANGELOG ========= +3.2.3 +----- + + * Added support for dumping empty PHP arrays as YAML sequences: + + ```php + Yaml::dump([], 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE); + ``` + 3.2.0 ----- diff --git a/src/Symfony/Component/Yaml/Inline.php b/src/Symfony/Component/Yaml/Inline.php index c82c45b303..3278ed2285 100644 --- a/src/Symfony/Component/Yaml/Inline.php +++ b/src/Symfony/Component/Yaml/Inline.php @@ -252,7 +252,7 @@ class Inline private static function dumpArray($value, $flags) { // array - if ($value && !self::isHash($value)) { + if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) { $output = array(); foreach ($value as $val) { $output[] = self::dump($val, $flags); diff --git a/src/Symfony/Component/Yaml/Tests/DumperTest.php b/src/Symfony/Component/Yaml/Tests/DumperTest.php index 06e9d3f5c3..b46261f581 100644 --- a/src/Symfony/Component/Yaml/Tests/DumperTest.php +++ b/src/Symfony/Component/Yaml/Tests/DumperTest.php @@ -246,6 +246,24 @@ EOF; $this->dumper->dump(array('foo' => new A(), 'bar' => 1), 0, 0, true); } + public function testEmptyArray() + { + $dump = $this->dumper->dump(array()); + $this->assertEquals('{ }', $dump); + + $dump = $this->dumper->dump(array(), 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE); + $this->assertEquals('[]', $dump); + + $dump = $this->dumper->dump(array(), 9, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE); + $this->assertEquals('[]', $dump); + + $dump = $this->dumper->dump(new \ArrayObject(), 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE | Yaml::DUMP_OBJECT_AS_MAP); + $this->assertEquals('[]', $dump); + + $dump = $this->dumper->dump(new \stdClass(), 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE | Yaml::DUMP_OBJECT_AS_MAP); + $this->assertEquals('[]', $dump); + } + /** * @dataProvider getEscapeSequences */ diff --git a/src/Symfony/Component/Yaml/Yaml.php b/src/Symfony/Component/Yaml/Yaml.php index 46e6ef5c17..611ae91a61 100644 --- a/src/Symfony/Component/Yaml/Yaml.php +++ b/src/Symfony/Component/Yaml/Yaml.php @@ -29,6 +29,7 @@ class Yaml const DUMP_OBJECT_AS_MAP = 64; const DUMP_MULTI_LINE_LITERAL_BLOCK = 128; const PARSE_CONSTANT = 256; + const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 512; /** * Parses YAML into a PHP value. From af7067c3cf9f2853bbf2d408d5e87f1bfd4c718f Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Tue, 31 Jan 2017 14:59:05 +0100 Subject: [PATCH 2/3] Dump empty object as mapping --- src/Symfony/Component/Yaml/Inline.php | 2 +- src/Symfony/Component/Yaml/Tests/DumperTest.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Yaml/Inline.php b/src/Symfony/Component/Yaml/Inline.php index 3278ed2285..30935e53f9 100644 --- a/src/Symfony/Component/Yaml/Inline.php +++ b/src/Symfony/Component/Yaml/Inline.php @@ -164,7 +164,7 @@ class Inline } if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) { - return self::dumpArray((array) $value, $flags); + return self::dumpArray((array) $value, $flags & ~Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE); } if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { diff --git a/src/Symfony/Component/Yaml/Tests/DumperTest.php b/src/Symfony/Component/Yaml/Tests/DumperTest.php index b46261f581..9306a1b858 100644 --- a/src/Symfony/Component/Yaml/Tests/DumperTest.php +++ b/src/Symfony/Component/Yaml/Tests/DumperTest.php @@ -258,10 +258,10 @@ EOF; $this->assertEquals('[]', $dump); $dump = $this->dumper->dump(new \ArrayObject(), 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE | Yaml::DUMP_OBJECT_AS_MAP); - $this->assertEquals('[]', $dump); + $this->assertEquals('{ }', $dump); $dump = $this->dumper->dump(new \stdClass(), 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE | Yaml::DUMP_OBJECT_AS_MAP); - $this->assertEquals('[]', $dump); + $this->assertEquals('{ }', $dump); } /** From 87ffaf2b77543a18ba288e53ea5ea62fa48c23e7 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 17 Feb 2017 08:57:20 +0100 Subject: [PATCH 3/3] Bump version number --- src/Symfony/Component/Yaml/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Yaml/CHANGELOG.md b/src/Symfony/Component/Yaml/CHANGELOG.md index e80d4973cb..9cc639e3f7 100644 --- a/src/Symfony/Component/Yaml/CHANGELOG.md +++ b/src/Symfony/Component/Yaml/CHANGELOG.md @@ -1,7 +1,7 @@ CHANGELOG ========= -3.2.3 +3.3.0 ----- * Added support for dumping empty PHP arrays as YAML sequences: