提供 DetectContentType 函数,补充 Go 标准库缺失的 MIME 类型映射。 使用包本地映射而非全局 mime.AddExtensionType,避免副作用。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package mimeutil
|
|
|
|
import "testing"
|
|
|
|
// TestDetectContentType 测试 MIME 类型检测
|
|
func TestDetectContentType(t *testing.T) {
|
|
tests := []struct {
|
|
filePath string
|
|
want string
|
|
}{
|
|
// 标准库已知类型 (验证回退)
|
|
{"test.html", "text/html; charset=utf-8"},
|
|
{"test.css", "text/css; charset=utf-8"},
|
|
{"test.js", "text/javascript; charset=utf-8"},
|
|
{"test.json", "application/json"},
|
|
{"test.mjs", "text/javascript; charset=utf-8"}, // Go 1.26.2+ 已支持
|
|
|
|
// 包本地补充类型 - 缺失
|
|
{"test.eot", "application/vnd.ms-fontobject"},
|
|
{"test.webmanifest", "application/manifest+json"},
|
|
{"test.map", "application/json"},
|
|
|
|
// 包本地覆盖类型 - Go 返回错误类型
|
|
{"test.otf", "font/otf"}, // Go 返回 OpenDocument 公式模板
|
|
{"test.webm", "video/webm"}, // Go 返回 audio/webm
|
|
|
|
// 大小写处理 - 验证 strings.ToLower
|
|
{"test.EOT", "application/vnd.ms-fontobject"}, // 不在 Go 表中
|
|
{"test.WEBMANIFEST", "application/manifest+json"},
|
|
{"test.JPG", "image/jpeg"}, // Go 已知,也处理大小写
|
|
|
|
// 未知类型
|
|
{"test.unknown", ""},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.filePath, func(t *testing.T) {
|
|
got := DetectContentType(tt.filePath)
|
|
if got != tt.want {
|
|
t.Errorf("DetectContentType(%q) = %q, want %q", tt.filePath, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|