From ba09f53dc6bf707fc1f07df5befeb4ecbe33f86e Mon Sep 17 00:00:00 2001 From: Timm Friebe Date: Mon, 16 Feb 2026 00:35:19 +0100 Subject: [PATCH] Update MimeTypes, introduce precedence --- src/main/php/util/MimeType.class.php | 126 ++++++++---------- .../php/util/unittest/MimeTypeTest.class.php | 45 ++++++- 2 files changed, 95 insertions(+), 76 deletions(-) diff --git a/src/main/php/util/MimeType.class.php b/src/main/php/util/MimeType.class.php index f738f9cac..02d02603f 100755 --- a/src/main/php/util/MimeType.class.php +++ b/src/main/php/util/MimeType.class.php @@ -9,7 +9,10 @@ abstract class MimeType { private static $map= [ '.ez' => 'application/andrew-inset', + '.appinstaller' => 'application/appinstaller', '.aw' => 'application/applixware', + '.appx' => 'application/appx', + '.appxbundle' => 'application/appxbundle', '.atom' => 'application/atom+xml', '.atomcat' => 'application/atomcat+xml', '.atomdeleted' => 'application/atomdeleted+xml', @@ -17,6 +20,8 @@ abstract class MimeType { '.dwd' => 'application/atsc-dwd+xml', '.held' => 'application/atsc-held+xml', '.rsat' => 'application/atsc-rsat+xml', + '.aml' => 'application/automationml-aml+xml', + '.amlx' => 'application/automationml-amlx+zip', '.bdoc' => 'application/bdoc', '.xcs' => 'application/calendar+xml', '.ccxml' => 'application/ccxml+xml', @@ -28,19 +33,20 @@ abstract class MimeType { '.cdmiq' => 'application/cdmi-queue', '.cpl' => 'application/cpl+xml', '.cu' => 'application/cu-seeme', + '.cwl' => 'application/cwl', '.mpd' => 'application/dash+xml', '.mpp' => 'application/dash-patch+xml', '.davmount' => 'application/davmount+xml', '.dbk' => 'application/docbook+xml', '.dssc' => 'application/dssc+der', '.xdssc' => 'application/dssc+xml', - '.es' => 'application/ecmascript', '.ecma' => 'application/ecmascript', '.emma' => 'application/emma+xml', '.emotionml' => 'application/emotionml+xml', '.epub' => 'application/epub+zip', '.exi' => 'application/exi', '.exp' => 'application/express', + '.fdf' => 'application/fdf', '.fdt' => 'application/fdt+xml', '.pfr' => 'application/font-tdpfr', '.geojson' => 'application/geo+json', @@ -59,8 +65,7 @@ abstract class MimeType { '.ear' => 'application/java-archive', '.ser' => 'application/java-serialized-object', '.class' => 'application/java-vm', - '.js' => 'application/javascript', - '.mjs' => 'application/javascript', + '.js' => 'text/javascript', '.json' => 'application/json', '.map' => 'application/json', '.json5' => 'application/json5', @@ -89,8 +94,12 @@ abstract class MimeType { '.mods' => 'application/mods+xml', '.m21' => 'application/mp21', '.mp21' => 'application/mp21', + '.mp4' => 'video/mp4', + '.mpg4' => 'video/mp4', '.mp4s' => 'application/mp4', '.m4p' => 'application/mp4', + '.msix' => 'application/msix', + '.msixbundle' => 'application/msixbundle', '.doc' => 'application/msword', '.dot' => 'application/msword', '.mxf' => 'application/mxf', @@ -109,13 +118,13 @@ abstract class MimeType { '.dump' => 'application/octet-stream', '.elc' => 'application/octet-stream', '.deploy' => 'application/octet-stream', - '.exe' => 'application/octet-stream', - '.dll' => 'application/octet-stream', - '.deb' => 'application/octet-stream', - '.dmg' => 'application/octet-stream', - '.iso' => 'application/octet-stream', + '.exe' => 'application/x-msdos-program', + '.dll' => 'application/x-msdownload', + '.deb' => 'application/x-debian-package', + '.dmg' => 'application/x-apple-diskimage', + '.iso' => 'application/x-iso9660-image', '.img' => 'application/octet-stream', - '.msi' => 'application/octet-stream', + '.msi' => 'application/x-msdownload', '.msp' => 'application/octet-stream', '.msm' => 'application/octet-stream', '.buffer' => 'application/octet-stream', @@ -133,7 +142,6 @@ abstract class MimeType { '.pdf' => 'application/pdf', '.pgp' => 'application/pgp-encrypted', '.asc' => 'application/pgp-keys', - '.asc' => 'application/pgp-signature', '.sig' => 'application/pgp-signature', '.prf' => 'application/pics-rules', '.p10' => 'application/pkcs10', @@ -152,6 +160,7 @@ abstract class MimeType { '.ps' => 'application/postscript', '.provx' => 'application/provenance+xml', '.cww' => 'application/prs.cww', + '.xsf' => 'application/prs.xsf+xml', '.pskcxml' => 'application/pskc+xml', '.raml' => 'application/raml+yaml', '.rdf' => 'application/rdf+xml', @@ -169,7 +178,7 @@ abstract class MimeType { '.roa' => 'application/rpki-roa', '.rsd' => 'application/rsd+xml', '.rss' => 'application/rss+xml', - '.rtf' => 'application/rtf', + '.rtf' => 'text/rtf', '.sbml' => 'application/sbml+xml', '.scq' => 'application/scvp-cv-request', '.scs' => 'application/scvp-cv-response', @@ -187,6 +196,7 @@ abstract class MimeType { '.smil' => 'application/smil+xml', '.rq' => 'application/sparql-query', '.srx' => 'application/sparql-results+xml', + '.sql' => 'application/sql', '.gram' => 'application/srgs', '.grxml' => 'application/srgs+xml', '.sru' => 'application/sru+xml', @@ -219,7 +229,7 @@ abstract class MimeType { '.fxp' => 'application/vnd.adobe.fxp', '.fxpl' => 'application/vnd.adobe.fxp', '.xdp' => 'application/vnd.adobe.xdp+xml', - '.xfdf' => 'application/vnd.adobe.xfdf', + '.xfdf' => 'application/xfdf', '.age' => 'application/vnd.age', '.ahead' => 'application/vnd.ahead.space', '.azf' => 'application/vnd.airzip.filesecure.azf', @@ -303,7 +313,6 @@ abstract class MimeType { '.et3' => 'application/vnd.eszigno3+xml', '.ez2' => 'application/vnd.ezpix-album', '.ez3' => 'application/vnd.ezpix-package', - '.fdf' => 'application/vnd.fdf', '.mseed' => 'application/vnd.fdsn.mseed', '.seed' => 'application/vnd.fdsn.seed', '.dataless' => 'application/vnd.fdsn.seed', @@ -327,6 +336,7 @@ abstract class MimeType { '.fzs' => 'application/vnd.fuzzysheet', '.txd' => 'application/vnd.genomatix.tuxedo', '.ggb' => 'application/vnd.geogebra.file', + '.ggs' => 'application/vnd.geogebra.slides', '.ggt' => 'application/vnd.geogebra.tool', '.gex' => 'application/vnd.geometry-explorer', '.gre' => 'application/vnd.geometry-explorer', @@ -339,6 +349,7 @@ abstract class MimeType { '.gsheet' => 'application/vnd.google-apps.spreadsheet', '.kml' => 'application/vnd.google-earth.kml+xml', '.kmz' => 'application/vnd.google-earth.kmz', + '.xdcf' => 'application/vnd.gov.sk.xmldatacontainer+xml', '.gqf' => 'application/vnd.grafeq', '.gqs' => 'application/vnd.grafeq', '.gac' => 'application/vnd.groove-account', @@ -412,7 +423,7 @@ abstract class MimeType { '.apr' => 'application/vnd.lotus-approach', '.pre' => 'application/vnd.lotus-freelance', '.nsf' => 'application/vnd.lotus-notes', - '.org' => 'application/vnd.lotus-organizer', + '.org' => 'text/x-org', '.scm' => 'application/vnd.lotus-screencam', '.lwp' => 'application/vnd.lotus-wordpro', '.portpkg' => 'application/vnd.macports.portpkg', @@ -454,7 +465,7 @@ abstract class MimeType { '.thmx' => 'application/vnd.ms-officetheme', '.msg' => 'application/vnd.ms-outlook', '.cat' => 'application/vnd.ms-pki.seccat', - '.stl' => 'application/vnd.ms-pki.stl', + '.stl' => 'model/stl', '.ppt' => 'application/vnd.ms-powerpoint', '.pps' => 'application/vnd.ms-powerpoint', '.pot' => 'application/vnd.ms-powerpoint', @@ -463,7 +474,6 @@ abstract class MimeType { '.sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', '.ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', '.potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', - '.mpp' => 'application/vnd.ms-project', '.mpt' => 'application/vnd.ms-project', '.docm' => 'application/vnd.ms-word.document.macroenabled.12', '.dotm' => 'application/vnd.ms-word.template.macroenabled.12', @@ -477,13 +487,13 @@ abstract class MimeType { '.mus' => 'application/vnd.musician', '.msty' => 'application/vnd.muvee.style', '.taglet' => 'application/vnd.mynfc', + '.bdo' => 'application/vnd.nato.bindingdataobject+xml', '.nlu' => 'application/vnd.neurolanguage.nlu', '.ntf' => 'application/vnd.nitf', '.nitf' => 'application/vnd.nitf', '.nnd' => 'application/vnd.noblenet-directory', '.nns' => 'application/vnd.noblenet-sealer', '.nnw' => 'application/vnd.noblenet-web', - '.ac' => 'application/vnd.nokia.n-gage.ac+xml', '.ngdat' => 'application/vnd.nokia.n-gage.data', '.n-gage' => 'application/vnd.nokia.n-gage.symbian.install', '.rpst' => 'application/vnd.nokia.radio-preset', @@ -538,6 +548,7 @@ abstract class MimeType { '.mgz' => 'application/vnd.proteus.magazine', '.qps' => 'application/vnd.publishare-delta-tree', '.ptid' => 'application/vnd.pvi.ptid1', + '.xhtm' => 'application/vnd.pwg-xhtml-print+xml', '.qxd' => 'application/vnd.quark.quarkxpress', '.qxt' => 'application/vnd.quark.quarkxpress', '.qwd' => 'application/vnd.quark.quarkxpress', @@ -614,6 +625,7 @@ abstract class MimeType { '.umj' => 'application/vnd.umajin', '.unityweb' => 'application/vnd.unity', '.uoml' => 'application/vnd.uoml+xml', + '.uo' => 'application/vnd.uoml+xml', '.vcx' => 'application/vnd.vcx', '.vsd' => 'application/vnd.visio', '.vst' => 'application/vnd.visio', @@ -652,7 +664,6 @@ abstract class MimeType { '.7z' => 'application/x-7z-compressed', '.abw' => 'application/x-abiword', '.ace' => 'application/x-ace-compressed', - '.dmg' => 'application/x-apple-diskimage', '.arj' => 'application/x-arj', '.aab' => 'application/x-authorware-bin', '.x32' => 'application/x-authorware-bin', @@ -661,7 +672,6 @@ abstract class MimeType { '.aam' => 'application/x-authorware-map', '.aas' => 'application/x-authorware-seg', '.bcpio' => 'application/x-bcpio', - '.bdoc' => 'application/x-bdoc', '.torrent' => 'application/x-bittorrent', '.blb' => 'application/x-blorb', '.blorb' => 'application/x-blorb', @@ -682,7 +692,6 @@ abstract class MimeType { '.nsc' => 'application/x-conference', '.cpio' => 'application/x-cpio', '.csh' => 'application/x-csh', - '.deb' => 'application/x-debian-package', '.udeb' => 'application/x-debian-package', '.dgc' => 'application/x-dgc-compressed', '.dir' => 'application/x-director', @@ -720,10 +729,6 @@ abstract class MimeType { '.hdf' => 'application/x-hdf', '.php' => 'application/x-httpd-php', '.install' => 'application/x-install-instructions', - '.iso' => 'application/x-iso9660-image', - '.key' => 'application/x-iwork-keynote-sffkey', - '.numbers' => 'application/x-iwork-numbers-sffnumbers', - '.pages' => 'application/x-iwork-pages-sffpages', '.jardiff' => 'application/x-java-archive-diff', '.jnlp' => 'application/x-java-jnlp-file', '.kdbx' => 'application/x-keepass2', @@ -733,7 +738,7 @@ abstract class MimeType { '.lha' => 'application/x-lzh-compressed', '.run' => 'application/x-makeself', '.mie' => 'application/x-mie', - '.prc' => 'application/x-mobipocket-ebook', + '.prc' => 'model/prc', '.mobi' => 'application/x-mobipocket-ebook', '.application' => 'application/x-ms-application', '.lnk' => 'application/x-ms-shortcut', @@ -744,18 +749,13 @@ abstract class MimeType { '.obd' => 'application/x-msbinder', '.crd' => 'application/x-mscardfile', '.clp' => 'application/x-msclip', - '.exe' => 'application/x-msdos-program', - '.exe' => 'application/x-msdownload', - '.dll' => 'application/x-msdownload', '.com' => 'application/x-msdownload', '.bat' => 'application/x-msdownload', - '.msi' => 'application/x-msdownload', '.mvb' => 'application/x-msmediaview', '.m13' => 'application/x-msmediaview', '.m14' => 'application/x-msmediaview', - '.wmf' => 'application/x-msmetafile', - '.wmz' => 'application/x-msmetafile', - '.emf' => 'application/x-msmetafile', + '.wmf' => 'image/wmf', + '.emf' => 'image/emf', '.emz' => 'application/x-msmetafile', '.mny' => 'application/x-msmoney', '.pub' => 'application/x-mspublisher', @@ -768,14 +768,11 @@ abstract class MimeType { '.nzb' => 'application/x-nzb', '.pl' => 'application/x-perl', '.pm' => 'application/x-perl', - '.prc' => 'application/x-pilot', - '.pdb' => 'application/x-pilot', '.p12' => 'application/x-pkcs12', '.pfx' => 'application/x-pkcs12', '.p7b' => 'application/x-pkcs7-certificates', '.spc' => 'application/x-pkcs7-certificates', '.p7r' => 'application/x-pkcs7-certreqresp', - '.rar' => 'application/x-rar-compressed', '.rpm' => 'application/x-redhat-package-manager', '.ris' => 'application/x-research-info-systems', '.sea' => 'application/x-sea', @@ -783,7 +780,6 @@ abstract class MimeType { '.shar' => 'application/x-shar', '.swf' => 'application/x-shockwave-flash', '.xap' => 'application/x-silverlight-app', - '.sql' => 'application/x-sql', '.sit' => 'application/x-stuffit', '.sitx' => 'application/x-stuffitx', '.srt' => 'application/x-subrip', @@ -798,7 +794,7 @@ abstract class MimeType { '.tfm' => 'application/x-tex-tfm', '.texinfo' => 'application/x-texinfo', '.texi' => 'application/x-texinfo', - '.obj' => 'application/x-tgif', + '.obj' => 'model/obj', '.ustar' => 'application/x-ustar', '.hdd' => 'application/x-virtualbox-hdd', '.ova' => 'application/x-virtualbox-ova', @@ -814,7 +810,7 @@ abstract class MimeType { '.crt' => 'application/x-x509-ca-cert', '.pem' => 'application/x-x509-ca-cert', '.fig' => 'application/x-xfig', - '.xlf' => 'application/x-xliff+xml', + '.xlf' => 'application/xliff+xml', '.xpi' => 'application/x-xpinstall', '.xz' => 'application/x-xz', '.z1' => 'application/x-zmachine', @@ -834,15 +830,13 @@ abstract class MimeType { '.xenc' => 'application/xenc+xml', '.xhtml' => 'application/xhtml+xml', '.xht' => 'application/xhtml+xml', - '.xlf' => 'application/xliff+xml', - '.xml' => 'application/xml', + '.xml' => 'text/xml', '.xsl' => 'application/xml', '.xsd' => 'application/xml', '.rng' => 'application/xml', '.dtd' => 'application/xml-dtd', '.xop' => 'application/xop+xml', '.xpl' => 'application/xproc+xml', - '.xsl' => 'application/xslt+xml', '.xslt' => 'application/xslt+xml', '.xspf' => 'application/xspf+xml', '.mxml' => 'application/xv+xml', @@ -853,6 +847,8 @@ abstract class MimeType { '.yin' => 'application/yin+xml', '.zip' => 'application/zip', '.3gpp' => 'audio/3gpp', + '.adts' => 'audio/aac', + '.aac' => 'audio/aac', '.adp' => 'audio/adpcm', '.amr' => 'audio/amr', '.au' => 'audio/basic', @@ -868,7 +864,6 @@ abstract class MimeType { '.mpga' => 'audio/mpeg', '.mp2' => 'audio/mpeg', '.mp2a' => 'audio/mpeg', - '.mp3' => 'audio/mpeg', '.m2a' => 'audio/mpeg', '.m3a' => 'audio/mpeg', '.oga' => 'audio/ogg', @@ -890,15 +885,12 @@ abstract class MimeType { '.ecelp9600' => 'audio/vnd.nuera.ecelp9600', '.rip' => 'audio/vnd.rip', '.wav' => 'audio/wav', - '.wav' => 'audio/wave', '.weba' => 'audio/webm', - '.aac' => 'audio/x-aac', '.aif' => 'audio/x-aiff', '.aiff' => 'audio/x-aiff', '.aifc' => 'audio/x-aiff', '.caf' => 'audio/x-caf', '.flac' => 'audio/x-flac', - '.m4a' => 'audio/x-m4a', '.mka' => 'audio/x-matroska', '.m3u' => 'audio/x-mpegurl', '.wax' => 'audio/x-ms-wax', @@ -906,8 +898,6 @@ abstract class MimeType { '.ram' => 'audio/x-pn-realaudio', '.ra' => 'audio/x-pn-realaudio', '.rmp' => 'audio/x-pn-realaudio-plugin', - '.ra' => 'audio/x-realaudio', - '.wav' => 'audio/x-wav', '.xm' => 'audio/xm', '.cdx' => 'chemical/x-cdx', '.cif' => 'chemical/x-cif', @@ -926,9 +916,10 @@ abstract class MimeType { '.avcs' => 'image/avcs', '.avif' => 'image/avif', '.bmp' => 'image/bmp', + '.dib' => 'image/bmp', '.cgm' => 'image/cgm', '.drle' => 'image/dicom-rle', - '.emf' => 'image/emf', + '.dpx' => 'image/dpx', '.fits' => 'image/fits', '.g3' => 'image/g3fax', '.gif' => 'image/gif', @@ -948,8 +939,10 @@ abstract class MimeType { '.jph' => 'image/jph', '.jhc' => 'image/jphc', '.jpm' => 'image/jpm', + '.jpgm' => 'image/jpm', '.jpx' => 'image/jpx', '.jpf' => 'image/jpx', + '.jxl' => 'image/jxl', '.jxr' => 'image/jxr', '.jxra' => 'image/jxra', '.jxrs' => 'image/jxrs', @@ -961,6 +954,7 @@ abstract class MimeType { '.ktx2' => 'image/ktx2', '.png' => 'image/png', '.btif' => 'image/prs.btif', + '.btf' => 'image/prs.btif', '.pti' => 'image/prs.pti', '.sgi' => 'image/sgi', '.svg' => 'image/svg+xml', @@ -985,7 +979,7 @@ abstract class MimeType { '.fst' => 'image/vnd.fst', '.mmr' => 'image/vnd.fujixerox.edmics-mmr', '.rlc' => 'image/vnd.fujixerox.edmics-rlc', - '.ico' => 'image/vnd.microsoft.icon', + '.ico' => 'image/x-icon', '.dds' => 'image/vnd.ms-dds', '.mdi' => 'image/vnd.ms-modi', '.wdp' => 'image/vnd.ms-photo', @@ -995,9 +989,8 @@ abstract class MimeType { '.vtf' => 'image/vnd.valve.source.texture', '.wbmp' => 'image/vnd.wap.wbmp', '.xif' => 'image/vnd.xiff', - '.pcx' => 'image/vnd.zbrush.pcx', + '.pcx' => 'image/x-pcx', '.webp' => 'image/webp', - '.wmf' => 'image/wmf', '.3ds' => 'image/x-3ds', '.ras' => 'image/x-cmu-raster', '.cmx' => 'image/x-cmx', @@ -1006,11 +999,8 @@ abstract class MimeType { '.fh4' => 'image/x-freehand', '.fh5' => 'image/x-freehand', '.fh7' => 'image/x-freehand', - '.ico' => 'image/x-icon', '.jng' => 'image/x-jng', '.sid' => 'image/x-mrsid-image', - '.bmp' => 'image/x-ms-bmp', - '.pcx' => 'image/x-pcx', '.pic' => 'image/x-pict', '.pct' => 'image/x-pict', '.pnm' => 'image/x-portable-anymap', @@ -1035,24 +1025,29 @@ abstract class MimeType { '.glb' => 'model/gltf-binary', '.igs' => 'model/iges', '.iges' => 'model/iges', + '.jt' => 'model/jt', '.msh' => 'model/mesh', '.mesh' => 'model/mesh', '.silo' => 'model/mesh', '.mtl' => 'model/mtl', - '.obj' => 'model/obj', '.stpx' => 'model/step+xml', '.stpz' => 'model/step+zip', '.stpxz' => 'model/step-xml+zip', - '.stl' => 'model/stl', + '.u3d' => 'model/u3d', + '.bary' => 'model/vnd.bary', + '.cld' => 'model/vnd.cld', '.dae' => 'model/vnd.collada+xml', '.dwf' => 'model/vnd.dwf', '.gdl' => 'model/vnd.gdl', '.gtw' => 'model/vnd.gtw', - '.mts' => 'model/vnd.mts', + '.mts' => 'video/mp2t', '.ogex' => 'model/vnd.opengex', '.x_b' => 'model/vnd.parasolid.transmit.binary', '.x_t' => 'model/vnd.parasolid.transmit.text', + '.pyo' => 'model/vnd.pytha.pyox', + '.pyox' => 'model/vnd.pytha.pyox', '.vds' => 'model/vnd.sap.vds', + '.usda' => 'model/vnd.usda', '.usdz' => 'model/vnd.usdz+zip', '.bsp' => 'model/vnd.valve.source.compiled-map', '.vtu' => 'model/vnd.vtu', @@ -1060,12 +1055,10 @@ abstract class MimeType { '.vrml' => 'model/vrml', '.x3db' => 'model/x3d+binary', '.x3dbz' => 'model/x3d+binary', - '.x3db' => 'model/x3d+fastinfoset', '.x3dv' => 'model/x3d+vrml', '.x3dvz' => 'model/x3d+vrml', '.x3d' => 'model/x3d+xml', '.x3dz' => 'model/x3d+xml', - '.x3dv' => 'model/x3d-vrml', '.appcache' => 'text/cache-manifest', '.manifest' => 'text/cache-manifest', '.ics' => 'text/calendar', @@ -1078,10 +1071,11 @@ abstract class MimeType { '.htm' => 'text/html', '.shtml' => 'text/html', '.jade' => 'text/jade', + '.mjs' => 'text/javascript', '.jsx' => 'text/jsx', '.less' => 'text/less', - '.markdown' => 'text/markdown', '.md' => 'text/markdown', + '.markdown' => 'text/markdown', '.mml' => 'text/mathml', '.mdx' => 'text/mdx', '.n3' => 'text/n3', @@ -1095,7 +1089,6 @@ abstract class MimeType { '.ini' => 'text/plain', '.dsc' => 'text/prs.lines.tag', '.rtx' => 'text/richtext', - '.rtf' => 'text/rtf', '.sgml' => 'text/sgml', '.sgm' => 'text/sgml', '.shex' => 'text/shex', @@ -1120,7 +1113,6 @@ abstract class MimeType { '.dcurl' => 'text/vnd.curl.dcurl', '.mcurl' => 'text/vnd.curl.mcurl', '.scurl' => 'text/vnd.curl.scurl', - '.sub' => 'text/vnd.dvb.subtitle', '.ged' => 'text/vnd.familysearch.gedcom', '.fly' => 'text/vnd.fly', '.flx' => 'text/vnd.fmi.flexstor', @@ -1131,6 +1123,7 @@ abstract class MimeType { '.wml' => 'text/vnd.wap.wml', '.wmls' => 'text/vnd.wap.wmlscript', '.vtt' => 'text/vtt', + '.wgsl' => 'text/wgsl', '.s' => 'text/x-asm', '.asm' => 'text/x-asm', '.c' => 'text/x-c', @@ -1151,7 +1144,6 @@ abstract class MimeType { '.mkd' => 'text/x-markdown', '.nfo' => 'text/x-nfo', '.opml' => 'text/x-opml', - '.org' => 'text/x-org', '.p' => 'text/x-pascal', '.pas' => 'text/x-pascal', '.pde' => 'text/x-processing', @@ -1163,25 +1155,21 @@ abstract class MimeType { '.uu' => 'text/x-uuencode', '.vcs' => 'text/x-vcalendar', '.vcf' => 'text/x-vcard', - '.xml' => 'text/xml', '.yaml' => 'text/yaml', '.yml' => 'text/yaml', '.3gp' => 'video/3gpp', - '.3gpp' => 'video/3gpp', '.3g2' => 'video/3gpp2', '.h261' => 'video/h261', '.h263' => 'video/h263', '.h264' => 'video/h264', '.m4s' => 'video/iso.segment', '.jpgv' => 'video/jpeg', - '.jpm' => 'video/jpm', - '.jpgm' => 'video/jpm', '.mj2' => 'video/mj2', '.mjp2' => 'video/mj2', '.ts' => 'video/mp2t', - '.mp4' => 'video/mp4', + '.m2t' => 'video/mp2t', + '.m2ts' => 'video/mp2t', '.mp4v' => 'video/mp4', - '.mpg4' => 'video/mp4', '.mpeg' => 'video/mpeg', '.mpg' => 'video/mpeg', '.mpe' => 'video/mpeg', diff --git a/src/test/php/util/unittest/MimeTypeTest.class.php b/src/test/php/util/unittest/MimeTypeTest.class.php index 8b5fb0d61..9f34bb2a1 100755 --- a/src/test/php/util/unittest/MimeTypeTest.class.php +++ b/src/test/php/util/unittest/MimeTypeTest.class.php @@ -4,15 +4,46 @@ use util\MimeType; class MimeTypeTest { - - #[Test] - public function text_file() { - Assert::equals('text/plain', MimeType::getByFilename('test.txt')); + + /** @return iterable */ + private function tests() { + yield ['test.txt', 'text/plain']; + yield ['test.md', 'text/markdown']; + yield ['test.xml', 'text/xml']; + yield ['test.yaml', 'text/yaml']; + yield ['test.csv', 'text/csv']; + yield ['test.json', 'application/json']; + + yield ['test.htm', 'text/html']; + yield ['test.html', 'text/html']; + yield ['test.css', 'text/css']; + yield ['test.js', 'text/javascript']; + + yield ['test.ttf', 'font/ttf']; + yield ['test.otf', 'font/otf']; + yield ['test.woff', 'font/woff']; + yield ['test.woff2', 'font/woff2']; + + yield ['test.svg', 'image/svg+xml']; + yield ['test.gif', 'image/gif']; + yield ['test.png', 'image/png']; + yield ['test.jpg', 'image/jpeg']; + yield ['test.jpeg', 'image/jpeg']; + yield ['test.avif', 'image/avif']; + yield ['test.webp', 'image/webp']; + + yield ['test.mp3', 'audio/mp3']; + yield ['test.wav', 'audio/wav']; + yield ['test.aac', 'audio/aac']; + + yield ['test.mp4', 'video/mp4']; + yield ['test.webm', 'video/webm']; + yield ['test.mov', 'video/quicktime']; } - #[Test] - public function html_file() { - Assert::equals('text/html', MimeType::getByFilename('test.html')); + #[Test, Values(from: 'tests')] + public function wellknown($filename, $expected) { + Assert::equals($expected, MimeType::getByFilename($filename)); } #[Test]