public function testFileField() { $p_small = array('size' => 123, 'data' => (object) array('dummy' => true), 'name' => 'uploadfield', 'filename' => 'small_file.txt', 'of_type' => 'FILE', 'type' => 'text/plain'); $p_big = array('size' => 123123123, 'data' => (object) array('dummy' => true), 'filename' => 'big_file.mpg', 'name' => 'uploadfile', 'of_type' => 'FILE', 'type' => 'video/mp4'); $no_size = $p_small; unset($no_size['size']); $no_filename = $p_small; unset($no_filename['filename']); $filename_empty = $p_small; $filename_empty['filename'] = ''; $size_empty = $p_small; $size_empty['size'] = 0; $field = new field\File(); $data = $field->clean($p_small); $this->assertEquals($p_small, $data); $data = $field->clean($p_big); $this->assertEquals($p_big, $data); $this->assertEquals(null, $field->clean('')); $bads = array($no_size, $no_filename, $filename_empty, $size_empty); foreach ($bads as $bad) { try { $bad = $field->clean($bad); } catch (Invalid $e) { continue; } $this->fail(sprintf('This value should be bad: %s.', $bad)); } $field = new field\File(array('max_length' => 12)); $catched = false; try { $bad = $field->clean($p_small); } catch (Invalid $e) { $catched = true; } if (!$catched) { $this->fail('The name is too long.'); } }