summaryrefslogtreecommitdiff
path: root/HutchTests
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-08-07 02:52:03 -0500
committerGitHub <[email protected]>2026-08-07 02:52:03 -0500
commit044c33f7f43db1f38d6c44dd8f483298d9efcc06 (patch)
tree649488b2e5d3d901db8c792c0dc215c835fa9d38 /HutchTests
parent0a3e55c15cfb9ce1bd3df0c7b352760bc2ee33c3 (diff)
parentb410fd16b76146f4116538c5b82330818dd47da9 (diff)
downloadhutch-044c33f7f43db1f38d6c44dd8f483298d9efcc06.tar.gz
hutch-044c33f7f43db1f38d6c44dd8f483298d9efcc06.tar.bz2
hutch-044c33f7f43db1f38d6c44dd8f483298d9efcc06.zip
Merge pull request #30 from krazywarez/syntax-highlighting
Add multi-language syntax highlighting (#16)
Diffstat (limited to 'HutchTests')
-rw-r--r--HutchTests/SyntaxHighlighterTests.swift48
1 files changed, 48 insertions, 0 deletions
diff --git a/HutchTests/SyntaxHighlighterTests.swift b/HutchTests/SyntaxHighlighterTests.swift
new file mode 100644
index 0000000..258e81e
--- /dev/null
+++ b/HutchTests/SyntaxHighlighterTests.swift
@@ -0,0 +1,48 @@
+import Foundation
+import Testing
+import UIKit
+@testable import Hutch
+
+struct SyntaxHighlighterTests {
+ @Test
+ func mapsFileNamesToLanguages() {
+ #expect(SyntaxHighlighter.language(forFileName: "Sources/App/Main.swift") == "swift")
+ #expect(SyntaxHighlighter.language(forFileName: "server.py") == "python")
+ #expect(SyntaxHighlighter.language(forFileName: "index.tsx") == "typescript")
+ #expect(SyntaxHighlighter.language(forFileName: "Dockerfile") == "dockerfile")
+ #expect(SyntaxHighlighter.language(forFileName: "Makefile") == "makefile")
+ }
+
+ @Test
+ func returnsNilForUnknownExtensions() {
+ #expect(SyntaxHighlighter.language(forFileName: "notes.unknownext") == nil)
+ #expect(SyntaxHighlighter.language(forFileName: "LICENSE") == nil)
+ }
+
+ @Test
+ func highlightsKnownLanguageAsColoredSpans() {
+ let highlighter = SyntaxHighlighter(theme: .light)
+ let html = highlighter.highlightedHTML(for: "let answer = 42", language: "swift")
+
+ let unwrapped = try? #require(html)
+ #expect(unwrapped?.contains("<span style=\"color:") == true)
+ #expect(unwrapped?.contains("answer") == true)
+ }
+
+ @Test
+ func fallsBackToNilForUnsupportedLanguage() {
+ let highlighter = SyntaxHighlighter(theme: .dark)
+ #expect(highlighter.highlightedHTML(for: "plain text", language: nil) == nil)
+ #expect(highlighter.highlightedHTML(for: "plain text", language: "totally-not-a-language") == nil)
+ }
+
+ @Test
+ func producesAttributedTextForNativeViewer() {
+ let highlighter = SyntaxHighlighter(theme: .light)
+ let font = UIFont.monospacedSystemFont(ofSize: 12, weight: .regular)
+ let attributed = highlighter.attributedText(for: "print(\"hi\")", language: "python", font: font)
+
+ let unwrapped = try? #require(attributed)
+ #expect(unwrapped?.string.contains("print") == true)
+ }
+}