Browse Source

Merge pull request #211 from hashnz/lazyload

fix lazy loader setSerializeNull
Johannes 12 years ago
parent
commit
d06677205e
2 changed files with 49 additions and 3 deletions
  1. 4 3
      Serializer/Serializer.php
  2. 45 0
      Tests/Serializer/LazyLoaderTest.php

+ 4 - 3
Serializer/Serializer.php

@@ -40,6 +40,7 @@ class Serializer implements SerializerInterface
     private $serializationVisitors;
     private $deserializationVisitors;
     private $exclusionStrategy;
+    private $serializeNull;
 
     public function __construct(MetadataFactoryInterface $factory, HandlerRegistryInterface $handlerRegistry, ObjectConstructorInterface $objectConstructor, EventDispatcherInterface $dispatcher = null, TypeParser $typeParser = null, array $serializationVisitors = array(), array $deserializationVisitors = array())
     {
@@ -50,13 +51,12 @@ class Serializer implements SerializerInterface
         $this->typeParser = $typeParser ?: new TypeParser();
         $this->serializationVisitors = $serializationVisitors;
         $this->deserializationVisitors = $deserializationVisitors;
+        $this->serializeNull = false;
     }
 
     public function setSerializeNull($serializeNull)
     {
-        foreach ($this->serializationVisitors as $visitor) {
-            $visitor->setSerializeNull($serializeNull);
-        }
+        $this->serializeNull = $serializeNull;
     }
 
     public function setExclusionStrategy(ExclusionStrategyInterface $exclusionStrategy = null)
@@ -89,6 +89,7 @@ class Serializer implements SerializerInterface
     public function serialize($data, $format)
     {
         $visitor = $this->getSerializationVisitor($format);
+        $visitor->setSerializeNull($this->serializeNull);
         $visitor->setNavigator($navigator = new GraphNavigator(GraphNavigator::DIRECTION_SERIALIZATION, $this->factory, $format, $this->handlerRegistry, $this->objectConstructor, $this->exclusionStrategy, $this->dispatcher));
         $navigator->accept($visitor->prepare($data), null, $visitor);
 

+ 45 - 0
Tests/Serializer/LazyLoaderTest.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace JMS\SerializerBundle\Tests\Serializer;
+
+use JMS\SerializerBundle\Serializer\Handler\HandlerRegistry;
+use Doctrine\Common\Annotations\AnnotationReader;
+use JMS\SerializerBundle\Metadata\Driver\AnnotationDriver;
+use JMS\SerializerBundle\Serializer\LazyLoadingSerializer;
+use JMS\SerializerBundle\Serializer\Construction\UnserializeObjectConstructor;
+use Metadata\MetadataFactory;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use JMS\SerializerBundle\DependencyInjection\JMSSerializerExtension;
+
+class LazyLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    protected $serializer;
+
+    protected function setUp()
+    {
+        $this->serializer = new LazyLoadingSerializer(
+            new MetadataFactory(new AnnotationDriver(new AnnotationReader())),
+            new HandlerRegistry(),
+            new UnserializeObjectConstructor(),
+            null,
+            null,
+            array('json' => 'jms_serializer.json_serialization_visitor')
+        );
+
+        $container = new ContainerBuilder();
+        $container->setParameter('kernel.debug', true);
+        $container->setParameter('kernel.cache_dir', sys_get_temp_dir().'/serializer');
+        $container->setParameter('kernel.bundles', array());
+        $extension = new JMSSerializerExtension();
+        $extension->load(array(array()), $container);
+
+        $this->serializer->setContainer($container);
+    }
+
+    public function testSetSerializeNull()
+    {
+        $this->serializer->setSerializeNull(true);
+        $this->assertEquals('{"foo":"bar","baz":null}', $this->serializer->serialize(array('foo' => 'bar', 'baz' => null), 'json'));
+
+    }
+}