2021-10-01 23:27:45 +00:00
|
|
|
//
|
|
|
|
// GeminiHTMLRendererTests.swift
|
|
|
|
// GeminiRendererTests
|
|
|
|
//
|
|
|
|
// Created by Shadowfacts on 10/1/21.
|
|
|
|
//
|
|
|
|
|
|
|
|
import XCTest
|
|
|
|
import GeminiFormat
|
|
|
|
@testable import GeminiRenderer
|
|
|
|
|
|
|
|
class GeminiHTMLRendererTests: XCTestCase {
|
|
|
|
|
|
|
|
private var doc: Document!
|
|
|
|
|
|
|
|
override func setUp() {
|
|
|
|
doc = Document(url: URL(string: "gemini://example.com/")!)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testEscapeToEntities() {
|
|
|
|
doc.lines = [.text("<b>hello</b>")]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<p><b>hello</b></p>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testParagraph() {
|
|
|
|
doc.lines = [.text("Hello, world!")]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<p>Hello, world!</p>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testLink() {
|
|
|
|
doc.lines = [.link(URL(string: "gemini://example.com/")!, text: "text")]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<p class=\"link\"><a href=\"gemini://example.com/\">text</a></p>")
|
|
|
|
|
|
|
|
doc.lines = [.link(URL(string: "gemini://example.com/")!, text: nil)]
|
|
|
|
let noText = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(noText, "<p class=\"link\"><a href=\"gemini://example.com/\">gemini://example.com/</a></p>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testDisableLinkClass() {
|
|
|
|
doc.lines = [.link(URL(string: "gemini://example.com/")!, text: "test")]
|
|
|
|
let renderer = GeminiHTMLRenderer()
|
|
|
|
renderer.addLinkClass = false
|
|
|
|
let html = renderer.renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<p><a href=\"gemini://example.com/\">test</a></p>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testPreformatting() {
|
|
|
|
doc.lines = [
|
|
|
|
.preformattedToggle(alt: nil),
|
|
|
|
.preformattedText("foo"),
|
|
|
|
.preformattedText("* bar"),
|
|
|
|
.preformattedToggle(alt: nil),
|
|
|
|
]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<pre>foo\n* bar\n</pre>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testHeading() {
|
|
|
|
doc.lines = [
|
|
|
|
.heading("One", level: .h1),
|
|
|
|
.heading("Two", level: .h2),
|
|
|
|
]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<h1 id=\"l0\">One</h1><h2 id=\"l1\">Two</h2>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testDisableHeadingIDs() {
|
|
|
|
doc.lines = [
|
|
|
|
.heading("One", level: .h1),
|
|
|
|
.heading("Two", level: .h2),
|
|
|
|
]
|
|
|
|
let renderer = GeminiHTMLRenderer()
|
|
|
|
renderer.addHeadingLineIDs = false
|
|
|
|
let html = renderer.renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<h1>One</h1><h2>Two</h2>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testUnorderedList() {
|
|
|
|
doc.lines = [
|
|
|
|
.text("before"),
|
|
|
|
.unorderedListItem("a"),
|
|
|
|
.unorderedListItem("b"),
|
|
|
|
.unorderedListItem("c"),
|
|
|
|
.text("after"),
|
|
|
|
]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<p>before</p><ul><li>a</li><li>b</li><li>c</li></ul><p>after</p>")
|
|
|
|
}
|
|
|
|
|
|
|
|
func testQuote() {
|
|
|
|
doc.lines = [
|
|
|
|
.quote("quoted")
|
|
|
|
]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<blockquote>quoted</blockquote>")
|
|
|
|
}
|
2021-10-02 14:49:41 +00:00
|
|
|
|
|
|
|
func testStuffAfterList() {
|
|
|
|
doc.lines = [
|
|
|
|
.unorderedListItem("a"),
|
|
|
|
.unorderedListItem("b"),
|
|
|
|
.text("c"),
|
|
|
|
.text("d"),
|
|
|
|
]
|
|
|
|
let html = GeminiHTMLRenderer().renderDocumentToHTML(doc)
|
|
|
|
XCTAssertEqual(html, "<ul><li>a</li><li>b</li></ul><p>c</p><p>d</p>")
|
|
|
|
}
|
2021-10-01 23:27:45 +00:00
|
|
|
|
|
|
|
}
|