<?php
namespace Symfony\Component\HttpFoundation\Tests;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\FileBag;
class FileBagTest extends \PHPUnit_Framework_TestCase {
public function testFileMustBeAnArrayOrUploadedFile() {
new FileBag(array(
'file' => 'foo',
));
}
public function testShouldConvertsUploadedFiles() {
$tmpFile = $this
->createTempFile();
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
$bag = new FileBag(array(
'file' => array(
'name' => basename($tmpFile),
'type' => 'text/plain',
'tmp_name' => $tmpFile,
'error' => 0,
'size' => 100,
),
));
$this
->assertEquals($file, $bag
->get('file'));
}
public function testShouldSetEmptyUploadedFilesToNull() {
$bag = new FileBag(array(
'file' => array(
'name' => '',
'type' => '',
'tmp_name' => '',
'error' => UPLOAD_ERR_NO_FILE,
'size' => 0,
),
));
$this
->assertNull($bag
->get('file'));
}
public function testShouldConvertUploadedFilesWithPhpBug() {
$tmpFile = $this
->createTempFile();
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
$bag = new FileBag(array(
'child' => array(
'name' => array(
'file' => basename($tmpFile),
),
'type' => array(
'file' => 'text/plain',
),
'tmp_name' => array(
'file' => $tmpFile,
),
'error' => array(
'file' => 0,
),
'size' => array(
'file' => 100,
),
),
));
$files = $bag
->all();
$this
->assertEquals($file, $files['child']['file']);
}
public function testShouldConvertNestedUploadedFilesWithPhpBug() {
$tmpFile = $this
->createTempFile();
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
$bag = new FileBag(array(
'child' => array(
'name' => array(
'sub' => array(
'file' => basename($tmpFile),
),
),
'type' => array(
'sub' => array(
'file' => 'text/plain',
),
),
'tmp_name' => array(
'sub' => array(
'file' => $tmpFile,
),
),
'error' => array(
'sub' => array(
'file' => 0,
),
),
'size' => array(
'sub' => array(
'file' => 100,
),
),
),
));
$files = $bag
->all();
$this
->assertEquals($file, $files['child']['sub']['file']);
}
public function testShouldNotConvertNestedUploadedFiles() {
$tmpFile = $this
->createTempFile();
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
$bag = new FileBag(array(
'image' => array(
'file' => $file,
),
));
$files = $bag
->all();
$this
->assertEquals($file, $files['image']['file']);
}
protected function createTempFile() {
return tempnam(sys_get_temp_dir() . '/form_test', 'FormTest');
}
protected function setUp() {
mkdir(sys_get_temp_dir() . '/form_test', 0777, true);
}
protected function tearDown() {
foreach (glob(sys_get_temp_dir() . '/form_test/*') as $file) {
unlink($file);
}
rmdir(sys_get_temp_dir() . '/form_test');
}
}