public function testInvalidHandler()
 {
     $handlers = new FallbackHydratorContainer();
     $this->setExpectedException('RuntimeException');
     $handlers->add('stdClass', 'name', 'invalid');
 }
 public function addHydrator($class, $root, $handler)
 {
     $this->hydrators->add($class, $root, $handler);
 }
 private function getSerializard()
 {
     $userClass = 'Thunder\\Serializard\\Tests\\Fake\\FakeUser';
     $tagClass = 'Thunder\\Serializard\\Tests\\Fake\\FakeTag';
     $normalizers = new FallbackNormalizerContainer();
     $normalizers->add($userClass, 'user', new ReflectionNormalizer());
     $normalizers->add($tagClass, 'tag', function (FakeTag $tag) {
         return array('id' => $tag->getId(), 'name' => $tag->getName());
     });
     $hydrators = new FallbackHydratorContainer();
     $hydrators->add($userClass, 'user', function (array $data, Hydrators $handlers) use($tagClass) {
         $tagHandler = $handlers->getHandler($tagClass);
         $user = new FakeUser($data['id'], $data['name'], $tagHandler($data['tag'], $handlers));
         foreach ($data['tags'] as $tag) {
             $user->addTag($tagHandler($tag, $handlers));
         }
         return $user;
     });
     $hydrators->add($tagClass, 'tag', function (array $data, Hydrators $handlers) {
         return new FakeTag($data['id'], $data['name']);
     });
     $formats = new FormatContainer();
     $formats->add('xml', new XmlFormat());
     $formats->add('yaml', new YamlFormat());
     $formats->add('json', new JsonFormat());
     $formats->add('array', new ArrayFormat());
     return new Serializard($formats, $normalizers, $hydrators);
 }