/**
  * {@inheritDoc}
  *
  * @covers \GeneratedHydrator\Factory\HydratorFactory::__construct
  * @covers \GeneratedHydrator\Factory\HydratorFactory::getHydratorClass
  *
  * NOTE: serious mocking going on in here (a class is generated on-the-fly) - careful
  */
 public function testWillTryAutoGeneration()
 {
     $className = UniqueIdentifierGenerator::getIdentifier('foo');
     $generatedClassName = UniqueIdentifierGenerator::getIdentifier('bar');
     $generator = $this->getMock('CodeGenerationUtils\\GeneratorStrategy\\GeneratorStrategyInterface');
     $autoloader = $this->getMock('CodeGenerationUtils\\Autoloader\\AutoloaderInterface');
     $this->config->expects($this->any())->method('getHydratedClassName')->will($this->returnValue($className));
     $this->config->expects($this->any())->method('doesAutoGenerateProxies')->will($this->returnValue(true));
     $this->config->expects($this->any())->method('getGeneratorStrategy')->will($this->returnValue($generator));
     $this->config->expects($this->any())->method('getGeneratedClassAutoloader')->will($this->returnValue($autoloader));
     $generator->expects($this->once())->method('generate')->with($this->isType('array'));
     // simulate autoloading
     $autoloader->expects($this->once())->method('__invoke')->with($generatedClassName)->will($this->returnCallback(function () use($generatedClassName) {
         eval('class ' . $generatedClassName . ' {}');
     }));
     $this->inflector->expects($this->once())->method('getGeneratedClassName')->with('GeneratedHydratorTestAsset\\BaseClass')->will($this->returnValue($generatedClassName));
     $this->inflector->expects($this->once())->method('getUserClassName')->with($className)->will($this->returnValue('GeneratedHydratorTestAsset\\BaseClass'));
     $factory = new HydratorFactory($this->config);
     /* @var $generatedClass \GeneratedHydratorTestAsset\LazyLoadingMock */
     $generatedClass = $factory->getHydratorClass();
     $this->assertInstanceOf($generatedClassName, new $generatedClass());
 }