SwiftyMarkdown/SwiftyMarkdownTests/SwiftyMarkdownLineTests.swift

173 lines
7.9 KiB
Swift

//
// SwiftyMarkdownTests.swift
// SwiftyMarkdownTests
//
// Created by Simon Fairbairn on 05/03/2016.
// Copyright © 2016 Voyage Travel Apps. All rights reserved.
//
import XCTest
@testable import SwiftyMarkdown
struct StringTest {
let input : String
let expectedOutput : String
var acutalOutput : String = ""
}
struct TokenTest {
let input : String
let output : String
let tokens : [Token]
}
class SwiftyMarkdownTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testThatOctothorpeHeadersAreHandledCorrectly() {
let heading1 = StringTest(input: "# Heading 1", expectedOutput: "Heading 1")
var smd = SwiftyMarkdown(string:heading1.input )
XCTAssertEqual(smd.attributedString().string, heading1.expectedOutput)
let heading2 = StringTest(input: "## Heading 2", expectedOutput: "Heading 2")
smd = SwiftyMarkdown(string:heading2.input )
XCTAssertEqual(smd.attributedString().string, heading2.expectedOutput)
let heading3 = StringTest(input: "### #Heading #3", expectedOutput: "#Heading #3")
smd = SwiftyMarkdown(string:heading3.input )
XCTAssertEqual(smd.attributedString().string, heading3.expectedOutput)
let heading4 = StringTest(input: " #### #Heading 4 ####", expectedOutput: "#Heading 4")
smd = SwiftyMarkdown(string:heading4.input )
XCTAssertEqual(smd.attributedString().string, heading4.expectedOutput)
let heading5 = StringTest(input: " ##### Heading 5 #### ", expectedOutput: "Heading 5 ####")
smd = SwiftyMarkdown(string:heading5.input )
XCTAssertEqual(smd.attributedString().string, heading5.expectedOutput)
let heading6 = StringTest(input: " ##### Heading 5 #### More ", expectedOutput: "Heading 5 #### More")
smd = SwiftyMarkdown(string:heading6.input )
XCTAssertEqual(smd.attributedString().string, heading6.expectedOutput)
let heading7 = StringTest(input: "# **Bold Header 1** ", expectedOutput: "Bold Header 1")
smd = SwiftyMarkdown(string:heading7.input )
XCTAssertEqual(smd.attributedString().string, heading7.expectedOutput)
let heading8 = StringTest(input: "## Header 2 _With Italics_", expectedOutput: "Header 2 With Italics")
smd = SwiftyMarkdown(string:heading8.input )
XCTAssertEqual(smd.attributedString().string, heading8.expectedOutput)
let heading9 = StringTest(input: " # Heading 1", expectedOutput: "# Heading 1")
smd = SwiftyMarkdown(string:heading9.input )
XCTAssertEqual(smd.attributedString().string, heading9.expectedOutput)
let allHeaders = [heading1, heading2, heading3, heading4, heading5, heading6, heading7, heading8, heading9]
smd = SwiftyMarkdown(string: allHeaders.map({ $0.input }).joined(separator: "\n"))
XCTAssertEqual(smd.attributedString().string, allHeaders.map({ $0.expectedOutput}).joined(separator: "\n"))
let headerString = StringTest(input: "# Header 1\n## Header 2 ##\n### Header 3 ### \n#### Header 4#### \n##### Header 5\n###### Header 6", expectedOutput: "Header 1\nHeader 2\nHeader 3\nHeader 4\nHeader 5\nHeader 6")
smd = SwiftyMarkdown(string: headerString.input)
XCTAssertEqual(smd.attributedString().string, headerString.expectedOutput)
let headerStringWithBold = StringTest(input: "# **Bold Header 1**", expectedOutput: "Bold Header 1")
smd = SwiftyMarkdown(string: headerStringWithBold.input)
XCTAssertEqual(smd.attributedString().string, headerStringWithBold.expectedOutput )
let headerStringWithItalic = StringTest(input: "## Header 2 _With Italics_", expectedOutput: "Header 2 With Italics")
smd = SwiftyMarkdown(string: headerStringWithItalic.input)
XCTAssertEqual(smd.attributedString().string, headerStringWithItalic.expectedOutput)
}
func testThatUndelinedHeadersAreHandledCorrectly() {
let h1String = StringTest(input: "Header 1\n===\nSome following text", expectedOutput: "Header 1\nSome following text")
var md = SwiftyMarkdown(string: h1String.input)
XCTAssertEqual(md.attributedString().string, h1String.expectedOutput)
let h2String = StringTest(input: "Header 2\n---\nSome following text", expectedOutput: "Header 2\nSome following text")
md = SwiftyMarkdown(string: h2String.input)
XCTAssertEqual(md.attributedString().string, h2String.expectedOutput)
let h1StringWithBold = StringTest(input: "Header 1 **With Bold**\n===\nSome following text", expectedOutput: "Header 1 With Bold\nSome following text")
md = SwiftyMarkdown(string: h1StringWithBold.input)
XCTAssertEqual(md.attributedString().string, h1StringWithBold.expectedOutput)
let h2StringWithItalic = StringTest(input: "Header 2 _With Italic_\n---\nSome following text", expectedOutput: "Header 2 With Italic\nSome following text")
md = SwiftyMarkdown(string: h2StringWithItalic.input)
XCTAssertEqual(md.attributedString().string, h2StringWithItalic.expectedOutput)
let h2StringWithCode = StringTest(input: "Header 2 `With Code`\n---\nSome following text", expectedOutput: "Header 2 With Code\nSome following text")
md = SwiftyMarkdown(string: h2StringWithCode.input)
XCTAssertEqual(md.attributedString().string, h2StringWithCode.expectedOutput)
}
func testThatUnorderedListsAreHandledCorrectly() {
let dashBullets = StringTest(input: "An Unordered List\n- Item 1\n\t- Indented\n- Item 2", expectedOutput: "An Unordered List\n-\tItem 1\n\t-\tIndented\n-\tItem 2")
var md = SwiftyMarkdown(string: dashBullets.input)
md.bullet = "-"
XCTAssertEqual(md.attributedString().string, dashBullets.expectedOutput)
let starBullets = StringTest(input: "An Unordered List\n* Item 1\n\t* Indented\n* Item 2", expectedOutput: "An Unordered List\n-\tItem 1\n\t-\tIndented\n-\tItem 2")
md = SwiftyMarkdown(string: starBullets.input)
md.bullet = "-"
XCTAssertEqual(md.attributedString().string, starBullets.expectedOutput)
}
func testThatOrderedListsAreHandled() {
let dashBullets = StringTest(input: "An Ordered List\n1. Item 1\n\t1. Indented\n1. Item 2", expectedOutput: "An Ordered List\n1.\tItem 1\n\t1.\tIndented\n2.\tItem 2")
let md = SwiftyMarkdown(string: dashBullets.input)
md.bullet = "-"
XCTAssertEqual(md.attributedString().string, dashBullets.expectedOutput)
}
/*
The reason for this test is because the list of items dropped every other item in bullet lists marked with "-"
The faulty result was: "A cool title\n \n- Här har vi svenska ÅÄÖåäö tecken\n \nA Link"
As you can see, "- Point number one" and "- Point number two" are mysteriously missing.
It incorrectly identified rows as `Alt-H2`
*/
func offtestInternationalCharactersInList() {
let expected = "A cool title\n\n- Point number one\n- Här har vi svenska ÅÄÖåäö tecken\n- Point number two\n \nA Link"
let input = "# A cool title\n\n- Point number one\n- Här har vi svenska ÅÄÖåäö tecken\n- Point number two\n\n[A Link](http://dooer.com)"
let output = SwiftyMarkdown(string: input).attributedString().string
XCTAssertEqual(output, expected)
}
func testReportedCrashingStrings() {
let text = "[**\\!bang**](https://duckduckgo.com/bang) "
let expected = "\\!bang"
let output = SwiftyMarkdown(string: text).attributedString().string
XCTAssertEqual(output, expected)
}
func testThatYAMLMetadataIsRemoved() {
let yaml = StringTest(input: "---\nlayout: page\ntitle: \"Trail Wallet FAQ\"\ndate: 2015-04-22 10:59\ncomments: true\nsharing: true\nliking: false\nfooter: true\nsidebar: false\n---\n# Finally some Markdown!\n\nWith A Heading\n---", expectedOutput: "Finally some Markdown!\n\nWith A Heading")
let md = SwiftyMarkdown(string: yaml.input)
XCTAssertEqual(md.attributedString().string, yaml.expectedOutput)
XCTAssertEqual(md.frontMatterAttributes.count, 8)
}
}