Added the WebP case to the Asset extensions in the Infrastructure package.
This commit is contained in:
@@ -1,21 +1,25 @@
|
||||
/// A file extension used by an ``Asset``.
|
||||
///
|
||||
/// Each case's raw value is the extension itself (e.g. `"css"`), which an asset appends to its file name when resolving paths.
|
||||
public enum AssetExtension: String, Sendable {
|
||||
public enum AssetExtension: String, CaseIterable, Sendable {
|
||||
/// A Cascading Style Sheets file.
|
||||
case css
|
||||
/// A Windows icon image.
|
||||
case ico
|
||||
/// A JPEG image.
|
||||
case jpg
|
||||
/// A JavaScript file.
|
||||
case js
|
||||
/// A Portable Network Graphics image.
|
||||
case png
|
||||
/// A Windows icon image.
|
||||
case ico
|
||||
/// A Scalable Vector Graphics image.
|
||||
case svg
|
||||
/// A plain text file.
|
||||
case txt
|
||||
/// A web application manifest file.
|
||||
case webmanifest
|
||||
/// A WebP image.
|
||||
case webp
|
||||
/// An Extensible Markup Language file.
|
||||
case xml
|
||||
}
|
||||
@@ -30,12 +34,14 @@ public extension AssetExtension {
|
||||
var contentType: String {
|
||||
switch self {
|
||||
case .css: "text/css"
|
||||
case .ico: "image/vnd.microsoft.icon"
|
||||
case .jpg: "image/jpeg"
|
||||
case .js: "text/javascript"
|
||||
case .png: "image/png"
|
||||
case .ico: "image/vnd.microsoft.icon"
|
||||
case .svg: "image/svg+xml"
|
||||
case .txt: "text/plain"
|
||||
case .webmanifest: "application/manifest+json"
|
||||
case .webp: "image/webp"
|
||||
case .xml: "application/xml"
|
||||
}
|
||||
}
|
||||
@@ -45,6 +51,9 @@ public extension AssetExtension {
|
||||
switch self {
|
||||
case .css: "css"
|
||||
case .js: "js"
|
||||
case .jpg,
|
||||
.mp4,
|
||||
.webp: "media"
|
||||
default: nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,17 @@ struct AssetExtensionTests {
|
||||
#expect(fileExtension.folder == folder)
|
||||
}
|
||||
|
||||
// MARK: CaseIterable tests
|
||||
|
||||
@Test
|
||||
func `covers every case in the parameterised tests`() {
|
||||
// `zip` stops at the shorter sequence, so a case missing from the arrays below is silently untested rather
|
||||
// than failing — this is what catches that.
|
||||
#expect(Self.extensions == AssetExtension.allCases)
|
||||
#expect(Self.contentTypes.count == AssetExtension.allCases.count)
|
||||
#expect(Self.folders.count == AssetExtension.allCases.count)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
@@ -44,6 +55,8 @@ private extension AssetExtensionTests {
|
||||
.css,
|
||||
.js,
|
||||
.png,
|
||||
.jpg,
|
||||
.webp,
|
||||
.ico,
|
||||
.svg,
|
||||
.txt,
|
||||
@@ -54,6 +67,8 @@ private extension AssetExtensionTests {
|
||||
"text/css",
|
||||
"text/javascript",
|
||||
"image/png",
|
||||
"image/jpeg",
|
||||
"image/webp",
|
||||
"image/vnd.microsoft.icon",
|
||||
"image/svg+xml",
|
||||
"text/plain",
|
||||
@@ -64,6 +79,8 @@ private extension AssetExtensionTests {
|
||||
"css",
|
||||
"js",
|
||||
nil,
|
||||
"media",
|
||||
"media",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
|
||||
Reference in New Issue
Block a user