PageRenderTime 49ms CodeModel.GetById 27ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/ZendTest/Validator/File/MimeTypeTest.php

https://github.com/bate/zf2
PHP | 259 lines | 182 code | 32 blank | 45 comment | 5 complexity | 2abf393c2acc9c0a03a945fc3f82a5cf MD5 | raw file
  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_Validator
  9. */
  10. namespace ZendTest\Validator\File;
  11. use Zend\Validator\File;
  12. use Zend\Validator;
  13. /**
  14. * MimeType testbed
  15. *
  16. * @category Zend
  17. * @package Zend_Validator_File
  18. * @subpackage UnitTests
  19. * @group Zend_Validator
  20. */
  21. class MimeTypeTest extends \PHPUnit_Framework_TestCase
  22. {
  23. /**
  24. * Ensures that the validator follows expected behavior
  25. *
  26. * @return void
  27. */
  28. public function testBasic()
  29. {
  30. $valuesExpected = array(
  31. array(array('image/jpg', 'image/jpeg'), true),
  32. array('image', true),
  33. array('test/notype', false),
  34. array('image/gif, image/jpg, image/jpeg', true),
  35. array(array('image/vasa', 'image/jpg', 'image/jpeg'), true),
  36. array(array('image/jpg', 'image/jpeg', 'gif'), true),
  37. array(array('image/gif', 'gif'), false),
  38. array('image/jp', false),
  39. array('image/jpg2000', false),
  40. array('image/jpeg2000', false),
  41. );
  42. $filetest = __DIR__ . '/_files/picture.jpg';
  43. $files = array(
  44. 'name' => 'picture.jpg',
  45. 'type' => 'image/jpg',
  46. 'size' => 200,
  47. 'tmp_name' => $filetest,
  48. 'error' => 0
  49. );
  50. foreach ($valuesExpected as $element) {
  51. $options = array_shift($element);
  52. $expected = array_shift($element);
  53. $validator = new File\MimeType($options);
  54. $validator->enableHeaderCheck();
  55. $this->assertEquals(
  56. $expected,
  57. $validator->isValid($filetest, $files),
  58. "Test expected " . var_export($expected, 1) . " with " . var_export($options, 1)
  59. . "\nMessages: " . var_export($validator->getMessages(), 1)
  60. );
  61. }
  62. }
  63. /**
  64. * Ensures that getMimeType() returns expected value
  65. *
  66. * @return void
  67. */
  68. public function testGetMimeType()
  69. {
  70. $validator = new File\MimeType('image/gif');
  71. $this->assertEquals('image/gif', $validator->getMimeType());
  72. $validator = new File\MimeType(array('image/gif', 'video', 'text/test'));
  73. $this->assertEquals('image/gif,video,text/test', $validator->getMimeType());
  74. $validator = new File\MimeType(array('image/gif', 'video', 'text/test'));
  75. $this->assertEquals(array('image/gif', 'video', 'text/test'), $validator->getMimeType(true));
  76. }
  77. /**
  78. * Ensures that setMimeType() returns expected value
  79. *
  80. * @return void
  81. */
  82. public function testSetMimeType()
  83. {
  84. $validator = new File\MimeType('image/gif');
  85. $validator->setMimeType('image/jpeg');
  86. $this->assertEquals('image/jpeg', $validator->getMimeType());
  87. $this->assertEquals(array('image/jpeg'), $validator->getMimeType(true));
  88. $validator->setMimeType('image/gif, text/test');
  89. $this->assertEquals('image/gif,text/test', $validator->getMimeType());
  90. $this->assertEquals(array('image/gif', 'text/test'), $validator->getMimeType(true));
  91. $validator->setMimeType(array('video/mpeg', 'gif'));
  92. $this->assertEquals('video/mpeg,gif', $validator->getMimeType());
  93. $this->assertEquals(array('video/mpeg', 'gif'), $validator->getMimeType(true));
  94. }
  95. /**
  96. * Ensures that addMimeType() returns expected value
  97. *
  98. * @return void
  99. */
  100. public function testAddMimeType()
  101. {
  102. $validator = new File\MimeType('image/gif');
  103. $validator->addMimeType('text');
  104. $this->assertEquals('image/gif,text', $validator->getMimeType());
  105. $this->assertEquals(array('image/gif', 'text'), $validator->getMimeType(true));
  106. $validator->addMimeType('jpg, to');
  107. $this->assertEquals('image/gif,text,jpg,to', $validator->getMimeType());
  108. $this->assertEquals(array('image/gif', 'text', 'jpg', 'to'), $validator->getMimeType(true));
  109. $validator->addMimeType(array('zip', 'ti'));
  110. $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());
  111. $this->assertEquals(array('image/gif', 'text', 'jpg', 'to', 'zip', 'ti'), $validator->getMimeType(true));
  112. $validator->addMimeType('');
  113. $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());
  114. $this->assertEquals(array('image/gif', 'text', 'jpg', 'to', 'zip', 'ti'), $validator->getMimeType(true));
  115. }
  116. public function testSetAndGetMagicFile()
  117. {
  118. if (!extension_loaded('fileinfo')) {
  119. $this->markTestSkipped('This PHP Version has no finfo installed');
  120. }
  121. $validator = new File\MimeType('image/gif');
  122. $magic = getenv('magic');
  123. if (!empty($magic)) {
  124. $mimetype = $validator->getMagicFile();
  125. $this->assertEquals($magic, $mimetype);
  126. }
  127. $this->setExpectedException('Zend\Validator\Exception\InvalidArgumentException', 'could not be');
  128. $validator->setMagicFile('/unknown/magic/file');
  129. }
  130. public function testSetMagicFileWithinConstructor()
  131. {
  132. if (!extension_loaded('fileinfo')) {
  133. $this->markTestSkipped('This PHP Version has no finfo installed');
  134. }
  135. $this->setExpectedException('Zend\Validator\Exception\InvalidMagicMimeFileException', 'could not be used by ext/finfo');
  136. $validator = new File\MimeType(array('image/gif', 'magicFile' => __FILE__));
  137. }
  138. public function testOptionsAtConstructor()
  139. {
  140. $validator = new File\MimeType(array(
  141. 'image/gif',
  142. 'image/jpg',
  143. 'enableHeaderCheck' => true));
  144. $this->assertTrue($validator->getHeaderCheck());
  145. $this->assertEquals('image/gif,image/jpg', $validator->getMimeType());
  146. }
  147. /**
  148. * @group ZF-9686
  149. */
  150. public function testDualValidation()
  151. {
  152. $valuesExpected = array(
  153. array('image', true),
  154. );
  155. $filetest = __DIR__ . '/_files/picture.jpg';
  156. $files = array(
  157. 'name' => 'picture.jpg',
  158. 'type' => 'image/jpg',
  159. 'size' => 200,
  160. 'tmp_name' => $filetest,
  161. 'error' => 0
  162. );
  163. foreach ($valuesExpected as $element) {
  164. $options = array_shift($element);
  165. $expected = array_shift($element);
  166. $validator = new File\MimeType($options);
  167. $validator->enableHeaderCheck();
  168. $this->assertEquals(
  169. $expected,
  170. $validator->isValid($filetest, $files),
  171. "Test expected " . var_export($expected, 1) . " with " . var_export($options, 1)
  172. . "\nMessages: " . var_export($validator->getMessages(), 1)
  173. );
  174. $validator = new File\MimeType($options);
  175. $validator->enableHeaderCheck();
  176. $this->assertEquals(
  177. $expected,
  178. $validator->isValid($filetest, $files),
  179. "Test expected " . var_export($expected, 1) . " with " . var_export($options, 1)
  180. . "\nMessages: " . var_export($validator->getMessages(), 1)
  181. );
  182. }
  183. }
  184. /**
  185. * @group ZF-11258
  186. */
  187. public function testZF11258()
  188. {
  189. $validator = new File\MimeType(array(
  190. 'image/gif',
  191. 'image/jpg',
  192. 'headerCheck' => true));
  193. $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));
  194. $this->assertTrue(array_key_exists('fileMimeTypeNotReadable', $validator->getMessages()));
  195. $this->assertContains("'nofile.mo'", current($validator->getMessages()));
  196. }
  197. public function testDisableMagicFile()
  198. {
  199. $validator = new File\MimeType('image/gif');
  200. $magic = getenv('magic');
  201. if (!empty($magic)) {
  202. $mimetype = $validator->getMagicFile();
  203. $this->assertEquals($magic, $mimetype);
  204. }
  205. $validator->disableMagicFile(true);
  206. $this->assertTrue($validator->isMagicFileDisabled());
  207. if (!empty($magic)) {
  208. $mimetype = $validator->getMagicFile();
  209. $this->assertEquals($magic, $mimetype);
  210. }
  211. }
  212. /**
  213. * @group ZF-10461
  214. */
  215. public function testDisablingMagicFileByConstructor()
  216. {
  217. $files = array(
  218. 'name' => 'picture.jpg',
  219. 'size' => 200,
  220. 'tmp_name' => dirname(__FILE__) . '/_files/picture.jpg',
  221. 'error' => 0,
  222. 'magicFile' => false,
  223. );
  224. $validator = new File\MimeType($files);
  225. $this->assertFalse($validator->getMagicFile());
  226. }
  227. }