diff options
| author | Christian Cleberg <[email protected]> | 2026-08-07 02:52:03 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-08-07 02:52:03 -0500 |
| commit | 044c33f7f43db1f38d6c44dd8f483298d9efcc06 (patch) | |
| tree | 649488b2e5d3d901db8c792c0dc215c835fa9d38 /HutchTests | |
| parent | 0a3e55c15cfb9ce1bd3df0c7b352760bc2ee33c3 (diff) | |
| parent | b410fd16b76146f4116538c5b82330818dd47da9 (diff) | |
| download | hutch-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.swift | 48 |
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) + } +} |
