* * 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:----wVE1EwHlpfOQSV7+w4d/a0BfZHWPFxnJD/+/r7XdDlgBAKhIRtJ1x3pxPdRV5GqBXpGWpZ88ESHZBS+f+Jc8yw+8CCDiadHHlOtJcgepXDsaA9jMa8nTH4a9P25m/6WrQaeonjhGQLsN9lPCxxpiU0eZHIamkT/KWpSFMJrkzNf+/+baCtPwoDlSDHwwLHzwfN8csYv+VlR9erliSVwqfHqy0UXnvRjfiJr2haAFUhMCc9C/66nidY6ZMGcpE40K9YOPEPnjPTifrjfbUSFFoq2EBrnCUxlwcr1Pj+fw0NakCqLJiLA7S9xAhW+h3GXt3EOyttbvkHVp8iXm4woofu17Fo3l2Rl8GqDwczwxDROPFv2I5oWWbrMIb6ePnkayZNmkSwT2UF908Ul01Zqp702jzur7GQdEr5Wh31rlcEFubciwVmoLop2v8lzwS5r6bwnsduDnMVgbDAQUNs7bCfKydpLC3NxGKb6xb37j/uA5MZ/Ahs5qXO6KiFAN8C8j9h0H3rXMT9R0WQRs/gx2hmc7UPAlotsGsCBQyuLF7KbRn/sgAdGf4N5G7eCco4ITtBOUt7BqVOHM1IccXc3KOIHEB56y0XsPfaMylF8Bb/L0e0WFEYvaePf34h2Vkm2TmewiEZ5lEvFiTClXMHkry/RWk8c+p3zvMqR5jaR0fMM=----ATTACHMENT:----NDIzNjE1MzQ2NzM1Mzk5MiA4NjI0NzE5MjE0ODA2MjI5IDIyNTAzNzExODgyMjg4NDY=