krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v3.11.0: HutchTests/SyntaxHighlighterTests.swift · raw
1import Foundation
2import Testing
3import UIKit
4@testable import Hutch
5
6struct SyntaxHighlighterTests {
7 @Test
8 func mapsFileNamesToLanguages() {
9 #expect(SyntaxHighlighter.language(forFileName: "Sources/App/Main.swift") == "swift")
10 #expect(SyntaxHighlighter.language(forFileName: "server.py") == "python")
11 #expect(SyntaxHighlighter.language(forFileName: "index.tsx") == "typescript")
12 #expect(SyntaxHighlighter.language(forFileName: "Dockerfile") == "dockerfile")
13 #expect(SyntaxHighlighter.language(forFileName: "Makefile") == "makefile")
14 }
15
16 @Test
17 func returnsNilForUnknownExtensions() {
18 #expect(SyntaxHighlighter.language(forFileName: "notes.unknownext") == nil)
19 #expect(SyntaxHighlighter.language(forFileName: "LICENSE") == nil)
20 }
21
22 @Test
23 func highlightsKnownLanguageAsColoredSpans() {
24 let highlighter = SyntaxHighlighter(theme: .light)
25 let html = highlighter.highlightedHTML(for: "let answer = 42", language: "swift")
26
27 let unwrapped = try? #require(html)
28 #expect(unwrapped?.contains("<span style=\"color:") == true)
29 #expect(unwrapped?.contains("answer") == true)
30 }
31
32 @Test
33 func fallsBackToNilForUnsupportedLanguage() {
34 let highlighter = SyntaxHighlighter(theme: .dark)
35 #expect(highlighter.highlightedHTML(for: "plain text", language: nil) == nil)
36 #expect(highlighter.highlightedHTML(for: "plain text", language: "totally-not-a-language") == nil)
37 }
38
39 @Test
40 func producesAttributedTextForNativeViewer() {
41 let highlighter = SyntaxHighlighter(theme: .light)
42 let font = UIFont.monospacedSystemFont(ofSize: 12, weight: .regular)
43 let attributed = highlighter.attributedText(for: "print(\"hi\")", language: "python", font: font)
44
45 let unwrapped = try? #require(attributed)
46 #expect(unwrapped?.string.contains("print") == true)
47 }
48}