redcarpet 3.5.1 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,416 +0,0 @@
1
- # coding: UTF-8
2
- require 'test_helper'
3
-
4
- class MarkdownTest < Redcarpet::TestCase
5
- def setup
6
- @renderer = Redcarpet::Render::HTML
7
- end
8
-
9
- def test_that_simple_one_liner_goes_to_html
10
- assert_equal "<p>Hello World.</p>", render("Hello World.")
11
- end
12
-
13
- def test_that_inline_markdown_goes_to_html
14
- assert_equal "<p><em>Hello World</em>!</p>", render('_Hello World_!')
15
- end
16
-
17
- def test_that_inline_markdown_starts_and_ends_correctly
18
- output = render('_start _ foo_bar bar_baz _ end_ *italic* **bold** <a>_blah_</a>', with: [:no_intra_emphasis])
19
- expected = "<p><em>start _ foo_bar bar_baz _ end</em> <em>italic</em> <strong>bold</strong> <a><em>blah</em></a></p>"
20
-
21
- assert_equal expected, output
22
-
23
- output = render("Run 'rake radiant:extensions:rbac_base:migrate'")
24
- expected = "<p>Run &#39;rake radiant:extensions:rbac_base:migrate&#39;</p>"
25
-
26
- assert_equal expected, output
27
- end
28
-
29
- def test_that_urls_are_not_doubly_escaped
30
- output = render('[Page 2](/search?query=Markdown+Test&page=2)')
31
- assert_equal "<p><a href=\"/search?query=Markdown+Test&page=2\">Page 2</a></p>", output
32
- end
33
-
34
- def test_simple_inline_html
35
- output = render("before\n\n<div>\n foo\n</div>\n\nafter")
36
- expected = "<p>before</p>\n\n<div>\n foo\n</div>\n\n<p>after</p>"
37
-
38
- assert_equal expected, output
39
- end
40
-
41
- def test_that_html_blocks_do_not_require_their_own_end_tag_line
42
- output = render("Para 1\n\n<div><pre>HTML block\n</pre></div>\n\nPara 2 [Link](#anchor)")
43
- expected = "<p>Para 1</p>\n\n<div><pre>HTML block\n</pre></div>\n\n<p>Para 2 <a href=\"#anchor\">Link</a></p>"
44
-
45
- assert_equal expected, output
46
- end
47
-
48
- # This isn't in the spec but is Markdown.pl behavior.
49
- def test_block_quotes_preceded_by_spaces
50
- output = render <<-Markdown.strip_heredoc
51
- A wise man once said:
52
-
53
-
54
- > Isn't it wonderful just to be alive.
55
- Markdown
56
- expected = <<-HTML.chomp.strip_heredoc
57
- <p>A wise man once said:</p>
58
-
59
- <blockquote>
60
- <p>Isn&#39;t it wonderful just to be alive.</p>
61
- </blockquote>
62
- HTML
63
-
64
- assert_equal expected, output
65
- end
66
-
67
- def test_para_before_block_html_should_not_wrap_in_p_tag
68
- output = render("Things to watch out for\n<ul>\n<li>Blah</li>\n</ul>", with: [:lax_spacing])
69
- expected = "<p>Things to watch out for</p>\n\n<ul>\n<li>Blah</li>\n</ul>"
70
-
71
- assert_equal expected, output
72
- end
73
-
74
- # https://github.com/vmg/redcarpet/issues/111
75
- def test_p_with_less_than_4space_indent_should_not_be_part_of_last_list_item
76
- text = <<-Markdown
77
- * a
78
- * b
79
- * c
80
-
81
- This paragraph is not part of the list.
82
- Markdown
83
- expected = <<-HTML.chomp.strip_heredoc
84
- <ul>
85
- <li>a</li>
86
- <li>b</li>
87
- <li>c</li>
88
- </ul>
89
-
90
- <p>This paragraph is not part of the list.</p>
91
- HTML
92
-
93
- assert_equal expected, render(text)
94
- end
95
-
96
- # http://github.com/rtomayko/rdiscount/issues/#issue/13
97
- def test_headings_with_trailing_space
98
- text = "The Ant-Sugar Tales \n" +
99
- "=================== \n\n" +
100
- "By Candice Yellowflower \n"
101
-
102
- assert_equal "<h1>The Ant-Sugar Tales </h1>\n\n<p>By Candice Yellowflower </p>", render(text)
103
- end
104
-
105
- def test_that_intra_emphasis_works
106
- assert_equal "<p>foo<em>bar</em>baz</p>", render("foo_bar_baz")
107
- assert_equal "<p>foo_bar_baz</p>", render("foo_bar_baz", with: [:no_intra_emphasis])
108
- end
109
-
110
- def test_that_autolink_flag_works
111
- output = render("http://github.com/rtomayko/rdiscount", with: [:autolink])
112
- expected = "<p><a href=\"http://github.com/rtomayko/rdiscount\">http://github.com/rtomayko/rdiscount</a></p>"
113
-
114
- assert_equal expected, output
115
- end
116
-
117
- def test_that_tags_can_have_dashes_and_underscores
118
- output = render("foo <asdf-qwerty>bar</asdf-qwerty> and <a_b>baz</a_b>")
119
- expected = "<p>foo <asdf-qwerty>bar</asdf-qwerty> and <a_b>baz</a_b></p>"
120
-
121
- assert_equal expected, output
122
- end
123
-
124
- def test_link_syntax_is_not_processed_within_code_blocks
125
- output = render(" This is a code block\n This is a link [[1]] inside\n")
126
- expected = "<pre><code>This is a code block\nThis is a link [[1]] inside\n</code></pre>"
127
-
128
- assert_equal expected, output
129
- end
130
-
131
- def test_whitespace_after_urls
132
- output = render("Japan: http://www.abc.net.au/news/events/japan-quake-2011/beforeafter.htm (yes, japan)", with: [:autolink])
133
- expected = %(<p>Japan: <a href="http://www.abc.net.au/news/events/japan-quake-2011/beforeafter.htm">http://www.abc.net.au/news/events/japan-quake-2011/beforeafter.htm</a> (yes, japan)</p>)
134
-
135
- assert_equal expected, output
136
- end
137
-
138
- def test_memory_leak_when_parsing_char_links
139
- render(<<-leaks.strip_heredoc)
140
- 2. Identify the wild-type cluster and determine all clusters
141
- containing or contained by it:
142
-
143
- wildtype <- wildtype.cluster(h)
144
- wildtype.mask <- logical(nclust)
145
- wildtype.mask[c(contains(h, wildtype),
146
- wildtype,
147
- contained.by(h, wildtype))] <- TRUE
148
-
149
- This could be more elegant.
150
- leaks
151
- end
152
-
153
- def test_infinite_loop_in_header
154
- assert_equal "<h1>Body</h1>", render(<<-header.strip_heredoc)
155
- ######
156
- #Body#
157
- ######
158
- header
159
- end
160
-
161
- def test_a_hyphen_and_a_equal_should_not_be_converted_to_heading
162
- assert_equal "<p>-</p>", render("-")
163
- assert_equal "<p>=</p>", render("=")
164
- end
165
-
166
- def test_that_tables_flag_works
167
- text = <<-Markdown.strip_heredoc
168
- aaa | bbbb
169
- -----|------
170
- hello|sailor
171
- Markdown
172
-
173
- assert render(text) !~ /<table/
174
- assert render(text, with: [:tables]) =~ /<table/
175
- end
176
-
177
- def test_that_tables_work_with_org_table_syntax
178
- text = <<-Markdown.strip_heredoc
179
- | aaa | bbbb |
180
- |-----+------|
181
- |hello|sailor|
182
- Markdown
183
-
184
- assert render(text) !~ /<table/
185
- assert render(text, with: [:tables]) =~ /<table/
186
- end
187
-
188
- def test_strikethrough_flag_works
189
- text = "this is ~some~ striked ~~text~~"
190
-
191
- assert render(text) !~ /<del/
192
- assert render(text, with: [:strikethrough]) =~ /<del/
193
- end
194
-
195
- def test_underline_flag_works
196
- text = "this is *some* text that is _underlined_. ___boom___"
197
- output = render(text, with: [:underline])
198
-
199
- refute render(text).include? '<u>underlined</u>'
200
-
201
- assert output.include? '<u>underlined</u>'
202
- assert output.include? '<em>some</em>'
203
- end
204
-
205
- def test_highlight_flag_works
206
- text = "this is ==highlighted=="
207
- output = render(text, with: [:highlight])
208
-
209
- refute render(text).include? '<mark>highlighted</mark>'
210
-
211
- assert output.include? '<mark>highlighted</mark>'
212
- end
213
-
214
- def test_quote_flag_works
215
- text = 'this is a "quote"'
216
- output = render(text, with: [:quote])
217
-
218
- refute render(text).include? '<q>quote</q>'
219
-
220
- assert_equal '<p>this is a <q>quote</q></p>', output
221
- end
222
-
223
- def test_quote_flag_honors_escape_html
224
- text = 'We are not "<svg/onload=pwned>"'
225
-
226
- output_enabled = render(text, with: [:quote, :escape_html])
227
- output_disabled = render(text, with: [:quote])
228
-
229
- assert_equal "<p>We are not <q>&lt;svg/onload=pwned&gt;</q></p>", output_enabled
230
- assert_equal "<p>We are not <q><svg/onload=pwned></q></p>", output_disabled
231
- end
232
-
233
- def test_that_fenced_flag_works
234
- text = <<-fenced.strip_heredoc
235
- This is a simple test
236
-
237
- ~~~~~
238
- This is some awesome code
239
- with tabs and shit
240
- ~~~
241
- fenced
242
-
243
- assert render(text) !~ /<code/
244
- assert render(text, with: [:fenced_code_blocks]) =~ /<code/
245
- end
246
-
247
- def test_that_fenced_flag_works_without_space
248
- text = "foo\nbar\n```\nsome\ncode\n```\nbaz"
249
- output = render(text, with: [:fenced_code_blocks, :lax_spacing])
250
-
251
- assert output.include?("<pre><code>")
252
-
253
- output = render(text, with: [:fenced_code_blocks])
254
- assert !output.include?("<pre><code>")
255
- end
256
-
257
- def test_that_indented_code_preserves_references
258
- text = <<-indented.strip_heredoc
259
- This is normal text
260
-
261
- Link to [Google][1]
262
-
263
- [1]: http://google.com
264
- indented
265
-
266
- output = render(text, with: [:fenced_code_blocks])
267
- assert output.include?("[1]: http://google.com")
268
- end
269
-
270
- def test_that_fenced_flag_preserves_references
271
- text = <<-fenced.strip_heredoc
272
- This is normal text
273
-
274
- ```
275
- Link to [Google][1]
276
-
277
- [1]: http://google.com
278
- ```
279
- fenced
280
-
281
- out = render(text, with: [:fenced_code_blocks])
282
- assert out.include?("[1]: http://google.com")
283
- end
284
-
285
- def test_that_fenced_code_copies_language_verbatim_with_braces
286
- text = "```{rust,no_run}\nx = 'foo'\n```"
287
- html = render(text, with: [:fenced_code_blocks])
288
-
289
- assert_equal "<pre><code class=\"rust,no_run\">x = &#39;foo&#39;\n</code></pre>", html
290
- end
291
-
292
- def test_that_fenced_code_copies_language_verbatim
293
- text = "```rust,no_run\nx = 'foo'\n```"
294
- html = render(text, with: [:fenced_code_blocks])
295
-
296
- assert_equal "<pre><code class=\"rust,no_run\">x = &#39;foo&#39;\n</code></pre>", html
297
- end
298
-
299
- def test_that_indented_flag_works
300
- text = <<-indented.strip_heredoc
301
- This is a simple text
302
-
303
- This is some awesome code
304
- with shit
305
-
306
- And this is again a simple text
307
- indented
308
-
309
- assert render(text) =~ /<code/
310
- assert render(text, with: [:disable_indented_code_blocks]) !~ /<code/
311
- end
312
-
313
- def test_that_headers_are_linkable
314
- output = render('### Hello [GitHub](http://github.com)')
315
- expected = "<h3>Hello <a href=\"http://github.com\">GitHub</a></h3>"
316
-
317
- assert_equal expected, output
318
- end
319
-
320
- def test_autolinking_with_ent_chars
321
- markdown = <<-Markdown.strip_heredoc
322
- This a stupid link: https://github.com/rtomayko/tilt/issues?milestone=1&state=open
323
- Markdown
324
- output = render(markdown, with: [:autolink])
325
-
326
- assert_equal "<p>This a stupid link: <a href=\"https://github.com/rtomayko/tilt/issues?milestone=1&state=open\">https://github.com/rtomayko/tilt/issues?milestone=1&amp;state=open</a></p>", output
327
- end
328
-
329
- def test_spaced_headers
330
- output = render("#123 a header yes\n", with: [:space_after_headers])
331
-
332
- assert output !~ /<h1>/
333
- end
334
-
335
- def test_proper_intra_emphasis
336
- assert render("http://en.wikipedia.org/wiki/Dave_Allen_(comedian)", with: [:no_intra_emphasis]) !~ /<em>/
337
- assert render("this fails: hello_world_", with: [:no_intra_emphasis]) !~ /<em>/
338
- assert render("this also fails: hello_world_#bye", with: [:no_intra_emphasis]) !~ /<em>/
339
- assert render("this works: hello_my_world", with: [:no_intra_emphasis]) !~ /<em>/
340
- assert render("句中**粗體**測試", with: [:no_intra_emphasis]) =~ /<strong>/
341
-
342
- markdown = "This is (**bold**) and this_is_not_italic!"
343
- output = "<p>This is (<strong>bold</strong>) and this_is_not_italic!</p>"
344
-
345
- assert_equal output, render(markdown, with: [:no_intra_emphasis])
346
-
347
- markdown = "This is \"**bold**\""
348
- output = "<p>This is &quot;<strong>bold</strong>&quot;</p>"
349
- assert_equal output, render(markdown, with: [:no_intra_emphasis])
350
- end
351
-
352
- def test_emphasis_escaping
353
- assert_equal "<p><strong>foo*</strong> <em>dd_dd</em></p>", render("**foo\\*** _dd\\_dd_")
354
- end
355
-
356
- def test_char_escaping_when_highlighting
357
- output = render("==attribute\\===", with: [:highlight])
358
-
359
- assert_equal "<p><mark>attribute=</mark></p>", output
360
- end
361
-
362
- def test_ordered_lists_with_lax_spacing
363
- output = render("Foo:\n1. Foo\n2. Bar", with: [:lax_spacing])
364
-
365
- assert_match /<ol>/, output
366
- assert_match /<li>Foo<\/li>/, output
367
- end
368
-
369
- def test_references_with_tabs_after_colon
370
- output = render("[Link][id]\n[id]:\t\t\thttp://google.es")
371
-
372
- assert_equal "<p><a href=\"http://google.es\">Link</a></p>", output
373
- end
374
-
375
- def test_superscript
376
- output = render("this is the 2^nd time", with: [:superscript])
377
-
378
- assert_equal "<p>this is the 2<sup>nd</sup> time</p>", output
379
- end
380
-
381
- def test_superscript_enclosed_in_parenthesis
382
- output = render("this is the 2^(nd) time", with: [:superscript])
383
-
384
- assert_equal "<p>this is the 2<sup>nd</sup> time</p>", output
385
- end
386
-
387
- def test_no_rewind_into_previous_inline
388
- result = "<p><em>!dl</em><a href=\"mailto:1@danlec.com\">1@danlec.com</a></p>"
389
- output = render("_!dl_1@danlec.com", with: [:autolink])
390
-
391
- assert_equal result, output
392
-
393
- result = "<p>abc123<em><a href=\"http://www.foo.com\">www.foo.com</a></em>@foo.com</p>"
394
- output = render("abc123_www.foo.com_@foo.com", with: [:autolink])
395
-
396
- assert_equal result, output
397
- end
398
-
399
- def test_autolink_with_period_next_to_url
400
- result = %(<p>Checkout a cool site like <a href="https://github.com">https://github.com</a>.</p>)
401
- output = render("Checkout a cool site like https://github.com.", with: [:autolink])
402
-
403
- assert_equal result, output
404
- end
405
-
406
- def test_single_dashes_on_table_headers
407
- markdown = <<-Markdown.strip_heredoc
408
- | a | b |
409
- | - | - |
410
- | c | d |
411
- Markdown
412
- output = render(markdown, with: [:tables])
413
-
414
- assert_match /<table>/, output
415
- end
416
- end
@@ -1,34 +0,0 @@
1
- # coding: UTF-8
2
- require 'test_helper'
3
-
4
- # Disabled by default
5
- # (these are the easy ones -- the evil ones are not disclosed)
6
- class PathologicalInputsTest # < Redcarpet::TestCase
7
- def setup
8
- @markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
9
- end
10
-
11
- def test_pathological_1
12
- star = '*' * 250000
13
- @markdown.render("#{star}#{star} hi #{star}#{star}")
14
- end
15
-
16
- def test_pathological_2
17
- crt = '^' * 255
18
- str = "#{crt}(\\)"
19
- @markdown.render("#{str*300}")
20
- end
21
-
22
- def test_pathological_3
23
- c = "`t`t`t`t`t`t" * 20000000
24
- @markdown.render(c)
25
- end
26
-
27
- def test_pathological_4
28
- @markdown.render(" [^a]: #{ "A" * 10000 }\n#{ "[^a][]" * 1000000 }\n")
29
- end
30
-
31
- def test_unbound_recursion
32
- @markdown.render(("[" * 10000) + "foo" + ("](bar)" * 10000))
33
- end
34
- end
@@ -1,80 +0,0 @@
1
- require 'test_helper'
2
- require 'tempfile'
3
-
4
- class RedcarpetBinTest < Redcarpet::TestCase
5
- def setup
6
- @fixture_file = Tempfile.new('bin')
7
- @fixture_path = @fixture_file.path
8
-
9
- @fixture_file.write "A ==simple== fixture file -- with " \
10
- "a [link](https://github.com)."
11
- @fixture_file.rewind
12
- end
13
-
14
- def teardown
15
- @fixture_file.unlink
16
- end
17
-
18
- def test_vanilla_bin
19
- run_bin(@fixture_path)
20
-
21
- expected = "<p>A ==simple== fixture file -- with " \
22
- "a <a href=\"https://github.com\">link</a>.</p>\n"
23
-
24
- assert_equal expected, @output
25
- end
26
-
27
- def test_enabling_a_parse_option
28
- run_bin("--parse", "highlight", @fixture_path)
29
-
30
- assert_output "<mark>"
31
- refute_output "=="
32
- end
33
-
34
- def test_enabling_a_render_option
35
- run_bin("--render", "no-links", @fixture_path)
36
-
37
- assert_output "[link]"
38
- refute_output "</a>"
39
- end
40
-
41
- def test_enabling_smarty_pants
42
- run_bin("--smarty", @fixture_path)
43
-
44
- assert_output "&ndash"
45
- refute_output "--"
46
- end
47
-
48
- def test_version_option
49
- run_bin("--version")
50
- assert_output "Redcarpet #{Redcarpet::VERSION}"
51
- end
52
-
53
- def test_legacy_option_parsing
54
- run_bin("--parse-highlight", "--render-no-links", @fixture_path)
55
-
56
- assert_output "<mark>"
57
- refute_output "=="
58
-
59
- assert_output "[link]"
60
- refute_output "</a>"
61
- end
62
-
63
- private
64
-
65
- def run_bin(*args)
66
- bin_path = File.expand_path('../../bin/redcarpet', __FILE__)
67
- ruby = RbConfig.ruby
68
- IO.popen("#{ruby} #{bin_path} #{args.join(" ")}") do |stream|
69
- @output = stream.read
70
- end
71
- end
72
-
73
- def assert_output(pattern)
74
- assert_match pattern, @output
75
- end
76
-
77
- def refute_output(pattern)
78
- refute_match Regexp.new(pattern), @output
79
- end
80
- end
@@ -1,38 +0,0 @@
1
- # coding: UTF-8
2
- require 'test_helper'
3
-
4
- class RedcarpetCompatTest < Redcarpet::TestCase
5
- def test_simple_compat_api
6
- html = RedcarpetCompat.new("This is_just_a test").to_html
7
- assert_equal "<p>This is<em>just</em>a test</p>\n", html
8
- end
9
-
10
- def test_compat_api_enables_extensions
11
- html = RedcarpetCompat.new("This is_just_a test", :no_intra_emphasis).to_html
12
- assert_equal "<p>This is_just_a test</p>\n", html
13
- end
14
-
15
- def test_compat_api_knows_fenced_code_extension
16
- text = "```ruby\nx = 'foo'\n```"
17
- html = RedcarpetCompat.new(text, :fenced_code).to_html
18
- assert_equal "<pre><code class=\"ruby\">x = &#39;foo&#39;\n</code></pre>\n", html
19
- end
20
-
21
- def test_compat_api_ignores_gh_blockcode_extension
22
- text = "```ruby\nx = 'foo'\n```"
23
- html = RedcarpetCompat.new(text, :fenced_code, :gh_blockcode).to_html
24
- assert_equal "<pre><code class=\"ruby\">x = &#39;foo&#39;\n</code></pre>\n", html
25
- end
26
-
27
- def test_compat_api_knows_no_intraemphasis_extension
28
- html = RedcarpetCompat.new("This is_just_a test", :no_intraemphasis).to_html
29
- assert_equal "<p>This is_just_a test</p>\n", html
30
- end
31
-
32
- def test_translate_outdated_extensions
33
- # these extensions are no longer used
34
- exts = [:gh_blockcode, :no_tables, :smart, :strict]
35
- html = RedcarpetCompat.new('"TEST"', *exts).to_html
36
- assert_equal "<p>&quot;TEST&quot;</p>\n", html
37
- end
38
- end
@@ -1,35 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SafeRenderTest < Redcarpet::TestCase
4
- def setup
5
- @renderer = Redcarpet::Render::Safe
6
- end
7
-
8
- def test_safe_links_only_is_enabled_by_default
9
- markdown = "[foo](javascript:alert('foo'))"
10
- output = render(markdown)
11
-
12
- assert_not_match %r{a href}, output
13
- end
14
-
15
- def test_escape_html_is_enabled_by_default
16
- markdown = "<p>Hello world!</p>"
17
- output = render(markdown)
18
-
19
- assert_match %r{&lt;}, output
20
- end
21
-
22
- def test_html_escaping_in_code_blocks
23
- markdown = "~~~\n<p>Hello!</p>\n~~~"
24
- output = render(markdown)
25
-
26
- assert_match %r{&lt;p&gt;}, output
27
- end
28
-
29
- def test_lang_class_is_removed
30
- markdown = "~~~ruby\nclass Foo; end\n~~~"
31
- output = render(markdown, with: [:fenced_code_blocks])
32
-
33
- assert_not_match %r{ruby}, output
34
- end
35
- end
@@ -1,51 +0,0 @@
1
- # coding: UTF-8
2
- require 'test_helper'
3
-
4
- class SmartyHTMLTest < Redcarpet::TestCase
5
- def setup
6
- @renderer = Redcarpet::Render::SmartyHTML
7
- end
8
-
9
- def test_that_smartyhtml_converts_single_quotes
10
- markdown = render("They're not for sale.")
11
- assert_equal "<p>They&rsquo;re not for sale.</p>", markdown
12
- end
13
-
14
- def test_that_smartyhtml_converts_double_quotes
15
- rd = render(%("Quoted text"))
16
- assert_equal %(<p>&ldquo;Quoted text&rdquo;</p>), rd
17
- end
18
-
19
- def test_that_smartyhtml_converts_double_hyphen
20
- rd = render("double hyphen -- ndash")
21
- assert_equal "<p>double hyphen &ndash; ndash</p>", rd
22
- end
23
-
24
- def test_that_smartyhtml_converts_triple_hyphen
25
- rd = render("triple hyphen --- mdash")
26
- assert_equal "<p>triple hyphen &mdash; mdash</p>", rd
27
- end
28
-
29
- def test_that_smartyhtml_ignores_double_hyphen_in_code
30
- rd = render("double hyphen in `--option`")
31
- assert_equal "<p>double hyphen in <code>--option</code></p>", rd
32
- end
33
-
34
- def test_that_smartyhtml_ignores_pre
35
- rd = render(" It's a test of \"pre\"\n")
36
- expected = "It&#39;s a test of &quot;pre&quot;"
37
- assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
38
- end
39
-
40
- def test_that_smartyhtml_ignores_code
41
- rd = render("`It's a test of \"code\"`\n")
42
- expected = "It&#39;s a test of &quot;code&quot;"
43
- assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
44
- end
45
-
46
- def test_that_smartyhtml_ignores_links_for_single_quotes
47
- output = render("[John](link)'s cat")
48
- expected = %(<p><a href="link">John</a>&rsquo;s cat</p>)
49
- assert_equal expected, output
50
- end
51
- end