PageRenderTime 54ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/cases/libs/mime_type.test.php

https://github.com/agborkowski/media
PHP | 219 lines | 137 code | 16 blank | 66 comment | 0 complexity | c22ba68cc975608a6056ae1e827e2ec9 MD5 | raw file
  1. <?php
  2. /**
  3. * Mime Type Test Case File
  4. *
  5. * Copyright (c) 2007-2010 David Persson
  6. *
  7. * Distributed under the terms of the MIT License.
  8. * Redistributions of files must retain the above copyright notice.
  9. *
  10. * PHP version 5
  11. * CakePHP version 1.3
  12. *
  13. * @package media
  14. * @subpackage media.tests.cases.libs
  15. * @author David Persson <davidpersson@gmx.de>
  16. * @copyright 2007-2010 David Persson <davidpersson@gmx.de>
  17. * @license http://www.opensource.org/licenses/mit-license.php The MIT License
  18. * @link http://github.com/davidpersson/media
  19. */
  20. App::import('Lib', 'Media.MimeType');
  21. require_once dirname(dirname(dirname(__FILE__))) . DS . 'fixtures' . DS . 'test_data.php';
  22. /**
  23. * Mime Type Test Case Class
  24. *
  25. * @package media
  26. * @subpackage media.tests.cases.libs
  27. */
  28. class MimeTypeTest extends CakeTestCase {
  29. function setUp() {
  30. $this->TestData = new TestData();
  31. }
  32. function tearDown() {
  33. $this->TestData->flushFiles();
  34. }
  35. function testSimplify() {
  36. MimeType::config('magic', array('engine' => false));
  37. MimeType::config('glob', array('engine' => false));
  38. $this->assertEqual(MimeType::simplify('application/x-pdf'), 'application/pdf');
  39. $this->assertEqual(MimeType::simplify('x-inode/x-directory'), 'inode/directory');
  40. $this->assertEqual(MimeType::simplify('application/octet-stream; encoding=compress'), 'application/octet-stream');
  41. $this->assertEqual(MimeType::simplify('application/x-test; encoding=compress'), 'application/test');
  42. $this->assertEqual(MimeType::simplify('text/plain; charset=iso-8859-1'), 'text/plain');
  43. $this->assertEqual(MimeType::simplify('text/plain charset=us-ascii'), 'text/plain');
  44. }
  45. function testGuessTypeFileinfoShippedGlob() {
  46. $this->skipUnless(extension_loaded('fileinfo'), '%s. Fileinfo extension not loaded.');
  47. MimeType::config('magic', array(
  48. 'engine' => 'fileinfo'
  49. ));
  50. MimeType::config('glob', array(
  51. 'engine' => 'core',
  52. 'file' => dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'vendors' . DS . 'mime_glob.db'
  53. ));
  54. /* Some tests have been commented (if not otherwise stated) because of missing support the extension */
  55. $this->assertEqual(MimeType::guessType($this->TestData->getFile('3gp.snippet.3gp')), 'video/3gpp');
  56. $this->assertEqual(MimeType::guessType($this->TestData->getFile('ms.avi')), 'video/x-msvideo');
  57. $this->assertEqual(MimeType::guessType($this->TestData->getFile('bzip2.snippet.bz2')), 'application/x-bzip');
  58. $this->assertEqual(MimeType::guessType($this->TestData->getFile('video.snippet.mp4')), 'video/mp4');
  59. $this->assertEqual(MimeType::guessType($this->TestData->getFile('css.snippet.css')), 'text/css');
  60. $this->assertEqual(MimeType::guessType($this->TestData->getFile('flac.snippet.flac')), 'audio/x-flac');
  61. $this->assertEqual(MimeType::guessType($this->TestData->getFile('flash.snippet.swf')), 'application/x-shockwave-flash');
  62. $this->assertEqual(MimeType::guessType($this->TestData->getFile('image-gif.gif')), 'image/gif');
  63. $this->assertEqual(MimeType::guessType($this->TestData->getFile('gzip.snippet.gz')), 'application/x-gzip');
  64. $this->assertEqual(MimeType::guessType($this->TestData->getFile('text-html.snippet.html')), 'text/html');
  65. $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-mpeg.snippet.mp3')), 'audio/mpeg');
  66. $this->assertEqual(MimeType::guessType($this->TestData->getFile('java.snippet.class')), 'application/x-java');
  67. $this->assertEqual(MimeType::guessType($this->TestData->getFile('javascript.snippet.js')), 'application/javascript');
  68. $this->assertEqual(MimeType::guessType($this->TestData->getFile('image-jpeg.snippet.jpg')), 'image/jpeg');
  69. $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-mpeg.snippet.mpeg')), 'video/mpeg');
  70. /* Fails with application/ogg vs. audio/ogg */
  71. // $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-ogg.snippet.ogg')), 'audio/ogg');
  72. /* Fails application<->text */
  73. //$this->assertEqual(MimeType::guessType(__FILE__), 'application/x-php');
  74. $this->assertEqual(MimeType::guessType($this->TestData->getFile('application-pdf.pdf')), 'application/pdf');
  75. $this->assertEqual(MimeType::guessType($this->TestData->getFile('image-png.png')), 'image/png');
  76. $this->assertEqual(MimeType::guessType($this->TestData->getFile('postscript.ps')), 'application/postscript');
  77. $this->assertEqual(MimeType::guessType($this->TestData->getFile('po.snippet.po')), 'text/x-gettext-translation');
  78. /* Fails with text/plain */
  79. // $this->assertEqual(MimeType::guessType($this->TestData->getFile('text-pot.snippet.pot')), 'text/x-gettext-translation-template');
  80. $this->assertEqual(MimeType::guessType($this->TestData->getFile('mo.snippet.mo')), 'application/x-gettext-translation');
  81. $this->assertEqual(MimeType::guessType($this->TestData->getFile('real-video.snippet.rm')), 'application/vnd.rn-realmedia');
  82. /* Fails application<->text */
  83. //$this->assertEqual(MimeType::guessType($this->TestData->getFile('text-rtf.snippet.rtf')), 'application/rtf');
  84. $this->assertEqual(MimeType::guessType($this->TestData->getFile('text-plain.snippet.txt')), 'text/plain');
  85. $this->assertEqual(MimeType::guessType($this->TestData->getFile('ms-word.snippet.doc')), 'application/msword');
  86. /* Fails */
  87. // $this->assertEqual(MimeType::guessType($this->TestData->getFile('ms-word.snippet.docx')), 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
  88. $this->assertEqual(MimeType::guessType($this->TestData->getFile('opendocument-writer.snippet.odt')), 'application/vnd.oasis.opendocument.text');
  89. $this->assertEqual(MimeType::guessType($this->TestData->getFile('tar.snippet.tar')), 'application/x-tar');
  90. $this->assertEqual(MimeType::guessType($this->TestData->getFile('wave.snippet.wav')), 'audio/x-wav');
  91. /* Fails application<->text */
  92. //$this->assertEqual(MimeType::guessType($this->TestData->getFile('text-xhtml.snippet.html')), 'application/xhtml+xml');
  93. $this->assertEqual(MimeType::guessType($this->TestData->getFile('xml.snippet.xml')), 'application/xml');
  94. $this->assertEqual(MimeType::guessType($this->TestData->getFile('generic-binary')), 'application/octet-stream');
  95. $this->assertEqual(MimeType::guessType($this->TestData->getFile('generic-text')), 'text/plain');
  96. $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-flash.snippet.flv')), 'video/x-flv');
  97. $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio.snippet.snd')), 'audio/basic');
  98. $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-apple.snippet.aiff')), 'audio/x-aiff');
  99. $this->assertEqual(MimeType::guessType($this->TestData->getFile('flash.snippet.swf')), 'application/x-shockwave-flash');
  100. /* Fails with audio/mp4 */
  101. // $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-mpeg.snippet.m4a')), 'audio/mpeg');
  102. $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-musepack.snippet.mpc')), 'audio/x-musepack');
  103. $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-quicktime.snippet.mov')), 'video/quicktime');
  104. $this->assertEqual(MimeType::guessType($this->TestData->getFile('video-ms.snippet.wmv')), 'video/x-ms-wmv');
  105. /* Fails with audio/mp4 */
  106. // $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio.snippet.aac')), 'audio/x-aac');
  107. $this->assertEqual(MimeType::guessType($this->TestData->getFile('audio-ms.snippet.wma')), 'audio/x-ms-wma');
  108. $this->assertEqual(MimeType::guessType($this->TestData->getFile('flac.snippet.flac')), 'audio/x-flac');//Fail only with freedesktop db!
  109. $this->assertEqual(MimeType::guessType('file.3gp'), 'video/3gpp');
  110. $this->assertEqual(MimeType::guessType('file.avi'), 'video/x-msvideo');
  111. $this->assertEqual(MimeType::guessType('file.bz2'), 'application/x-bzip');
  112. $this->assertEqual(MimeType::guessType('file.mp4'), 'video/mp4');
  113. $this->assertEqual(MimeType::guessType('file.css'), 'text/css');
  114. $this->assertEqual(MimeType::guessType('file.flac'), 'audio/x-flac');
  115. $this->assertEqual(MimeType::guessType('file.swf'), 'application/x-shockwave-flash');
  116. $this->assertEqual(MimeType::guessType('file.gif'), 'image/gif');
  117. $this->assertEqual(MimeType::guessType('file.gz'), 'application/x-gzip');
  118. $this->assertEqual(MimeType::guessType('file.html'), 'text/html');
  119. $this->assertEqual(MimeType::guessType('file.mp3'), 'audio/mpeg');
  120. $this->assertEqual(MimeType::guessType('file.class'), 'application/x-java');
  121. $this->assertEqual(MimeType::guessType('file.js'), 'application/javascript');
  122. $this->assertEqual(MimeType::guessType('file.jpg'), 'image/jpeg');
  123. $this->assertEqual(MimeType::guessType('file.mpeg'), 'video/mpeg');
  124. /* Fails with null */
  125. // $this->assertEqual(MimeType::guessType('file.ogg'), 'audio/ogg');
  126. /* Fails application<->text */
  127. //$this->assertEqual(MimeType::guessType('file.php'), 'application/x-php');
  128. $this->assertEqual(MimeType::guessType('file.pdf'), 'application/pdf');
  129. $this->assertEqual(MimeType::guessType('file.png'), 'image/png');
  130. $this->assertEqual(MimeType::guessType('file.ps'), 'application/postscript');
  131. $this->assertEqual(MimeType::guessType('file.po'), 'text/x-gettext-translation');
  132. /* Fails with null */
  133. // $this->assertEqual(MimeType::guessType('file.pot'), 'text/x-gettext-translation-template');
  134. $this->assertEqual(MimeType::guessType('file.mo'), 'application/x-gettext-translation');
  135. $this->assertEqual(MimeType::guessType('file.rm'), 'application/vnd.rn-realmedia');
  136. /* Fails application<->text */
  137. //$this->assertEqual(MimeType::guessType('file.rtf'), 'application/rtf');
  138. $this->assertEqual(MimeType::guessType('file.txt'), 'text/plain');
  139. $this->assertEqual(MimeType::guessType('file.doc'), 'application/msword');
  140. /* Fails with null */
  141. // $this->assertEqual(MimeType::guessType('file.docx'), 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
  142. $this->assertEqual(MimeType::guessType('file.odt'), 'application/vnd.oasis.opendocument.text');
  143. $this->assertEqual(MimeType::guessType('file.tar'), 'application/x-tar');
  144. $this->assertEqual(MimeType::guessType('file.wav'), 'audio/x-wav');
  145. $this->assertEqual(MimeType::guessType('file.xhtml'), 'application/xhtml+xml');
  146. $this->assertEqual(MimeType::guessType('file.xml'), 'application/xml');
  147. }
  148. function testGuessExtension() {
  149. MimeType::config('magic');
  150. MimeType::config('glob');
  151. $this->assertFalse(MimeType::guessExtension('i-m-not-a-mime-type'));
  152. $this->assertFalse(MimeType::guessExtension('/tmp/i-m-do-not-exist.txt'));
  153. /* Fails with null */
  154. // $this->assertEqual(MimeType::guessExtension('video/3gpp'), '3gp');
  155. // $this->assertEqual(MimeType::guessExtension('video/x-msvideo'), 'avi');
  156. $this->assertEqual(MimeType::guessExtension('application/x-bzip'), 'bz2');
  157. /* Fails with null */
  158. // $this->assertEqual(MimeType::guessExtension('video/mp4'), 'mp4');
  159. $this->assertEqual(MimeType::guessExtension('text/css'), 'css');
  160. $this->assertEqual(MimeType::guessExtension('audio/x-flac'), 'flac');
  161. $this->assertEqual(MimeType::guessExtension('application/x-shockwave-flash'), 'swf');
  162. $this->assertEqual(MimeType::guessExtension('image/gif'), 'gif');
  163. $this->assertEqual(MimeType::guessExtension('application/x-gzip'), 'gz');
  164. $this->assertEqual(MimeType::guessExtension('text/html'), 'html');
  165. $this->assertEqual(MimeType::guessExtension('audio/mpeg'), 'mp3');
  166. $this->assertEqual(MimeType::guessExtension('application/x-java'), 'class');
  167. $this->assertEqual(MimeType::guessExtension('application/javascript'), 'js');
  168. $this->assertEqual(MimeType::guessExtension('image/jpeg'), 'jpg');
  169. $this->assertEqual(MimeType::guessExtension('video/mpeg'), 'mpeg');
  170. /* Fails with ogg */
  171. // $this->assertEqual(MimeType::guessExtension('application/ogg'), 'ogx');
  172. /* Fails application<->text */
  173. // $this->assertEqual(MimeType::guessExtension('application/x-php'), 'php');
  174. $this->assertEqual(MimeType::guessExtension('application/pdf'), 'pdf');
  175. $this->assertEqual(MimeType::guessExtension('image/png'), 'png');
  176. $this->assertEqual(MimeType::guessExtension('application/postscript'), 'ps');
  177. $this->assertEqual(MimeType::guessExtension('text/x-gettext-translation'), 'po');
  178. $this->assertEqual(MimeType::guessExtension('text/x-gettext-translation-template'), 'pot');
  179. /* Fals with null */
  180. // $this->assertEqual(MimeType::guessExtension('application/x-gettext-translation'), 'mo');
  181. $this->assertEqual(MimeType::guessExtension('application/vnd.rn-realmedia'), 'rm');
  182. /* Fails application<->text */
  183. // $this->assertEqual(MimeType::guessExtension('application/rtf'), 'rtf');
  184. $this->assertEqual(MimeType::guessExtension('text/plain'), 'txt');
  185. $this->assertEqual(MimeType::guessExtension('application/msword'), 'doc');
  186. /* Fails with null */
  187. // $this->assertEqual(MimeType::guessExtension('application/vnd.openxmlformats-officedocument.wordprocessingml.document'), 'docx');
  188. $this->assertEqual(MimeType::guessExtension('application/vnd.oasis.opendocument.text'), 'odt');
  189. $this->assertEqual(MimeType::guessExtension('application/x-tar'), 'tar');
  190. $this->assertEqual(MimeType::guessExtension('audio/x-wav'), 'wav');
  191. $this->assertEqual(MimeType::guessExtension('application/xhtml+xml'), 'xhtml');
  192. $this->assertEqual(MimeType::guessExtension('application/xml'), 'xml');
  193. }
  194. function testGuessTypeParanoid() {
  195. $this->skipUnless(extension_loaded('fileinfo'), '%s. Fileinfo extension not loaded.');
  196. MimeType::config('magic', array('engine' => 'fileinfo'));
  197. MimeType::config('glob', array('engine' => 'core', 'file' => dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'vendors' . DS . 'mime_glob.db'));
  198. $file = $this->TestData->getFile(array('image-png.png' => TMP . 'image-png.jpg'));
  199. $this->assertEqual(MimeType::guessType($file, array('paranoid' => true)), 'image/png');
  200. $this->assertEqual(MimeType::guessType($file, array('paranoid' => false)), 'image/jpeg');
  201. }
  202. }
  203. ?>