/tests/ZendTest/Validator/File/IsImageTest.php

https://github.com/cgmartin/zf2 · PHP · 208 lines · 132 code · 25 blank · 51 comment · 5 complexity · 11d01d74392adcbba092bff0d7c45658 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-2013 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. */
  9. namespace ZendTest\Validator\File;
  10. use Zend\Validator\File;
  11. /**
  12. * IsImage testbed
  13. *
  14. * @group Zend_Validator
  15. */
  16. class IsImageTest extends \PHPUnit_Framework_TestCase
  17. {
  18. protected function getMagicMime()
  19. {
  20. // As of PHP >= 5.3.11 and >= 5.4.1 the magic database format has changed.
  21. // http://doc.php.net/downloads/pdf/split/de/File-Information.pdf (page 11)
  22. if (version_compare(PHP_VERSION, '5.3.11', '<')
  23. || (version_compare(PHP_VERSION, '5.4', '>=')
  24. && version_compare(PHP_VERSION, '5.4.1', '<'))
  25. ) {
  26. return __DIR__ . '/_files/magic.lte.5.3.10.mime';
  27. }
  28. return __DIR__ . '/_files/magic.mime';
  29. }
  30. /**
  31. * @return array
  32. */
  33. public function basicBehaviorDataProvider()
  34. {
  35. $testFile = __DIR__ . '/_files/picture.jpg';
  36. $fileUpload = array(
  37. 'tmp_name' => $testFile, 'name' => basename($testFile),
  38. 'size' => 200, 'error' => 0, 'type' => 'image/jpeg'
  39. );
  40. return array(
  41. // Options, isValid Param, Expected value
  42. array(null, $fileUpload, true),
  43. array('jpeg', $fileUpload, true),
  44. array('test/notype', $fileUpload, false),
  45. array('image/gif, image/jpeg', $fileUpload, true),
  46. array(array('image/vasa', 'image/jpeg'), $fileUpload, true),
  47. array(array('image/jpeg', 'gif'), $fileUpload, true),
  48. array(array('image/gif', 'gif'), $fileUpload, false),
  49. array('image/jp', $fileUpload, false),
  50. array('image/jpg2000', $fileUpload, false),
  51. array('image/jpeg2000', $fileUpload, false),
  52. );
  53. }
  54. /**
  55. * Ensures that the validator follows expected behavior
  56. *
  57. * @dataProvider basicBehaviorDataProvider
  58. * @return void
  59. */
  60. public function testBasic($options, $isValidParam, $expected)
  61. {
  62. $validator = new File\IsImage($options);
  63. $validator->enableHeaderCheck();
  64. $this->assertEquals($expected, $validator->isValid($isValidParam));
  65. }
  66. /**
  67. * Ensures that the validator follows expected behavior for legacy Zend\Transfer API
  68. *
  69. * @dataProvider basicBehaviorDataProvider
  70. * @return void
  71. */
  72. public function testLegacy($options, $isValidParam, $expected)
  73. {
  74. if (is_array($isValidParam)) {
  75. $validator = new File\IsImage($options);
  76. $validator->enableHeaderCheck();
  77. $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));
  78. }
  79. }
  80. /**
  81. * Ensures that getMimeType() returns expected value
  82. *
  83. * @return void
  84. */
  85. public function testGetMimeType()
  86. {
  87. $validator = new File\IsImage('image/gif');
  88. $this->assertEquals('image/gif', $validator->getMimeType());
  89. $validator = new File\IsImage(array('image/gif', 'video', 'text/test'));
  90. $this->assertEquals('image/gif,video,text/test', $validator->getMimeType());
  91. $validator = new File\IsImage(array('image/gif', 'video', 'text/test'));
  92. $this->assertEquals(array('image/gif', 'video', 'text/test'), $validator->getMimeType(true));
  93. }
  94. /**
  95. * Ensures that setMimeType() returns expected value
  96. *
  97. * @return void
  98. */
  99. public function testSetMimeType()
  100. {
  101. $validator = new File\IsImage('image/gif');
  102. $validator->setMimeType('image/jpeg');
  103. $this->assertEquals('image/jpeg', $validator->getMimeType());
  104. $this->assertEquals(array('image/jpeg'), $validator->getMimeType(true));
  105. $validator->setMimeType('image/gif, text/test');
  106. $this->assertEquals('image/gif,text/test', $validator->getMimeType());
  107. $this->assertEquals(array('image/gif', 'text/test'), $validator->getMimeType(true));
  108. $validator->setMimeType(array('video/mpeg', 'gif'));
  109. $this->assertEquals('video/mpeg,gif', $validator->getMimeType());
  110. $this->assertEquals(array('video/mpeg', 'gif'), $validator->getMimeType(true));
  111. }
  112. /**
  113. * Ensures that addMimeType() returns expected value
  114. *
  115. * @return void
  116. */
  117. public function testAddMimeType()
  118. {
  119. $validator = new File\IsImage('image/gif');
  120. $validator->addMimeType('text');
  121. $this->assertEquals('image/gif,text', $validator->getMimeType());
  122. $this->assertEquals(array('image/gif', 'text'), $validator->getMimeType(true));
  123. $validator->addMimeType('jpg, to');
  124. $this->assertEquals('image/gif,text,jpg,to', $validator->getMimeType());
  125. $this->assertEquals(array('image/gif', 'text', 'jpg', 'to'), $validator->getMimeType(true));
  126. $validator->addMimeType(array('zip', 'ti'));
  127. $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());
  128. $this->assertEquals(array('image/gif', 'text', 'jpg', 'to', 'zip', 'ti'), $validator->getMimeType(true));
  129. $validator->addMimeType('');
  130. $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());
  131. $this->assertEquals(array('image/gif', 'text', 'jpg', 'to', 'zip', 'ti'), $validator->getMimeType(true));
  132. }
  133. /**
  134. * @ZF-8111
  135. */
  136. public function testErrorMessages()
  137. {
  138. $files = array(
  139. 'name' => 'picture.jpg',
  140. 'type' => 'image/jpeg',
  141. 'size' => 200,
  142. 'tmp_name' => __DIR__ . '/_files/picture.jpg',
  143. 'error' => 0
  144. );
  145. $validator = new File\IsImage('test/notype');
  146. $validator->enableHeaderCheck();
  147. $this->assertFalse($validator->isValid(__DIR__ . '/_files/picture.jpg', $files));
  148. $error = $validator->getMessages();
  149. $this->assertTrue(array_key_exists('fileIsImageFalseType', $error));
  150. }
  151. public function testOptionsAtConstructor()
  152. {
  153. if (!extension_loaded('fileinfo')) {
  154. $this->markTestSkipped('This PHP Version has no finfo installed');
  155. }
  156. $magicFile = $this->getMagicMime();
  157. $validator = new File\IsImage(array(
  158. 'image/gif',
  159. 'image/jpg',
  160. 'magicFile' => $magicFile,
  161. 'enableHeaderCheck' => true));
  162. $this->assertEquals($magicFile, $validator->getMagicFile());
  163. $this->assertTrue($validator->getHeaderCheck());
  164. $this->assertEquals('image/gif,image/jpg', $validator->getMimeType());
  165. }
  166. public function testNonMimeOptionsAtConstructorStillSetsDefaults()
  167. {
  168. $validator = new File\IsImage(array(
  169. 'enableHeaderCheck' => true,
  170. ));
  171. $this->assertNotEmpty($validator->getMimeType());
  172. }
  173. /**
  174. * @group ZF-11258
  175. */
  176. public function testZF11258()
  177. {
  178. $validator = new File\IsImage();
  179. $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));
  180. $this->assertTrue(array_key_exists('fileIsImageNotReadable', $validator->getMessages()));
  181. $this->assertContains("does not exist", current($validator->getMessages()));
  182. }
  183. }