SwiftyMarkdownLineTests.swift 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. //
  2. // SwiftyMarkdownTests.swift
  3. // SwiftyMarkdownTests
  4. //
  5. // Created by Simon Fairbairn on 05/03/2016.
  6. // Copyright © 2016 Voyage Travel Apps. All rights reserved.
  7. //
  8. import XCTest
  9. @testable import SwiftyMarkdown
  10. struct StringTest {
  11. let input : String
  12. let expectedOutput : String
  13. var acutalOutput : String = ""
  14. }
  15. struct TokenTest {
  16. let input : String
  17. let output : String
  18. let tokens : [Token]
  19. }
  20. class SwiftyMarkdownTests: XCTestCase {
  21. override func setUp() {
  22. super.setUp()
  23. // Put setup code here. This method is called before the invocation of each test method in the class.
  24. }
  25. override func tearDown() {
  26. // Put teardown code here. This method is called after the invocation of each test method in the class.
  27. super.tearDown()
  28. }
  29. func testThatOctothorpeHeadersAreHandledCorrectly() {
  30. let heading1 = StringTest(input: "# Heading 1", expectedOutput: "Heading 1")
  31. var smd = SwiftyMarkdown(string:heading1.input )
  32. XCTAssertEqual(smd.attributedString().string, heading1.expectedOutput)
  33. let heading2 = StringTest(input: "## Heading 2", expectedOutput: "Heading 2")
  34. smd = SwiftyMarkdown(string:heading2.input )
  35. XCTAssertEqual(smd.attributedString().string, heading2.expectedOutput)
  36. let heading3 = StringTest(input: "### #Heading #3", expectedOutput: "#Heading #3")
  37. smd = SwiftyMarkdown(string:heading3.input )
  38. XCTAssertEqual(smd.attributedString().string, heading3.expectedOutput)
  39. let heading4 = StringTest(input: " #### #Heading 4 ####", expectedOutput: "#Heading 4")
  40. smd = SwiftyMarkdown(string:heading4.input )
  41. XCTAssertEqual(smd.attributedString().string, heading4.expectedOutput)
  42. let heading5 = StringTest(input: " ##### Heading 5 #### ", expectedOutput: "Heading 5 ####")
  43. smd = SwiftyMarkdown(string:heading5.input )
  44. XCTAssertEqual(smd.attributedString().string, heading5.expectedOutput)
  45. let heading6 = StringTest(input: " ##### Heading 5 #### More ", expectedOutput: "Heading 5 #### More")
  46. smd = SwiftyMarkdown(string:heading6.input )
  47. XCTAssertEqual(smd.attributedString().string, heading6.expectedOutput)
  48. let heading7 = StringTest(input: "# **Bold Header 1** ", expectedOutput: "Bold Header 1")
  49. smd = SwiftyMarkdown(string:heading7.input )
  50. XCTAssertEqual(smd.attributedString().string, heading7.expectedOutput)
  51. let heading8 = StringTest(input: "## Header 2 _With Italics_", expectedOutput: "Header 2 With Italics")
  52. smd = SwiftyMarkdown(string:heading8.input )
  53. XCTAssertEqual(smd.attributedString().string, heading8.expectedOutput)
  54. let heading9 = StringTest(input: " # Heading 1", expectedOutput: "# Heading 1")
  55. smd = SwiftyMarkdown(string:heading9.input )
  56. XCTAssertEqual(smd.attributedString().string, heading9.expectedOutput)
  57. let allHeaders = [heading1, heading2, heading3, heading4, heading5, heading6, heading7, heading8, heading9]
  58. smd = SwiftyMarkdown(string: allHeaders.map({ $0.input }).joined(separator: "\n"))
  59. XCTAssertEqual(smd.attributedString().string, allHeaders.map({ $0.expectedOutput}).joined(separator: "\n"))
  60. 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")
  61. smd = SwiftyMarkdown(string: headerString.input)
  62. XCTAssertEqual(smd.attributedString().string, headerString.expectedOutput)
  63. let headerStringWithBold = StringTest(input: "# **Bold Header 1**", expectedOutput: "Bold Header 1")
  64. smd = SwiftyMarkdown(string: headerStringWithBold.input)
  65. XCTAssertEqual(smd.attributedString().string, headerStringWithBold.expectedOutput )
  66. let headerStringWithItalic = StringTest(input: "## Header 2 _With Italics_", expectedOutput: "Header 2 With Italics")
  67. smd = SwiftyMarkdown(string: headerStringWithItalic.input)
  68. XCTAssertEqual(smd.attributedString().string, headerStringWithItalic.expectedOutput)
  69. }
  70. func testThatUndelinedHeadersAreHandledCorrectly() {
  71. let h1String = StringTest(input: "Header 1\n===\nSome following text", expectedOutput: "Header 1\nSome following text")
  72. var md = SwiftyMarkdown(string: h1String.input)
  73. XCTAssertEqual(md.attributedString().string, h1String.expectedOutput)
  74. let h2String = StringTest(input: "Header 2\n---\nSome following text", expectedOutput: "Header 2\nSome following text")
  75. md = SwiftyMarkdown(string: h2String.input)
  76. XCTAssertEqual(md.attributedString().string, h2String.expectedOutput)
  77. let h1StringWithBold = StringTest(input: "Header 1 **With Bold**\n===\nSome following text", expectedOutput: "Header 1 With Bold\nSome following text")
  78. md = SwiftyMarkdown(string: h1StringWithBold.input)
  79. XCTAssertEqual(md.attributedString().string, h1StringWithBold.expectedOutput)
  80. let h2StringWithItalic = StringTest(input: "Header 2 _With Italic_\n---\nSome following text", expectedOutput: "Header 2 With Italic\nSome following text")
  81. md = SwiftyMarkdown(string: h2StringWithItalic.input)
  82. XCTAssertEqual(md.attributedString().string, h2StringWithItalic.expectedOutput)
  83. let h2StringWithCode = StringTest(input: "Header 2 `With Code`\n---\nSome following text", expectedOutput: "Header 2 With Code\nSome following text")
  84. md = SwiftyMarkdown(string: h2StringWithCode.input)
  85. XCTAssertEqual(md.attributedString().string, h2StringWithCode.expectedOutput)
  86. }
  87. func testThatUnorderedListsAreHandledCorrectly() {
  88. 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")
  89. var md = SwiftyMarkdown(string: dashBullets.input)
  90. md.bullet = "-"
  91. XCTAssertEqual(md.attributedString().string, dashBullets.expectedOutput)
  92. 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")
  93. md = SwiftyMarkdown(string: starBullets.input)
  94. md.bullet = "-"
  95. XCTAssertEqual(md.attributedString().string, starBullets.expectedOutput)
  96. }
  97. func testThatOrderedListsAreHandled() {
  98. 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")
  99. var md = SwiftyMarkdown(string: dashBullets.input)
  100. XCTAssertEqual(md.attributedString().string, dashBullets.expectedOutput)
  101. let moreComplicatedList = StringTest(input: """
  102. A long ordered list:
  103. 1. Item 1
  104. 1. Item 2
  105. 1. First Indent 1
  106. 1. First Indent 2
  107. 1. Second Indent 1
  108. 1. First Indent 3
  109. 1. Second Indent 2
  110. 1. Item 3
  111. A break
  112. 1. Item 1
  113. 1. Item 2
  114. """, expectedOutput: """
  115. A long ordered list:
  116. 1. Item 1
  117. 2. Item 2
  118. 1. First Indent 1
  119. 2. First Indent 2
  120. 1. Second Indent 1
  121. 3. First Indent 3
  122. 1. Second Indent 2
  123. 3. Item 3
  124. A break
  125. 1. Item 1
  126. 2. Item 2
  127. """)
  128. md = SwiftyMarkdown(string: moreComplicatedList.input)
  129. XCTAssertEqual(md.attributedString().string, moreComplicatedList.expectedOutput)
  130. }
  131. /*
  132. The reason for this test is because the list of items dropped every other item in bullet lists marked with "-"
  133. The faulty result was: "A cool title\n \n- Här har vi svenska ÅÄÖåäö tecken\n \nA Link"
  134. As you can see, "- Point number one" and "- Point number two" are mysteriously missing.
  135. It incorrectly identified rows as `Alt-H2`
  136. */
  137. func offtestInternationalCharactersInList() {
  138. let expected = "A cool title\n\n- Point number one\n- Här har vi svenska ÅÄÖåäö tecken\n- Point number two\n \nA Link"
  139. 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)"
  140. let output = SwiftyMarkdown(string: input).attributedString().string
  141. XCTAssertEqual(output, expected)
  142. }
  143. func testThatYAMLMetadataIsRemoved() {
  144. 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")
  145. let md = SwiftyMarkdown(string: yaml.input)
  146. XCTAssertEqual(md.attributedString().string, yaml.expectedOutput)
  147. XCTAssertEqual(md.frontMatterAttributes.count, 8)
  148. }
  149. }