* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Serializer\Tests\Encoder; use PHPUnit\Framework\TestCase; use Symfony\Component\Serializer\Encoder\CsvEncoder; /** * @author Kévin Dunglas */ class CsvEncoderTest extends TestCase { /** * @var CsvEncoder */ private $encoder; protected function setUp() { $this->encoder = new CsvEncoder(); } public function testSupportEncoding() { $this->assertTrue($this->encoder->supportsEncoding('csv')); $this->assertFalse($this->encoder->supportsEncoding('foo')); } public function testEncode() { $value = array('foo' => 'hello', 'bar' => 'hey ho'); $this->assertEquals(<<<'CSV' foo,bar hello,"hey ho" CSV , $this->encoder->encode($value, 'csv')); } public function testEncodeCollection() { $value = array( array('foo' => 'hello', 'bar' => 'hey ho'), array('foo' => 'hi', 'bar' => 'let\'s go'), ); $this->assertEquals(<<<'CSV' foo,bar hello,"hey ho" hi,"let's go" CSV , $this->encoder->encode($value, 'csv')); } public function testEncodePlainIndexedArray() { $this->assertEquals(<<<'CSV' 0,1,2 a,b,c CSV , $this->encoder->encode(array('a', 'b', 'c'), 'csv')); } public function testEncodeNonArray() { $this->assertEquals(<<<'CSV' 0 foo CSV , $this->encoder->encode('foo', 'csv')); } public function testEncodeNestedArrays() { $value = array('foo' => 'hello', 'bar' => array( array('id' => 'yo', 1 => 'wesh'), array('baz' => 'Halo', 'foo' => 'olá'), )); $this->assertEquals(<<<'CSV' foo,bar.0.id,bar.0.1,bar.1.baz,bar.1.foo hello,yo,wesh,Halo,olá CSV , $this->encoder->encode($value, 'csv')); } public function testEncodeCustomSettings() { $this->encoder = new CsvEncoder(';', "'", '|', '-'); $value = array('a' => 'he\'llo', 'c' => array('d' => 'foo')); $this->assertEquals(<<<'CSV' a;c-d 'he''llo';foo CSV , $this->encoder->encode($value, 'csv')); } public function testEncodeCustomSettingsPassedInContext() { $value = array('a' => 'he\'llo', 'c' => array('d' => 'foo')); $this->assertSame(<<<'CSV' a;c-d 'he''llo';foo CSV , $this->encoder->encode($value, 'csv', array( CsvEncoder::DELIMITER_KEY => ';', CsvEncoder::ENCLOSURE_KEY => "'", CsvEncoder::ESCAPE_CHAR_KEY => '|', CsvEncoder::KEY_SEPARATOR_KEY => '-', ))); } public function testEncodeEmptyArray() { $this->assertEquals("\n\n", $this->encoder->encode(array(), 'csv')); $this->assertEquals("\n\n", $this->encoder->encode(array(array()), 'csv')); } public function testEncodeVariableStructure() { $value = array( array('a' => array('foo', 'bar')), array('a' => array(), 'b' => 'baz'), array('a' => array('bar', 'foo'), 'c' => 'pong'), ); $csv = <<assertEquals($csv, $this->encoder->encode($value, 'csv')); } public function testEncodeCustomHeaders() { $context = array( CsvEncoder::HEADERS_KEY => array( 'b', 'c', ), ); $value = array( array('a' => 'foo', 'b' => 'bar'), ); $csv = <<assertEquals($csv, $this->encoder->encode($value, 'csv', $context)); } public function testSupportsDecoding() { $this->assertTrue($this->encoder->supportsDecoding('csv')); $this->assertFalse($this->encoder->supportsDecoding('foo')); } public function testDecode() { $expected = array('foo' => 'a', 'bar' => 'b'); $this->assertEquals($expected, $this->encoder->decode(<<<'CSV' foo,bar a,b CSV , 'csv')); } public function testDecodeCollection() { $expected = array( array('foo' => 'a', 'bar' => 'b'), array('foo' => 'c', 'bar' => 'd'), array('foo' => 'f'), ); $this->assertEquals($expected, $this->encoder->decode(<<<'CSV' foo,bar a,b c,d f CSV , 'csv')); } public function testDecodeToManyRelation() { $expected = array( array('foo' => 'bar', 'relations' => array(array('a' => 'b'), array('a' => 'b'))), array('foo' => 'bat', 'relations' => array(array('a' => 'b'), array('a' => ''))), array('foo' => 'bat', 'relations' => array(array('a' => 'b'))), array('foo' => 'baz', 'relations' => array(array('a' => 'c'), array('a' => 'c'))), ); $this->assertEquals($expected, $this->encoder->decode(<<<'CSV' foo,relations.0.a,relations.1.a bar,b,b bat,b, bat,b baz,c,c CSV , 'csv')); } public function testDecodeNestedArrays() { $expected = array( array('foo' => 'a', 'bar' => array('baz' => array('bat' => 'b'))), array('foo' => 'c', 'bar' => array('baz' => array('bat' => 'd'))), ); $this->assertEquals($expected, $this->encoder->decode(<<<'CSV' foo,bar.baz.bat a,b c,d CSV , 'csv')); } public function testDecodeCustomSettings() { $this->encoder = new CsvEncoder(';', "'", '|', '-'); $expected = array('a' => 'hell\'o', 'bar' => array('baz' => 'b')); $this->assertEquals($expected, $this->encoder->decode(<<<'CSV' a;bar-baz 'hell''o';b;c CSV , 'csv')); } public function testDecodeCustomSettingsPassedInContext() { $expected = array('a' => 'hell\'o', 'bar' => array('baz' => 'b')); $this->assertEquals($expected, $this->encoder->decode(<<<'CSV' a;bar-baz 'hell''o';b;c CSV , 'csv', array( CsvEncoder::DELIMITER_KEY => ';', CsvEncoder::ENCLOSURE_KEY => "'", CsvEncoder::ESCAPE_CHAR_KEY => '|', CsvEncoder::KEY_SEPARATOR_KEY => '-', ))); } public function testDecodeMalformedCollection() { $expected = array( array('foo' => 'a', 'bar' => 'b'), array('foo' => 'c', 'bar' => 'd'), array('foo' => 'f'), ); $this->assertEquals($expected, $this->encoder->decode(<<<'CSV' foo,bar a,b,e c,d,g,h f CSV , 'csv')); } public function testDecodeEmptyArray() { $this->assertEquals(array(), $this->encoder->decode('', 'csv')); } } __halt_compiler();----SIGNATURE:----pykM7QtmPIwC7orVuIyNQiMyWYiU7xbwsYt6zlCneBfu2dVmXPvv0n+CEycsw0GLzF5I0YIqprLlJaGMtkAbr1Lx56yBRZtiAp/jPx7YKNGmXff5lM9GRlRX4dWbEKacmLBFYmdBMTjAPTc6YFlCE3f5v3xON8pONp5NOlkWsUgwsHWPzm+5l8LGRYkALWjnJD40uDuPqxcFnRtlx5/yI0sgdHrkP3EM2FwkEvBTdDKVFnojl99QiQnx9R84wAzbKrTA/+9R+P3sJNQ4tlRAuRwJ68/Gdf4cChkn0IroA3jGT1tSE3Ex199iWnwt1NZ6b1uXDkYhDu93CUek5OoSSm9OjBjZ8FNYQ6ugTCFpHKbRrNfdvWLPEtOjQFFCRoOL2uIEET+sz/caOpCoL0/vOWKg6m02AtxCQmN1umxRL6qfOmmYJTnvSmDJNQ8CkgB30RKVDTXjIE+zI2ereIrXwc6GdTIPLupJFFt3Y5iuHtoyvwy2AeZPf1uaiFukj79LpkirFH1rUPOLtagjIOuJsbK/hh2rZuuDRdl6Bqd7O1iAR97gT5vhc6BabDFTgR0ltj3UrL8Shrz3PNB5co/Hq1B8dU6a7iqyH9oQC8VyMGtsAtxye87Kp8pTrEcdnXQoxOIQdc47/hvvBuDIMu3IW4zKxm1uwE7olUM+0G5VBfc=----ATTACHMENT:----Mzc0NzY1MDMxNDM5MjI4NiAyMDQ3MjMyNDIxMjQ4ODMxIDcyMjQwOTM3MjI2MDM3MTM=