2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\HttpFoundation\Tests\File ;
use Symfony\Component\HttpFoundation\File\File ;
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser ;
class FileTest extends \PHPUnit_Framework_TestCase
{
protected $file ;
public function testGetMimeTypeUsesMimeTypeGuessers ()
{
$file = new File ( __DIR__ . '/Fixtures/test.gif' );
$guesser = $this -> createMockGuesser ( $file -> getPathname (), 'image/gif' );
MimeTypeGuesser :: getInstance () -> register ( $guesser );
$this -> assertEquals ( 'image/gif' , $file -> getMimeType ());
}
public function testGuessExtensionWithoutGuesser ()
{
$file = new File ( __DIR__ . '/Fixtures/directory/.empty' );
$this -> assertNull ( $file -> guessExtension ());
}
public function testGuessExtensionIsBasedOnMimeType ()
{
$file = new File ( __DIR__ . '/Fixtures/test' );
$guesser = $this -> createMockGuesser ( $file -> getPathname (), 'image/gif' );
MimeTypeGuesser :: getInstance () -> register ( $guesser );
$this -> assertEquals ( 'gif' , $file -> guessExtension ());
}
2015-10-08 11:40:12 -07:00
/**
* @ requires extension fileinfo
*/
2015-08-27 12:03:05 -07:00
public function testGuessExtensionWithReset ()
{
$file = new File ( __DIR__ . '/Fixtures/other-file.example' );
$guesser = $this -> createMockGuesser ( $file -> getPathname (), 'image/gif' );
MimeTypeGuesser :: getInstance () -> register ( $guesser );
$this -> assertEquals ( 'gif' , $file -> guessExtension ());
MimeTypeGuesser :: reset ();
$this -> assertNull ( $file -> guessExtension ());
}
2015-08-17 17:00:26 -07:00
public function testConstructWhenFileNotExists ()
{
$this -> setExpectedException ( 'Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException' );
new File ( __DIR__ . '/Fixtures/not_here' );
}
public function testMove ()
{
$path = __DIR__ . '/Fixtures/test.copy.gif' ;
$targetDir = __DIR__ . '/Fixtures/directory' ;
$targetPath = $targetDir . '/test.copy.gif' ;
@ unlink ( $path );
@ unlink ( $targetPath );
copy ( __DIR__ . '/Fixtures/test.gif' , $path );
$file = new File ( $path );
$movedFile = $file -> move ( $targetDir );
$this -> assertInstanceOf ( 'Symfony\Component\HttpFoundation\File\File' , $movedFile );
$this -> assertTrue ( file_exists ( $targetPath ));
$this -> assertFalse ( file_exists ( $path ));
$this -> assertEquals ( realpath ( $targetPath ), $movedFile -> getRealPath ());
@ unlink ( $targetPath );
}
public function testMoveWithNewName ()
{
$path = __DIR__ . '/Fixtures/test.copy.gif' ;
$targetDir = __DIR__ . '/Fixtures/directory' ;
$targetPath = $targetDir . '/test.newname.gif' ;
@ unlink ( $path );
@ unlink ( $targetPath );
copy ( __DIR__ . '/Fixtures/test.gif' , $path );
$file = new File ( $path );
$movedFile = $file -> move ( $targetDir , 'test.newname.gif' );
$this -> assertTrue ( file_exists ( $targetPath ));
$this -> assertFalse ( file_exists ( $path ));
$this -> assertEquals ( realpath ( $targetPath ), $movedFile -> getRealPath ());
@ unlink ( $targetPath );
}
public function getFilenameFixtures ()
{
return array (
array ( 'original.gif' , 'original.gif' ),
array ( '..\\..\\original.gif' , 'original.gif' ),
array ( '../../original.gif' , 'original.gif' ),
array ( 'фа йлfile.gif' , 'фа йлfile.gif' ),
array ( '..\\..\\фа йлfile.gif' , 'фа йлfile.gif' ),
array ( '../../фа йлfile.gif' , 'фа йлfile.gif' ),
);
}
/**
* @ dataProvider getFilenameFixtures
*/
public function testMoveWithNonLatinName ( $filename , $sanitizedFilename )
{
$path = __DIR__ . '/Fixtures/' . $sanitizedFilename ;
$targetDir = __DIR__ . '/Fixtures/directory/' ;
$targetPath = $targetDir . $sanitizedFilename ;
@ unlink ( $path );
@ unlink ( $targetPath );
copy ( __DIR__ . '/Fixtures/test.gif' , $path );
$file = new File ( $path );
$movedFile = $file -> move ( $targetDir , $filename );
$this -> assertInstanceOf ( 'Symfony\Component\HttpFoundation\File\File' , $movedFile );
$this -> assertTrue ( file_exists ( $targetPath ));
$this -> assertFalse ( file_exists ( $path ));
$this -> assertEquals ( realpath ( $targetPath ), $movedFile -> getRealPath ());
@ unlink ( $targetPath );
}
public function testMoveToAnUnexistentDirectory ()
{
$sourcePath = __DIR__ . '/Fixtures/test.copy.gif' ;
$targetDir = __DIR__ . '/Fixtures/directory/sub' ;
$targetPath = $targetDir . '/test.copy.gif' ;
@ unlink ( $sourcePath );
@ unlink ( $targetPath );
@ rmdir ( $targetDir );
copy ( __DIR__ . '/Fixtures/test.gif' , $sourcePath );
$file = new File ( $sourcePath );
$movedFile = $file -> move ( $targetDir );
$this -> assertFileExists ( $targetPath );
$this -> assertFileNotExists ( $sourcePath );
$this -> assertEquals ( realpath ( $targetPath ), $movedFile -> getRealPath ());
@ unlink ( $sourcePath );
@ unlink ( $targetPath );
@ rmdir ( $targetDir );
}
protected function createMockGuesser ( $path , $mimeType )
{
$guesser = $this -> getMock ( 'Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface' );
$guesser
-> expects ( $this -> once ())
-> method ( 'guess' )
-> with ( $this -> equalTo ( $path ))
-> will ( $this -> returnValue ( $mimeType ))
;
return $guesser ;
}
}