AtlatestRepositorysigil-http
sigil-http / tree / testtest-mime.sgl
1
;;; Test suite for (sigil http mime)3
(import (sigil test)4
(sigil http mime))6
;; ============================================================7
;;; Extension Lookup Tests8
;; ============================================================10
(test "mime type for common web extensions"11
(assert-equal (mime-type-for-extension "html") "text/html")12
(assert-equal (mime-type-for-extension "htm") "text/html")13
(assert-equal (mime-type-for-extension "css") "text/css")14
(assert-equal (mime-type-for-extension "js") "application/javascript")15
(assert-equal (mime-type-for-extension "json") "application/json")16
(assert-equal (mime-type-for-extension "xml") "application/xml")17
(assert-equal (mime-type-for-extension "txt") "text/plain"))19
(test "mime type for image extensions"20
(assert-equal (mime-type-for-extension "png") "image/png")21
(assert-equal (mime-type-for-extension "jpg") "image/jpeg")22
(assert-equal (mime-type-for-extension "jpeg") "image/jpeg")23
(assert-equal (mime-type-for-extension "gif") "image/gif")24
(assert-equal (mime-type-for-extension "svg") "image/svg+xml")25
(assert-equal (mime-type-for-extension "ico") "image/x-icon")26
(assert-equal (mime-type-for-extension "webp") "image/webp"))28
(test "mime type for font extensions"29
(assert-equal (mime-type-for-extension "woff") "font/woff")30
(assert-equal (mime-type-for-extension "woff2") "font/woff2")31
(assert-equal (mime-type-for-extension "ttf") "font/ttf")32
(assert-equal (mime-type-for-extension "otf") "font/otf"))34
(test "mime type for audio/video extensions"35
(assert-equal (mime-type-for-extension "mp3") "audio/mpeg")36
(assert-equal (mime-type-for-extension "ogg") "audio/ogg")37
(assert-equal (mime-type-for-extension "mp4") "video/mp4")38
(assert-equal (mime-type-for-extension "webm") "video/webm"))40
(test "mime type for other common extensions"41
(assert-equal (mime-type-for-extension "pdf") "application/pdf")42
(assert-equal (mime-type-for-extension "zip") "application/zip")43
(assert-equal (mime-type-for-extension "wasm") "application/wasm"))45
(test "mime type for Sigil extensions"46
(assert-equal (mime-type-for-extension "msc") "text/x-sigil")47
(assert-equal (mime-type-for-extension "msb") "application/x-sigil-bytecode"))49
(test "extension lookup handles leading dot"50
(assert-equal (mime-type-for-extension ".html") "text/html")51
(assert-equal (mime-type-for-extension ".css") "text/css")52
(assert-equal (mime-type-for-extension ".js") "application/javascript"))54
(test "extension lookup is case-insensitive"55
(assert-equal (mime-type-for-extension "HTML") "text/html")56
(assert-equal (mime-type-for-extension "CSS") "text/css")57
(assert-equal (mime-type-for-extension "Json") "application/json"))59
(test "unknown extension returns octet-stream"60
(assert-equal (mime-type-for-extension "xyz") "application/octet-stream")61
(assert-equal (mime-type-for-extension "unknown") "application/octet-stream")62
(assert-equal (mime-type-for-extension "") "application/octet-stream"))64
;; ============================================================65
;;; File Path Lookup Tests66
;; ============================================================68
(test "mime type for file paths"69
(assert-equal (mime-type-for-file "index.html") "text/html")70
(assert-equal (mime-type-for-file "style.css") "text/css")71
(assert-equal (mime-type-for-file "app.js") "application/javascript")72
(assert-equal (mime-type-for-file "data.json") "application/json"))74
(test "mime type for paths with directories"75
(assert-equal (mime-type-for-file "/var/www/index.html") "text/html")76
(assert-equal (mime-type-for-file "/assets/images/logo.png") "image/png")77
(assert-equal (mime-type-for-file "static/fonts/font.woff2") "font/woff2"))79
(test "mime type for files with multiple dots"80
(assert-equal (mime-type-for-file "app.bundle.js") "application/javascript")81
(assert-equal (mime-type-for-file "style.min.css") "text/css")82
(assert-equal (mime-type-for-file "archive.tar.gz") "application/gzip"))84
(test "mime type for file without extension"85
(assert-equal (mime-type-for-file "Makefile") "application/octet-stream")86
(assert-equal (mime-type-for-file "LICENSE") "application/octet-stream"))88
;; ============================================================89
;;; Custom Registration Tests90
;; ============================================================92
(test "register custom mime type"93
(mime-type-register! "custom" "application/x-custom")94
(assert-equal (mime-type-for-extension "custom") "application/x-custom")95
(assert-equal (mime-type-for-file "file.custom") "application/x-custom"))97
(test "register custom mime type with leading dot"98
(mime-type-register! ".another" "application/x-another")99
(assert-equal (mime-type-for-extension "another") "application/x-another"))101
(test "custom registration overrides default"102
;; Register a custom type for an existing extension103
;; Use 'dat' instead of 'txt' to avoid test order dependency issues104
(mime-type-register! "dat" "application/x-custom-data")105
(assert-equal (mime-type-for-extension "dat") "application/x-custom-data"))107
(run-tests)