1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
rootdir = File.dirname(File.dirname(__FILE__))
$LOAD_PATH.unshift "#{rootdir}/lib"
require 'test/unit'
require 'markdown'
MARKDOWN_TEST_DIR = "#{rootdir}/test/MarkdownTest_1.0.3"
class MarkdownTest < Test::Unit::TestCase
def test_that_extension_methods_are_present_on_markdown_class
assert Markdown.instance_methods.map{|m| m.to_s }.include?('to_html'),
"Markdown class should respond to #to_html"
end
def test_that_simple_one_liner_goes_to_html
markdown = Markdown.new('Hello World.')
assert_respond_to markdown, :to_html
assert_equal "<p>Hello World.</p>", markdown.to_html.strip
end
def test_that_inline_markdown_goes_to_html
markdown = Markdown.new('_Hello World_!')
assert_equal "<p><em>Hello World</em>!</p>", markdown.to_html.strip
end
def test_that_inline_markdown_starts_and_ends_correctly
markdown = Markdown.new('_start _ foo_bar bar_baz _ end_ *italic* **bold** <a>_blah_</a>')
assert_respond_to markdown, :to_html
assert_equal "<p><em>start _ foo_bar bar_baz _ end</em> <em>italic</em> <strong>bold</strong> <a><em>blah</em></a></p>", markdown.to_html.strip
markdown = Markdown.new("Run 'rake radiant:extensions:rbac_base:migrate'")
assert_equal "<p>Run 'rake radiant:extensions:rbac_base:migrate'</p>", markdown.to_html.strip
end
def test_that_filter_html_works
markdown = Markdown.new('Through <em>NO</em> <script>DOUBLE NO</script>', :filter_html)
assert_equal "<p>Through <em>NO</em> <script>DOUBLE NO</script></p>", markdown.to_html.strip
end
def test_that_bluecloth_restrictions_are_supported
markdown = Markdown.new('Hello World.')
[:filter_html, :filter_styles].each do |restriction|
assert_respond_to markdown, restriction
assert_respond_to markdown, "#{restriction}="
end
assert_not_equal true, markdown.filter_html
assert_not_equal true, markdown.filter_styles
markdown = Markdown.new('Hello World.', :filter_html, :filter_styles)
assert_equal true, markdown.filter_html
assert_equal true, markdown.filter_styles
end
def test_that_redcloth_attributes_are_supported
markdown = Markdown.new('Hello World.')
assert_respond_to markdown, :fold_lines
assert_respond_to markdown, :fold_lines=
assert_not_equal true, markdown.fold_lines
markdown = Markdown.new('Hello World.', :fold_lines)
assert_equal true, markdown.fold_lines
end
def test_that_redcloth_to_html_with_single_arg_is_supported
markdown = Markdown.new('Hello World.')
assert_nothing_raised(ArgumentError) { markdown.to_html(true) }
end
def test_that_smart_converts_single_quotes_in_words_that_end_in_re
markdown = Markdown.new("They're not for sale.", :smart)
assert_equal "<p>They’re not for sale.</p>\n", markdown.to_html
end
def test_that_smart_converts_single_quotes_in_words_that_end_in_ll
markdown = Markdown.new("Well that'll be the day", :smart)
assert_equal "<p>Well that’ll be the day</p>\n", markdown.to_html
end
def test_that_urls_are_not_doubly_escaped
markdown = Markdown.new('[Page 2](/search?query=Markdown+Test&page=2)')
assert_equal "<p><a href=\"/search?query=Markdown+Test&page=2\">Page 2</a></p>\n", markdown.to_html
end
def test_simple_inline_html
markdown = Markdown.new("before\n\n<div>\n foo\n</div>\nafter")
assert_equal "<p>before</p>\n\n<div>\n foo\n</div>\n\n\n<p>after</p>\n",
markdown.to_html
end
def test_that_html_blocks_do_not_require_their_own_end_tag_line
markdown = Markdown.new("Para 1\n\n<div><pre>HTML block\n</pre></div>\n\nPara 2 [Link](#anchor)")
assert_equal "<p>Para 1</p>\n\n<div><pre>HTML block\n</pre></div>\n\n\n<p>Para 2 <a href=\"#anchor\">Link</a></p>\n",
markdown.to_html
end
def test_filter_html_doesnt_break_two_space_hard_break
markdown = Markdown.new("Lorem, \nipsum\n", :filter_html)
assert_equal "<p>Lorem,<br/>\nipsum</p>\n",
markdown.to_html
end
# This isn't in the spec but is Markdown.pl behavior.
def test_block_quotes_preceded_by_spaces
markdown = Markdown.new(
"A wise man once said:\n\n" +
" > Isn't it wonderful just to be alive.\n"
)
assert_equal "<p>A wise man once said:</p>\n\n" +
"<blockquote><p>Isn't it wonderful just to be alive.</p></blockquote>\n",
markdown.to_html
end
def test_ul_with_zero_space_indent
markdown = Markdown.new("- foo\n\n- bar\n\n baz\n")
assert_equal "<ul><li><p>foo</p></li><li><p>bar</p><p>baz</p></li></ul>",
markdown.to_html.gsub("\n", "")
end
def test_ul_with_single_space_indent
markdown = Markdown.new(" - foo\n\n - bar\n\n baz\n")
assert_equal "<ul><li><p>foo</p></li><li><p>bar</p><p>baz</p></li></ul>",
markdown.to_html.gsub("\n", "")
end
# http://github.com/davidfstr/rdiscount/issues/#issue/13
def test_headings_with_trailing_space
text = "The Ant-Sugar Tales \n" +
"=================== \n\n" +
"By Candice Yellowflower \n"
markdown = Markdown.new(text)
assert_equal "<h1>The Ant-Sugar Tales </h1>\n\n<p>By Candice Yellowflower</p>\n",
markdown.to_html
end
# Build tests for each file in the MarkdownTest test suite
Dir["#{MARKDOWN_TEST_DIR}/Tests/*.text"].each do |text_file|
basename = File.basename(text_file).sub(/\.text$/, '')
html_file = text_file.sub(/text$/, 'html')
method_name = basename.gsub(/[-,()]/, '').gsub(/\s+/, '_').downcase
define_method "test_#{method_name}" do
markdown = Markdown.new(File.read(text_file))
actual_html = markdown.to_html
assert_not_nil actual_html
end
define_method "test_#{method_name}_smart" do
markdown = Markdown.new(File.read(text_file), :smart)
actual_html = markdown.to_html
assert_not_nil actual_html
end
end
end
|