summaryrefslogtreecommitdiff
path: root/HutchTests/ReadmeViewTests.swift
diff options
context:
space:
mode:
Diffstat (limited to 'HutchTests/ReadmeViewTests.swift')
-rw-r--r--HutchTests/ReadmeViewTests.swift29
1 files changed, 29 insertions, 0 deletions
diff --git a/HutchTests/ReadmeViewTests.swift b/HutchTests/ReadmeViewTests.swift
new file mode 100644
index 0000000..9c3c019
--- /dev/null
+++ b/HutchTests/ReadmeViewTests.swift
@@ -0,0 +1,29 @@
+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:[email protected]") == "mailto:[email protected]")
+ #expect(sanitizedReadmeLinkURLString("#readme") == "#readme")
+ }
+}