Skip to content

Commit

Permalink
bug #32007 [Serializer] Handle true and false appropriately in CSV en…
Browse files Browse the repository at this point in the history
…coder (battye)

This PR was squashed before being merged into the 3.4 branch (closes #32007).

Discussion
----------

[Serializer] Handle true and false appropriately in CSV encoder

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #27642
| License       | MIT
| Doc PR        | -

Previously, if `true` was passed in as a value to the CSV encoder then `fputcsv()` would correctly treat it as 1. However, if `false` was passed in, it would be treated as a blank value. `null` would also be treated as a blank value.

This fix makes it consistent so that true and false will map to 1 and 0, while null maps to an empty string.

Commits
-------

89cba00 [Serializer] Handle true and false appropriately in CSV encoder
  • Loading branch information
fabpot committed Jun 14, 2019
2 parents bd9d0a4 + 89cba00 commit b8978bd
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/Symfony/Component/Serializer/Encoder/CsvEncoder.php
Expand Up @@ -189,7 +189,8 @@ private function flatten(array $array, array &$result, $keySeparator, $parentKey
if (\is_array($value)) {
$this->flatten($value, $result, $keySeparator, $parentKey.$key.$keySeparator);
} else {
$result[$parentKey.$key] = $value;
// Ensures an actual value is used when dealing with true and false
$result[$parentKey.$key] = false === $value ? 0 : (true === $value ? 1 : $value);
}
}
}
Expand Down
18 changes: 18 additions & 0 deletions src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php
Expand Up @@ -29,6 +29,24 @@ protected function setUp()
$this->encoder = new CsvEncoder();
}

public function testTrueFalseValues()
{
$data = [
'string' => 'foo',
'int' => 2,
'false' => false,
'true' => true,
];

// Check that true and false are appropriately handled
$this->assertEquals(<<<'CSV'
string,int,false,true
foo,2,0,1
CSV
, $this->encoder->encode($data, 'csv'));
}

public function testSupportEncoding()
{
$this->assertTrue($this->encoder->supportsEncoding('csv'));
Expand Down

0 comments on commit b8978bd

Please sign in to comment.