Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Serializer/Tests/SerializerTest.php
Строк: 371
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentSerializerTests;

use 
SymfonyComponentSerializerSerializer;
use 
SymfonyComponentSerializerEncoderJsonEncoder;
use 
SymfonyComponentSerializerNormalizerGetSetMethodNormalizer;
use 
SymfonyComponentSerializerNormalizerCustomNormalizer;
use 
SymfonyComponentSerializerTestsFixturesTraversableDummy;
use 
SymfonyComponentSerializerTestsFixturesNormalizableTraversableDummy;
use 
SymfonyComponentSerializerTestsNormalizerTestNormalizer;
use 
SymfonyComponentSerializerTestsNormalizerTestDenormalizer;

class 
SerializerTest extends PHPUnit_Framework_TestCase
{
    
/**
     * @expectedException SymfonyComponentSerializerExceptionUnexpectedValueException
     */
    
public function testNormalizeNoMatch()
    {
        
$this->serializer = new Serializer(array($this->getMock('SymfonyComponentSerializerNormalizerCustomNormalizer')));
        
$this->serializer->normalize(new stdClass(), 'xml');
    }

    public function 
testNormalizeTraversable()
    {
        
$this->serializer = new Serializer(array(), array('json' => new JsonEncoder()));
        
$result $this->serializer->serialize(new TraversableDummy(), 'json');
        
$this->assertEquals('{"foo":"foo","bar":"bar"}'$result);
    }

    public function 
testNormalizeGivesPriorityToInterfaceOverTraversable()
    {
        
$this->serializer = new Serializer(array(new CustomNormalizer()), array('json' => new JsonEncoder()));
        
$result $this->serializer->serialize(new NormalizableTraversableDummy(), 'json');
        
$this->assertEquals('{"foo":"normalizedFoo","bar":"normalizedBar"}'$result);
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionUnexpectedValueException
     */
    
public function testNormalizeOnDenormalizer()
    {
        
$this->serializer = new Serializer(array(new TestDenormalizer()), array());
        
$this->assertTrue($this->serializer->normalize(new stdClass(), 'json'));
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionUnexpectedValueException
     */
    
public function testDenormalizeNoMatch()
    {
        
$this->serializer = new Serializer(array($this->getMock('SymfonyComponentSerializerNormalizerCustomNormalizer')));
        
$this->serializer->denormalize('foo''stdClass');
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionUnexpectedValueException
     */
    
public function testDenormalizeOnNormalizer()
    {
        
$this->serializer = new Serializer(array(new TestNormalizer()), array());
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->assertTrue($this->serializer->denormalize(json_encode($data), 'stdClass''json'));
    }

    public function 
testSerialize()
    {
        
$this->serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));
        
$data = array('title' => 'foo''numbers' => array(53));
        
$result $this->serializer->serialize(Model::fromArray($data), 'json');
        
$this->assertEquals(json_encode($data), $result);
    }

    public function 
testSerializeScalar()
    {
        
$this->serializer = new Serializer(array(), array('json' => new JsonEncoder()));
        
$result $this->serializer->serialize('foo''json');
        
$this->assertEquals('"foo"'$result);
    }

    public function 
testSerializeArrayOfScalars()
    {
        
$this->serializer = new Serializer(array(), array('json' => new JsonEncoder()));
        
$data = array('foo', array(53));
        
$result $this->serializer->serialize($data'json');
        
$this->assertEquals(json_encode($data), $result);
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionUnexpectedValueException
     */
    
public function testSerializeNoEncoder()
    {
        
$this->serializer = new Serializer(array(), array());
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->serializer->serialize($data'json');
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionLogicException
     */
    
public function testSerializeNoNormalizer()
    {
        
$this->serializer = new Serializer(array(), array('json' => new JsonEncoder()));
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->serializer->serialize(Model::fromArray($data), 'json');
    }

    public function 
testDeserialize()
    {
        
$this->serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));
        
$data = array('title' => 'foo''numbers' => array(53));
        
$result $this->serializer->deserialize(json_encode($data), 'SymfonyComponentSerializerTestsModel''json');
        
$this->assertEquals($data$result->toArray());
    }

    public function 
testDeserializeUseCache()
    {
        
$this->serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->serializer->deserialize(json_encode($data), 'SymfonyComponentSerializerTestsModel''json');
        
$data = array('title' => 'bar''numbers' => array(28));
        
$result $this->serializer->deserialize(json_encode($data), 'SymfonyComponentSerializerTestsModel''json');
        
$this->assertEquals($data$result->toArray());
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionLogicException
     */
    
public function testDeserializeNoNormalizer()
    {
        
$this->serializer = new Serializer(array(), array('json' => new JsonEncoder()));
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->serializer->deserialize(json_encode($data), 'SymfonyComponentSerializerTestsModel''json');
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionUnexpectedValueException
     */
    
public function testDeserializeWrongNormalizer()
    {
        
$this->serializer = new Serializer(array(new CustomNormalizer()), array('json' => new JsonEncoder()));
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->serializer->deserialize(json_encode($data), 'SymfonyComponentSerializerTestsModel''json');
    }

    
/**
     * @expectedException SymfonyComponentSerializerExceptionUnexpectedValueException
     */
    
public function testDeserializeNoEncoder()
    {
        
$this->serializer = new Serializer(array(), array());
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->serializer->deserialize(json_encode($data), 'SymfonyComponentSerializerTestsModel''json');
    }

    public function 
testDeserializeSupported()
    {
        
$this->serializer = new Serializer(array(new GetSetMethodNormalizer()), array());
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->assertTrue($this->serializer->supportsDenormalization(json_encode($data), 'SymfonyComponentSerializerTestsModel''json'));
    }

    public function 
testDeserializeNotSupported()
    {
        
$this->serializer = new Serializer(array(new GetSetMethodNormalizer()), array());
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->assertFalse($this->serializer->supportsDenormalization(json_encode($data), 'stdClass''json'));
    }

    public function 
testDeserializeNotSupportedMissing()
    {
        
$this->serializer = new Serializer(array(), array());
        
$data = array('title' => 'foo''numbers' => array(53));
        
$this->assertFalse($this->serializer->supportsDenormalization(json_encode($data), 'SymfonyComponentSerializerTestsModel''json'));
    }

    public function 
testEncode()
    {
        
$this->serializer = new Serializer(array(), array('json' => new JsonEncoder()));
        
$data = array('foo', array(53));
        
$result $this->serializer->encode($data'json');
        
$this->assertEquals(json_encode($data), $result);
    }

    public function 
testDecode()
    {
        
$this->serializer = new Serializer(array(), array('json' => new JsonEncoder()));
        
$data = array('foo', array(53));
        
$result $this->serializer->decode(json_encode($data), 'json');
        
$this->assertEquals($data$result);
    }
}

class 
Model
{
    private 
$title;
    private 
$numbers;

    public static function 
fromArray($array)
    {
        
$model = new self();
        if (isset(
$array['title'])) {
            
$model->setTitle($array['title']);
        }
        if (isset(
$array['numbers'])) {
            
$model->setNumbers($array['numbers']);
        }

        return 
$model;
    }

    public function 
getTitle()
    {
        return 
$this->title;
    }

    public function 
setTitle($title)
    {
        
$this->title $title;
    }

    public function 
getNumbers()
    {
        return 
$this->numbers;
    }

    public function 
setNumbers($numbers)
    {
        
$this->numbers $numbers;
    }

    public function 
toArray()
    {
        return array(
'title' => $this->title'numbers' => $this->numbers);
    }
}
Онлайн: 1
Реклама