You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
405 lines
16 KiB
405 lines
16 KiB
<?php |
|
|
|
/** |
|
* @file |
|
* Unit tests for the MimeDetect class. |
|
*/ |
|
|
|
// Include the file_mimetype_mapping function. |
|
$path = "/includes/file.mimetypes.inc"; |
|
require_once DRUPAL_ROOT . $path; |
|
|
|
class MimeClassTestCase extends DrupalWebTestCase { |
|
|
|
/** |
|
* Get test information for display. |
|
* |
|
* @see DrupalWebTestCase::setUp() |
|
*/ |
|
public static function getInfo() { |
|
return array( |
|
'name' => 'MimeDetect Test', |
|
'description' => 'Ensure that the class MimeDetect works as expected', |
|
'group' => 'Islandora', |
|
); |
|
} |
|
|
|
/** |
|
* Call the parent setup function for the test. |
|
*/ |
|
public function setUp() { |
|
parent::setUp(array('islandora')); |
|
} |
|
|
|
/** |
|
* Test all mime and extension types. |
|
*/ |
|
public function testMimeTypes() { |
|
// Create a mime array to assert against the MimeDetect Class. |
|
$mime_type_list = array( |
|
'ez' => 'application/andrew-inset' , |
|
'atom' => 'application/atom' , |
|
'atomcat' => 'application/atomcat+xml' , |
|
'atomsrv' => 'application/atomserv+xml' , |
|
'pcap' => 'application/cap' , |
|
'cu' => 'application/cu-seeme' , |
|
'tsp' => 'application/dsptype' , |
|
'hta' => 'application/hta' , |
|
'jar' => 'application/java-archive' , |
|
'ser' => 'application/java-serialized-object' , |
|
'class' => 'application/java-vm' , |
|
'hqx' => 'application/mac-binhex40' , |
|
'nb' => 'application/mathematica' , |
|
'mdb' => 'application/msaccess' , |
|
'doc' => 'application/msword' , |
|
'bin' => 'application/octet-stream' , |
|
'oda' => 'application/oda' , |
|
'ogx' => 'application/ogg' , |
|
'pdf' => 'application/pdf' , |
|
'key' => 'application/pgp-keys' , |
|
'pgp' => 'application/pgp-signature' , |
|
'prf' => 'application/pics-rules' , |
|
'ps' => 'application/postscript' , |
|
'rar' => 'application/rar' , |
|
'rdf' => 'application/rdf+xml' , |
|
'rss' => 'application/rss+xml' , |
|
'rtf' => 'application/rtf' , |
|
'smil' => 'application/smil' , |
|
'cdy' => 'application/vnd.cinderella' , |
|
'kml' => 'application/vnd.google-earth.kml+xml' , |
|
'kmz' => 'application/vnd.google-earth.kmz' , |
|
'xul' => 'application/vnd.mozilla.xul+xml' , |
|
'xls' => 'application/vnd.ms-excel' , |
|
'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12' , |
|
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' , |
|
'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12' , |
|
'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12' , |
|
'cat' => 'application/vnd.ms-pki.seccat' , |
|
'stl' => 'application/vnd.ms-pki.stl' , |
|
'ppt' => 'application/vnd.ms-powerpoint' , |
|
'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12' , |
|
'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' , |
|
'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' , |
|
'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12' , |
|
'docm' => 'application/vnd.ms-word.document.macroEnabled.12' , |
|
'dotm' => 'application/vnd.ms-word.template.macroEnabled.12' , |
|
'xps' => 'application/vnd.ms-xpsdocument' , |
|
'odc' => 'application/vnd.oasis.opendocument.chart' , |
|
'odb' => 'application/vnd.oasis.opendocument.database' , |
|
'odf' => 'application/vnd.oasis.opendocument.formula' , |
|
'odg' => 'application/vnd.oasis.opendocument.graphics' , |
|
'otg' => 'application/vnd.oasis.opendocument.graphics-template' , |
|
'odi' => 'application/vnd.oasis.opendocument.image' , |
|
'odp' => 'application/vnd.oasis.opendocument.presentation' , |
|
'otp' => 'application/vnd.oasis.opendocument.presentation-template' , |
|
'ods' => 'application/vnd.oasis.opendocument.spreadsheet' , |
|
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template' , |
|
'odt' => 'application/vnd.oasis.opendocument.text' , |
|
'odm' => 'application/vnd.oasis.opendocument.text-master' , |
|
'ott' => 'application/vnd.oasis.opendocument.text-template' , |
|
'oth' => 'application/vnd.oasis.opendocument.text-web' , |
|
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation' , |
|
'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' , |
|
'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template' , |
|
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' , |
|
'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' , |
|
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' , |
|
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' , |
|
'cod' => 'application/vnd.rim.cod' , |
|
'mmf' => 'application/vnd.smaf' , |
|
'sdc' => 'application/vnd.stardivision.calc' , |
|
'sds' => 'application/vnd.stardivision.chart' , |
|
'sda' => 'application/vnd.stardivision.draw' , |
|
'sdd' => 'application/vnd.stardivision.impress' , |
|
'sdw' => 'application/vnd.stardivision.writer' , |
|
'sgl' => 'application/vnd.stardivision.writer-global' , |
|
'sxc' => 'application/vnd.sun.xml.calc' , |
|
'stc' => 'application/vnd.sun.xml.calc.template' , |
|
'sxd' => 'application/vnd.sun.xml.draw' , |
|
'std' => 'application/vnd.sun.xml.draw.template' , |
|
'sxi' => 'application/vnd.sun.xml.impress' , |
|
'sti' => 'application/vnd.sun.xml.impress.template' , |
|
'sxm' => 'application/vnd.sun.xml.math' , |
|
'sxw' => 'application/vnd.sun.xml.writer' , |
|
'sxg' => 'application/vnd.sun.xml.writer.global' , |
|
'stw' => 'application/vnd.sun.xml.writer.template' , |
|
'sis' => 'application/vnd.symbian.install' , |
|
'vsd' => 'application/vnd.visio' , |
|
'wbxml' => 'application/vnd.wap.wbxml' , |
|
'wmlc' => 'application/vnd.wap.wmlc' , |
|
'wmlsc' => 'application/vnd.wap.wmlscriptc' , |
|
'wpd' => 'application/wordperfect' , |
|
'wp5' => 'application/wordperfect5.1' , |
|
'wk' => 'application/x-123' , |
|
'7z' => 'application/x-7z-compressed' , |
|
'abw' => 'application/x-abiword' , |
|
'dmg' => 'application/x-apple-diskimage' , |
|
'bcpio' => 'application/x-bcpio' , |
|
'torrent' => 'application/x-bittorrent' , |
|
'cab' => 'application/x-cab' , |
|
'cbr' => 'application/x-cbr' , |
|
'cbz' => 'application/x-cbz' , |
|
'cdf' => 'application/x-cdf' , |
|
'vcd' => 'application/x-cdlink' , |
|
'pgn' => 'application/x-chess-pgn' , |
|
'cpio' => 'application/x-cpio' , |
|
'deb' => 'application/x-debian-package' , |
|
'dcr' => 'application/x-director' , |
|
'dms' => 'application/x-dms' , |
|
'wad' => 'application/x-doom' , |
|
'dvi' => 'application/x-dvi' , |
|
'flac' => 'application/x-flac' , |
|
'mm' => 'application/x-freemind' , |
|
'spl' => 'application/x-futuresplash' , |
|
'gnumeric' => 'application/x-gnumeric' , |
|
'sgf' => 'application/x-go-sgf' , |
|
'gcf' => 'application/x-graphing-calculator' , |
|
'tgz' => 'application/x-gtar' , |
|
'hdf' => 'application/x-hdf' , |
|
'rhtml' => 'application/x-httpd-eruby' , |
|
'php' => 'application/x-httpd-php' , |
|
'phps' => 'application/x-httpd-php-source' , |
|
'php3' => 'application/x-httpd-php3' , |
|
'php3p' => 'application/x-httpd-php3-preprocessed' , |
|
'php4' => 'application/x-httpd-php4' , |
|
'ica' => 'application/x-ica' , |
|
'isp' => 'application/x-internet-signup' , |
|
'iii' => 'application/x-iphone' , |
|
'iso' => 'application/x-iso9660-image' , |
|
'jnlp' => 'application/x-java-jnlp-file' , |
|
'js' => 'application/x-javascript' , |
|
'jmz' => 'application/x-jmol' , |
|
'chrt' => 'application/x-kchart' , |
|
'kil' => 'application/x-killustrator' , |
|
'skt' => 'application/x-koan' , |
|
'kpt' => 'application/x-kpresenter' , |
|
'ksp' => 'application/x-kspread' , |
|
'kwt' => 'application/x-kword' , |
|
'latex' => 'application/x-latex' , |
|
'lha' => 'application/x-lha' , |
|
'lyx' => 'application/x-lyx' , |
|
'lzh' => 'application/x-lzh' , |
|
'lzx' => 'application/x-lzx' , |
|
'fbdoc' => 'application/x-maker' , |
|
'mif' => 'application/x-mif' , |
|
'wmd' => 'application/x-ms-wmd' , |
|
'wmz' => 'application/x-ms-wmz' , |
|
'com' => 'application/x-msdos-program' , |
|
'msi' => 'application/x-msi' , |
|
'nc' => 'application/x-netcdf' , |
|
'pac' => 'application/x-ns-proxy-autoconfig' , |
|
'nwc' => 'application/x-nwc' , |
|
'o' => 'application/x-object' , |
|
'oza' => 'application/x-oz-application' , |
|
'p7r' => 'application/x-pkcs7-certreqresp' , |
|
'crl' => 'application/x-pkcs7-crl' , |
|
'pyc' => 'application/x-python-code' , |
|
'qtl' => 'application/x-quicktimeplayer' , |
|
'rpm' => 'application/x-redhat-package-manager' , |
|
'shar' => 'application/x-shar' , |
|
'swfl' => 'application/x-shockwave-flash' , |
|
'sit' => 'application/x-stuffit' , |
|
'sv4cpio' => 'application/x-sv4cpio' , |
|
'sv4crc' => 'application/x-sv4crc' , |
|
'tar' => 'application/x-tar' , |
|
'gf' => 'application/x-tex-gf' , |
|
'pk' => 'application/x-tex-pk' , |
|
'texinfo' => 'application/x-texinfo' , |
|
'old' => 'application/x-trash' , |
|
'tr' => 'application/x-troff' , |
|
'man' => 'application/x-troff-man' , |
|
'me' => 'application/x-troff-me' , |
|
'ms' => 'application/x-troff-ms' , |
|
'ustar' => 'application/x-ustar' , |
|
'src' => 'application/x-wais-source' , |
|
'wz' => 'application/x-wingz' , |
|
'crt' => 'application/x-x509-ca-cert' , |
|
'xcf' => 'application/x-xcf' , |
|
'fig' => 'application/x-xfig' , |
|
'xpi' => 'application/x-xpinstall' , |
|
'xhtml' => 'application/xhtml+xml' , |
|
'xsl' => 'application/xml' , |
|
'zip' => 'application/zip' , |
|
'snd' => 'audio/basic' , |
|
'kar' => 'audio/midi' , |
|
'mp2' => 'audio/mpeg' , |
|
'spx' => 'audio/ogg' , |
|
'sid' => 'audio/prs.sid' , |
|
'aifc' => 'audio/x-aiff' , |
|
'gsm' => 'audio/x-gsm' , |
|
'm3u' => 'audio/x-mpegurl' , |
|
'wax' => 'audio/x-ms-wax' , |
|
'wma' => 'audio/x-ms-wma' , |
|
'ram' => 'audio/x-pn-realaudio' , |
|
'ra' => 'audio/x-realaudio' , |
|
'pls' => 'audio/x-scpls' , |
|
'sd2' => 'audio/x-sd2' , |
|
'wav' => 'audio/x-wav' , |
|
'alc' => 'chemical/x-alchemy' , |
|
'cache' => 'chemical/x-cache' , |
|
'csf' => 'chemical/x-cache-csf' , |
|
'ctab' => 'chemical/x-cactvs-binary' , |
|
'cdx' => 'chemical/x-cdx' , |
|
'cer' => 'chemical/x-cerius' , |
|
'c3d' => 'chemical/x-chem3d' , |
|
'chm' => 'chemical/x-chemdraw' , |
|
'cif' => 'chemical/x-cif' , |
|
'cmdf' => 'chemical/x-cmdf' , |
|
'cml' => 'chemical/x-cml' , |
|
'cpa' => 'chemical/x-compass' , |
|
'bsd' => 'chemical/x-crossfire' , |
|
'csm' => 'chemical/x-csml' , |
|
'ctx' => 'chemical/x-ctx' , |
|
'cef' => 'chemical/x-cxf' , |
|
'embl' => 'chemical/x-embl-dl-nucleotide' , |
|
'spc' => 'chemical/x-galactic-spc' , |
|
'gamin' => 'chemical/x-gamess-input' , |
|
'fch' => 'chemical/x-gaussian-checkpoint' , |
|
'cub' => 'chemical/x-gaussian-cube' , |
|
'gjc' => 'chemical/x-gaussian-input' , |
|
'gal' => 'chemical/x-gaussian-log' , |
|
'gcg' => 'chemical/x-gcg8-sequence' , |
|
'gen' => 'chemical/x-genbank' , |
|
'hin' => 'chemical/x-hin' , |
|
'ist' => 'chemical/x-isostar' , |
|
'jdx' => 'chemical/x-jcamp-dx' , |
|
'kin' => 'chemical/x-kinemage' , |
|
'mcm' => 'chemical/x-macmolecule' , |
|
'mmod' => 'chemical/x-macromodel-input' , |
|
'mol' => 'chemical/x-mdl-molfile' , |
|
'rd' => 'chemical/x-mdl-rdfile' , |
|
'rxn' => 'chemical/x-mdl-rxnfile' , |
|
'sd' => 'chemical/x-mdl-sdfile' , |
|
'tgf' => 'chemical/x-mdl-tgf' , |
|
'mcif' => 'chemical/x-mmcif' , |
|
'mol2' => 'chemical/x-mol2' , |
|
'b' => 'chemical/x-molconn-Z' , |
|
'mop' => 'chemical/x-mopac-input' , |
|
'moo' => 'chemical/x-mopac-out' , |
|
'mvb' => 'chemical/x-mopac-vib' , |
|
'prt' => 'chemical/x-ncbi-asn1-ascii' , |
|
'val' => 'chemical/x-ncbi-asn1-binary' , |
|
'asn' => 'chemical/x-ncbi-asn1-spec' , |
|
'pdb' => 'chemical/x-pdb' , |
|
'ros' => 'chemical/x-rosdal' , |
|
'sw' => 'chemical/x-swissprot' , |
|
'vms' => 'chemical/x-vamas-iso14976' , |
|
'vmd' => 'chemical/x-vmd' , |
|
'xtel' => 'chemical/x-xtel' , |
|
'xyz' => 'chemical/x-xyz' , |
|
'gif' => 'image/gif' , |
|
'ief' => 'image/ief' , |
|
'jpg' => 'image/jpeg' , |
|
'pcx' => 'image/pcx' , |
|
'png' => 'image/png' , |
|
'svg' => 'image/svg+xml' , |
|
'tiff' => 'image/tiff' , |
|
'djv' => 'image/vnd.djvu' , |
|
'ico' => 'image/vnd.microsoft.icon' , |
|
'wbmp' => 'image/vnd.wap.wbmp' , |
|
'ras' => 'image/x-cmu-raster' , |
|
'cdr' => 'image/x-coreldraw' , |
|
'pat' => 'image/x-coreldrawpattern' , |
|
'cdt' => 'image/x-coreldrawtemplate' , |
|
'cpt' => 'image/x-corelphotopaint' , |
|
'art' => 'image/x-jg' , |
|
'jng' => 'image/x-jng' , |
|
'bmp' => 'image/x-ms-bmp' , |
|
'psd' => 'image/x-photoshop' , |
|
'pnm' => 'image/x-portable-anymap' , |
|
'pbm' => 'image/x-portable-bitmap' , |
|
'pgm' => 'image/x-portable-graymap' , |
|
'ppm' => 'image/x-portable-pixmap' , |
|
'rgb' => 'image/x-rgb' , |
|
'xbm' => 'image/x-xbitmap' , |
|
'xpm' => 'image/x-xpixmap' , |
|
'xwd' => 'image/x-xwindowdump' , |
|
'eml' => 'message/rfc822' , |
|
'iges' => 'model/iges' , |
|
'mesh' => 'model/mesh' , |
|
'ics' => 'text/calendar' , |
|
'css' => 'text/css' , |
|
'csv' => 'text/csv' , |
|
'323' => 'text/h323' , |
|
'shtml' => 'text/html' , |
|
'uls' => 'text/iuls' , |
|
'mml' => 'text/mathml' , |
|
'asc' => 'text/plain' , |
|
'rtx' => 'text/richtext' , |
|
'sct' => 'text/scriptlet' , |
|
'tsv' => 'text/tab-separated-values' , |
|
'tm' => 'text/texmacs' , |
|
'jad' => 'text/vnd.sun.j2me.app-descriptor' , |
|
'wml' => 'text/vnd.wap.wml' , |
|
'wmls' => 'text/vnd.wap.wmlscript' , |
|
'bib' => 'text/x-bibtex' , |
|
'boo' => 'text/x-boo' , |
|
'hxx' => 'text/x-c++hdr' , |
|
'c++' => 'text/x-c++src' , |
|
'h' => 'text/x-chdr' , |
|
'htc' => 'text/x-component' , |
|
'csh' => 'text/x-csh' , |
|
'c' => 'text/x-csrc' , |
|
'diff' => 'text/x-diff' , |
|
'd' => 'text/x-dsrc' , |
|
'hs' => 'text/x-haskell' , |
|
'java' => 'text/x-java' , |
|
'lhs' => 'text/x-literate-haskell' , |
|
'moc' => 'text/x-moc' , |
|
'p' => 'text/x-pascal' , |
|
'gcd' => 'text/x-pcs-gcd' , |
|
'pl' => 'text/x-perl' , |
|
'py' => 'text/x-python' , |
|
'etx' => 'text/x-setext' , |
|
'sh' => 'text/x-sh' , |
|
'tcl' => 'text/x-tcl' , |
|
'tex' => 'text/x-tex' , |
|
'vcs' => 'text/x-vcalendar' , |
|
'vcf' => 'text/x-vcard' , |
|
'3gp' => 'video/3gpp' , |
|
'dl' => 'video/dl' , |
|
'dv' => 'video/dv' , |
|
'fli' => 'video/fli' , |
|
'gl' => 'video/gl' , |
|
'f4p' => 'video/mp4' , |
|
'mpg' => 'video/mpeg' , |
|
'ogv' => 'video/ogg' , |
|
'mov' => 'video/quicktime' , |
|
'mxu' => 'video/vnd.mpegurl' , |
|
'lsx' => 'video/x-la-asf' , |
|
'mng' => 'video/x-mng' , |
|
'asf' => 'video/x-ms-asf' , |
|
'wm' => 'video/x-ms-wm' , |
|
'wmv' => 'video/x-ms-wmv' , |
|
'wmx' => 'video/x-ms-wmx' , |
|
'wvx' => 'video/x-ms-wvx' , |
|
'avi' => 'video/x-msvideo' , |
|
'movie' => 'video/x-sgi-movie' , |
|
'ice' => 'x-conference/x-cooltalk' , |
|
'sisx' => 'x-epoc/x-sisx-app' , |
|
'vrml' => 'x-world/x-vrml' , |
|
'f4b' => 'audio/mp4' , |
|
'flv' => 'video/x-flv' , |
|
'm4v' => 'video/x-m4v'); |
|
|
|
// Insantiate the mime class. |
|
$mime_detect = new MimeDetect(); |
|
|
|
// Test the mapping list. |
|
foreach ($mime_type_list as $ext => $type) { |
|
$detected_ext = $mime_detect->getExtension($type); |
|
$detected_mimetype = $mime_detect->getMimetype($ext); |
|
$this->assertEqual($detected_ext, $ext, "The detected extension:$detected_ext matched the expected extension:$ext"); |
|
$this->assertEqual($detected_mimetype, $type, "The detected mimetype:$detected_mimetype, matched the expected mimetype:$type."); |
|
} |
|
|
|
// Test invalid mime type. |
|
$result = $mime_detect->getExtension("obviously_not_a_valid_mimetype"); |
|
$default = MimeDetect::DEFAULT_EXTENSION; |
|
$this->assertEqual($result, $default, "MimeDetect returned:$result which should match generic mimetype:$default when an invalid extension was given."); |
|
// Test invalid extension. |
|
$result = $mime_detect->getMimetype("banana.aqswswswerawerqfasdzc"); |
|
$default = MimeDetect::DEFAULT_MIMETYPE; |
|
$this->assertEqual($result, $default, "MimeDetect returned:$result a generic extension which should match:$default."); |
|
} |
|
}
|
|
|