/** * {@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()); }