import Foundation import Testing @testable import Hutch struct ReadmeViewTests { @Test func sanitizedReadmeLinkURLStringRejectsUnexpectedSchemes() { #expect(sanitizedReadmeLinkURLString("javascript:alert(1)") == nil) #expect(sanitizedReadmeLinkURLString("file:///tmp/readme") == nil) #expect(sanitizedReadmeLinkURLString("data:text/html;base64,SGVsbG8=") == nil) } @Test func processInlineDropsUnsafeMarkdownLinks() { let rendered = processInline("[click me](javascript:alert)") #expect(rendered == "click me") #expect(!rendered.contains("href=")) #expect(!rendered.contains("javascript:")) } @Test func sanitizedReadmeLinkURLStringAllowsExpectedDestinations() { #expect(sanitizedReadmeLinkURLString("https://example.com/docs?q=1") == "https://example.com/docs?q=1") #expect(sanitizedReadmeLinkURLString("mailto:test@example.com") == "mailto:test@example.com") #expect(sanitizedReadmeLinkURLString("#readme") == "#readme") } } struct MarkdownRenderingTests { @Test func markdownOrderedList() { let html = markdownToHTML("1. First\n2. Second\n3. Third") #expect(html.contains("
")) #expect(html.contains("This is a quote")) #expect(html.contains("")) } @Test func markdownTable() { let input = "| A | B |\n|---|---|\n| 1 | 2 |" let html = markdownToHTML(input) #expect(html.contains("
| ")) #expect(html.contains(" | "))
}
@Test
func markdownHorizontalRule() {
let html = markdownToHTML("---")
#expect(html.contains(" ")) } @Test func markdownDeepHeadings() { let html = markdownToHTML("#### Level 4\n##### Level 5\n###### Level 6") #expect(html.contains(" "))
#expect(html.contains(""))
}
@Test
func markdownStrikethrough() {
let html = markdownToHTML("~~deleted~~")
#expect(html.contains("
Clone the repository: ")) #expect(html.contains(""))
#expect(html.contains("
Clone the repository: ")!.lowerBound < html.firstRange(of: "")!.lowerBound)
}
@Test
func markdownImageQueryStringPreservesAmpersands() {
let html = processInline("")
#expect(html.contains("metric=security_rating"))
#expect(!html.contains("amp;metric"))
#expect(html.contains("yoshi [ARG] <FILE>"))
}
}
struct OrgRenderingTests {
@Test
func orgDeepHeading() {
let html = orgToHTML("**** Level 4 Heading")
#expect(html.contains(""))
}
@Test
func orgCommentLinesIgnored() {
let html = orgToHTML("# This is a comment\nNormal text")
#expect(!html.contains("This is a comment"))
#expect(html.contains("Normal text"))
}
@Test
func orgStrikethrough() {
let html = orgToHTML("+deleted text+")
#expect(html.contains(" |
|---|