PageRenderTime 42ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/test/test_textile.rb

https://github.com/zevarito/undress
Ruby | 267 lines | 217 code | 50 blank | 0 comment | 0 complexity | 246dc558985a1059110c13c28768aa42 MD5 | raw file
Possible License(s): MIT
  1. require File.expand_path(File.dirname(__FILE__) + "/test_helper")
  2. module Undress
  3. class TextileTest < Test::Unit::TestCase
  4. def assert_renders_textile(textile, html)
  5. assert_equal textile, Undress(html).to_textile
  6. end
  7. context "Converting HTML to textile" do
  8. context "some troubles with empty tags" do
  9. test "with pre" do
  10. html = "<pre></pre>"
  11. textile = "<pre></pre>"
  12. assert_renders_textile textile, html
  13. end
  14. test "with p" do
  15. html = "<p></p>"
  16. textile = ""
  17. assert_renders_textile textile, html
  18. end
  19. end
  20. test "converts nested tags" do
  21. assert_renders_textile "h2. _this is *very* important_\n", "<h2><em>this is <strong>very</strong> important</em></h2>"
  22. end
  23. context "some troubles" do
  24. test "with sup" do
  25. html = "<p>e = mc<sup>2</sup></p>"
  26. textile = "e = mc[^2^]\n"
  27. assert_renders_textile textile, html
  28. end
  29. end
  30. context "convert enetities" do
  31. test "&nbsp;" do
  32. textile = "some word\n"
  33. html = "<p>some&nbsp;word</p>"
  34. assert_renders_textile textile, html
  35. end
  36. end
  37. context "convert parts of a word" do
  38. test "some" do
  39. textile = "s[*o*]me\n"
  40. html = "<p>s<span style='font-weight:bold;'>o</span>me</p>"
  41. assert_renders_textile textile, html
  42. end
  43. test "italics" do
  44. textile = "a perfect wo[_r_]ld\n"
  45. html = "<p>a perfect wo<em>r</em>ld</p>"
  46. assert_renders_textile textile, html
  47. end
  48. test "bolds" do
  49. textile = "a perfect wo[*r*]ld\n"
  50. html = "<p>a perfect wo<strong>r</strong>ld</p>"
  51. assert_renders_textile textile, html
  52. end
  53. test "underlines" do
  54. textile = "a perfect wo[+r+]ld\n"
  55. html = "<p>a perfect wo<ins>r</ins>ld</p>"
  56. assert_renders_textile textile, html
  57. end
  58. test "line through" do
  59. textile = "a perfect wo[-r-]ld\n"
  60. html = "<p>a perfect wo<del>r</del>ld</p>"
  61. assert_renders_textile textile, html
  62. end
  63. end
  64. context "inline elements" do
  65. test "converts <strong> tags" do
  66. assert_renders_textile "*foo bar*", "<strong>foo bar</strong>"
  67. end
  68. test "converts <em> tags" do
  69. assert_renders_textile "_foo bar_", "<em>foo bar</em>"
  70. end
  71. test "converts <code> tags" do
  72. assert_renders_textile "@foo bar@", "<code>foo bar</code>"
  73. end
  74. test "converts <cite> tags" do
  75. assert_renders_textile "??foo bar??", "<cite>foo bar</cite>"
  76. end
  77. test "converts <sup> tags" do
  78. assert_renders_textile "foo ^sup^ bar", "foo <sup>sup</sup> bar"
  79. assert_renders_textile "foo[^sup^]bar", "foo<sup>sup</sup>bar"
  80. end
  81. test "converts <sub> tags" do
  82. assert_renders_textile "foo ~sub~ bar", "foo <sub>sub</sub> bar"
  83. assert_renders_textile "foo[~sub~]bar", "foo<sub>sub</sub>bar"
  84. end
  85. test "converts <ins> tags" do
  86. assert_renders_textile "+foo bar+", "<ins>foo bar</ins>"
  87. end
  88. test "converts <del> tags" do
  89. assert_renders_textile "-foo bar-", "<del>foo bar</del>"
  90. end
  91. test "converts <acronym> tags" do
  92. assert_renders_textile "EPA(Environmental Protection Agency)", "<acronym title='Environmental Protection Agency'>EPA</acronym>"
  93. assert_renders_textile "EPA", "<acronym>EPA</acronym>"
  94. end
  95. end
  96. context "links" do
  97. test "converts simple links (without title)" do
  98. assert_renders_textile "[Foo Bar:/cuack]", "<a href='/cuack'>Foo Bar</a>"
  99. end
  100. test "converts links with titles" do
  101. assert_renders_textile "[Foo Bar (You should see this):/cuack]", "<a href='/cuack' title='You should see this'>Foo Bar</a>"
  102. end
  103. end
  104. context "images" do
  105. test "converts images without alt attributes" do
  106. assert_renders_textile "!http://example.com/image.png!", "<img src='http://example.com/image.png'/>"
  107. end
  108. test "converts images with alt attributes" do
  109. assert_renders_textile "!http://example.com/image.png(Awesome Pic)!", "<img src='http://example.com/image.png' alt='Awesome Pic'/>"
  110. end
  111. end
  112. context "text formatting" do
  113. test "converts paragraphs" do
  114. assert_renders_textile "foo\n\nbar\n", "<p>foo</p><p>bar</p>"
  115. end
  116. test "converts <pre> tags which only contain a <code> child" do
  117. assert_renders_textile "pc. var foo = 1;\n", "<pre><code>var foo = 1;</code></pre>"
  118. assert_renders_textile "pc. var foo = 1;\n", "<pre> <code>var foo = 1;</code> </pre>"
  119. end
  120. test "leaves <pre> tags which contain mixed content as HTML" do
  121. assert_renders_textile "<pre> foo bar</pre>", "<pre> foo bar</pre>"
  122. end
  123. test "converts <br> into a new line" do
  124. assert_renders_textile "Foo\nBar", "Foo<br/>Bar"
  125. end
  126. test "converts blockquotes" do
  127. assert_renders_textile "bq. foo bar\n", "<blockquote><div>foo bar</div></blockquote>"
  128. end
  129. test "a p inside a blockquote" do
  130. html = "<blockquote> <p>this text<br />becomes not blockquoted in round trip.</p> </blockquote>"
  131. greencloth = "bq. this text\nbecomes not blockquoted in round trip.\n"
  132. assert_renders_textile greencloth, html
  133. end
  134. end
  135. context "headers" do
  136. test "converts <h1> tags" do
  137. assert_renders_textile "h1. foo bar\n", "<h1>foo bar</h1>"
  138. end
  139. test "converts <h2> tags" do
  140. assert_renders_textile "h2. foo bar\n", "<h2>foo bar</h2>"
  141. end
  142. test "converts <h3> tags" do
  143. assert_renders_textile "h3. foo bar\n", "<h3>foo bar</h3>"
  144. end
  145. test "converts <h4> tags" do
  146. assert_renders_textile "h4. foo bar\n", "<h4>foo bar</h4>"
  147. end
  148. test "converts <h5> tags" do
  149. assert_renders_textile "h5. foo bar\n", "<h5>foo bar</h5>"
  150. end
  151. test "converts <h6> tags" do
  152. assert_renders_textile "h6. foo bar\n", "<h6>foo bar</h6>"
  153. end
  154. end
  155. context "lists" do
  156. test "converts bullet lists" do
  157. assert_renders_textile "* foo\n* bar\n", "<ul><li>foo</li><li>bar</li></ul>"
  158. end
  159. test "converts numbered lists" do
  160. assert_renders_textile "# foo\n# bar\n", "<ol><li>foo</li><li>bar</li></ol>"
  161. end
  162. test "converts nested bullet lists" do
  163. assert_renders_textile "* foo\n** bar\n* baz\n", "<ul><li>foo<ul><li>bar</li></ul></li><li>baz</li></ul>"
  164. end
  165. test "converts nested numbered lists" do
  166. assert_renders_textile "# foo\n## bar\n# baz\n", "<ol><li>foo<ol><li>bar</li></ol></li><li>baz</li></ol>"
  167. end
  168. test "converts nested mixed lists" do
  169. assert_renders_textile "* foo\n## bar\n## baz\n*** quux\n* cuack\n",
  170. "<ul><li>foo<ol><li>bar</li><li>baz<ul><li>quux</li></ul></li></ol></li><li>cuack</li></ul>"
  171. end
  172. test "converts a definition list" do
  173. assert_renders_textile "- foo := defining foo =:\n- bar := defining bar =:\n",
  174. "<dl><dt>foo</dt><dd>defining foo</dd><dt>bar</dt><dd>defining bar</dd></dl>"
  175. end
  176. end
  177. context "tables" do
  178. test "converts a simple table" do
  179. assert_renders_textile "|foo|bar|baz|\n|1|2|3|\n",
  180. "<table><tr><td>foo</td><td>bar</td><td>baz</td></tr><tr><td>1</td><td>2</td><td>3</td></tr></table>"
  181. end
  182. test "converts a table with headers" do
  183. assert_renders_textile "|_. foo|_. bar|_. baz|\n|1|2|3|\n",
  184. "<table><tr><th>foo</th><th>bar</th><th>baz</th></tr><tr><td>1</td><td>2</td><td>3</td></tr></table>"
  185. end
  186. test "converts a table with cells that span multiple columns" do
  187. assert_renders_textile "|foo|bar|baz|\n|\\2. 1|2|\n",
  188. "<table><tr><td>foo</td><td>bar</td><td>baz</td></tr><tr><td colspan='2'>1</td><td>2</td></tr></table>"
  189. end
  190. test "converts a table with cells that span multiple rows" do
  191. assert_renders_textile "|/2. foo|bar|baz|\n|1|2|\n",
  192. "<table><tr><td rowspan='2'>foo</td><td>bar</td><td>baz</td></tr><tr><td>1</td><td>2</td></tr></table>"
  193. end
  194. end
  195. context "applying post processing rules" do
  196. test "compresses newlines to a maximum of two consecutive newlines" do
  197. assert_renders_textile "Foo\n\nBar\n\nBaz\n\n* Quux 1\n* Quux 2\n", "<p>Foo</p><p>Bar</p><p>Baz</p><ul><li>Quux 1</li><li>Quux 2</li></p>"
  198. end
  199. test "strips trailing newlines from the start and end of the output string" do
  200. assert_renders_textile "Foo\n", "<p>Foo</p>"
  201. end
  202. test "converts all fancy characters introduced by textile back into their 'source code'" do
  203. assert_renders_textile "What the ... hell?", "What the &#8230; hell?"
  204. assert_renders_textile "It's mine", "It&#8217;s mine"
  205. assert_renders_textile "\"Fancy quoting\"", "&#8220;Fancy quoting&#8221;"
  206. assert_renders_textile "How dashing--right?", "How dashing&#8212;right?"
  207. assert_renders_textile "How dashing - right?", "How dashing &#8211; right?"
  208. assert_renders_textile "2 x 2 = 4", "2 &#215; 2 = 4"
  209. assert_renders_textile "2x2 = 4", "2&#215;2 = 4"
  210. assert_renders_textile "Registered(r)", "Registered&#174;"
  211. assert_renders_textile "Copyrighted(c)", "Copyrighted&#169;"
  212. assert_renders_textile "Trademarked(tm)", "Trademarked&#8482;"
  213. end
  214. end
  215. end
  216. end
  217. end