/**
  * @expectedException \Opensoft\SimpleSerializer\Exception\InvalidArgumentException
  */
 public function testClassFullName()
 {
     $object = new AChildren();
     $className = ObjectHelper::getFullClassName($object);
     $this->assertEquals('Opensoft\\SimpleSerializer\\Tests\\Metadata\\Driver\\Fixture\\A\\AChildren', $className);
     ObjectHelper::getFullClassName('notClass');
 }
 /**
  * @dataProvider childrenDataProvider
  * @param AChildren $aChildren
  * @param array $aChildrenAsArray
  */
 public function testDenormalize($aChildren, $aChildrenAsArray)
 {
     $object = new E();
     $className = ObjectHelper::getFullClassName($object);
     $metadata = $this->metadataFactory->getMetadataForClass($className);
     $properties = $metadata->getProperties();
     $denormalizedObject = $this->arrayTransformer->denormalize(array($aChildrenAsArray), $properties['arrayOfObjects'], $object);
     $this->assertEquals(array($aChildren), $denormalizedObject);
 }
 /**
  * {@inheritDoc}
  *
  * @param mixed $data
  * @param object $object
  *
  * @return object
  */
 public function denormalize(array $data, $object)
 {
     $className = ObjectHelper::getFullClassName($object);
     $metadata = $this->metadataFactory->getMetadataForClass($className);
     $unserializedProperties = 0;
     foreach ($metadata->getProperties() as $property) {
         if ($this->propertySkipper->shouldSkip($property)) {
             if ($this->isMediumStrictUnserializeMode() && array_key_exists($property->getSerializedName(), $data)) {
                 throw new InvalidArgumentException(sprintf('%s extra field', $property->getSerializedName()));
             }
             continue;
         }
         if (!array_key_exists($property->getSerializedName(), $data)) {
             if ($this->isStrictUnserializeMode()) {
                 throw new InvalidArgumentException(sprintf('%s field is lost', $property->getSerializedName()));
             }
             continue;
         }
         $value = $this->dataProcessor->denormalizeProcess($this, $data[$property->getSerializedName()], $property, $object);
         ObjectHelper::involve($object, $property, $value);
         $unserializedProperties++;
     }
     if ($this->isMediumStrictUnserializeMode() && $unserializedProperties !== count($data)) {
         throw new InvalidArgumentException('Wrong number of fields in the deserialized data');
     }
     return $object;
 }