krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

v3.10.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}