/**
  * @covers \ProxyManager\GeneratorStrategy\FileWriterGeneratorStrategy::__construct
  * @covers \ProxyManager\GeneratorStrategy\FileWriterGeneratorStrategy::generate
  */
 public function testGenerate()
 {
     $locator = $this->getMock('ProxyManager\\FileLocator\\FileLocatorInterface');
     $generator = new FileWriterGeneratorStrategy($locator);
     $tmpFile = sys_get_temp_dir() . '/FileWriterGeneratorStrategyTest' . uniqid() . '.php';
     $namespace = 'Foo';
     $className = UniqueIdentifierGenerator::getIdentifier('Bar');
     $fqcn = $namespace . '\\' . $className;
     $locator->expects($this->any())->method('getProxyFileName')->with($fqcn)->will($this->returnValue($tmpFile));
     $body = $generator->generate(new ClassGenerator($fqcn));
     $this->assertGreaterThan(0, strpos($body, $className));
     $this->assertFalse(class_exists($fqcn, false));
     $this->assertTrue(file_exists($tmpFile));
     require $tmpFile;
     $this->assertTrue(class_exists($fqcn, false));
 }
 public function testWhenFailingAllTemporaryFilesAreRemoved()
 {
     $tmpDirPath = sys_get_temp_dir() . '/' . uniqid('noTempFilesLeftBehind', true);
     mkdir($tmpDirPath);
     /* @var $locator \ProxyManager\FileLocator\FileLocatorInterface|\PHPUnit_Framework_MockObject_MockObject */
     $locator = $this->getMock('ProxyManager\\FileLocator\\FileLocatorInterface');
     $generator = new FileWriterGeneratorStrategy($locator);
     $tmpFile = $tmpDirPath . '/' . uniqid('FileWriterGeneratorStrategyFailedFileMoveTest', true) . '.php';
     $namespace = 'Foo';
     $className = UniqueIdentifierGenerator::getIdentifier('Bar');
     $fqcn = $namespace . '\\' . $className;
     $locator->expects($this->any())->method('getProxyFileName')->with($fqcn)->will($this->returnValue($tmpFile));
     mkdir($tmpFile);
     try {
         $generator->generate(new ClassGenerator($fqcn));
         $this->fail('An exception was supposed to be thrown');
     } catch (FileNotWritableException $exception) {
         rmdir($tmpFile);
         $this->assertEquals(array('.', '..'), scandir($tmpDirPath));
     }
 }