AtlatestRepositorysigil-http

sigil-http / tree / testtest-mime.sgl

1;;; Test suite for (sigil http mime)
2
3(import (sigil test)
4 (sigil http mime))
5
6;; ============================================================
7;;; Extension Lookup Tests
8;; ============================================================
9
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 Tests
66;; ============================================================
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 Tests
90;; ============================================================
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 extension
103 ;; Use 'dat' instead of 'txt' to avoid test order dependency issues
104 (mime-type-register! "dat" "application/x-custom-data")
105 (assert-equal (mime-type-for-extension "dat") "application/x-custom-data"))
107(run-tests)