commonmarker 0.17.13 → 0.23.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of commonmarker might be problematic. Click here for more details.

Files changed (74) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +94 -18
  3. data/Rakefile +24 -5
  4. data/bin/commonmarker +107 -47
  5. data/commonmarker.gemspec +18 -15
  6. data/ext/commonmarker/autolink.c +10 -6
  7. data/ext/commonmarker/blocks.c +102 -31
  8. data/ext/commonmarker/buffer.c +0 -1
  9. data/ext/commonmarker/chunk.h +0 -1
  10. data/ext/commonmarker/cmark-gfm-core-extensions.h +29 -0
  11. data/ext/commonmarker/cmark-gfm-extension_api.h +19 -2
  12. data/ext/commonmarker/cmark-gfm.h +19 -5
  13. data/ext/commonmarker/cmark-gfm_version.h +2 -2
  14. data/ext/commonmarker/commonmark.c +33 -12
  15. data/ext/commonmarker/commonmarker.c +209 -100
  16. data/ext/commonmarker/core-extensions.c +2 -0
  17. data/ext/commonmarker/ext_scanners.c +622 -684
  18. data/ext/commonmarker/ext_scanners.h +2 -0
  19. data/ext/commonmarker/extconf.rb +3 -1
  20. data/ext/commonmarker/footnotes.c +23 -0
  21. data/ext/commonmarker/footnotes.h +2 -0
  22. data/ext/commonmarker/houdini_href_e.c +1 -1
  23. data/ext/commonmarker/html.c +46 -25
  24. data/ext/commonmarker/inlines.c +127 -30
  25. data/ext/commonmarker/iterator.h +0 -1
  26. data/ext/commonmarker/map.h +0 -1
  27. data/ext/commonmarker/node.c +17 -3
  28. data/ext/commonmarker/node.h +9 -0
  29. data/ext/commonmarker/parser.h +2 -1
  30. data/ext/commonmarker/plaintext.c +22 -0
  31. data/ext/commonmarker/render.c +18 -15
  32. data/ext/commonmarker/render.h +0 -1
  33. data/ext/commonmarker/scanners.c +779 -953
  34. data/ext/commonmarker/scanners.h +0 -2
  35. data/ext/commonmarker/strikethrough.c +4 -1
  36. data/ext/commonmarker/syntax_extension.c +10 -0
  37. data/ext/commonmarker/syntax_extension.h +2 -0
  38. data/ext/commonmarker/table.c +178 -31
  39. data/ext/commonmarker/tasklist.c +156 -0
  40. data/ext/commonmarker/tasklist.h +8 -0
  41. data/ext/commonmarker/xml.c +9 -2
  42. data/lib/commonmarker/config.rb +41 -38
  43. data/lib/commonmarker/errors.rb +12 -0
  44. data/lib/commonmarker/node/inspect.rb +15 -17
  45. data/lib/commonmarker/node.rb +14 -2
  46. data/lib/commonmarker/renderer/html_renderer.rb +45 -36
  47. data/lib/commonmarker/renderer.rb +16 -10
  48. data/lib/commonmarker/version.rb +3 -1
  49. data/lib/commonmarker.rb +8 -7
  50. data/test/benchmark.rb +26 -21
  51. data/test/fixtures/strong.md +1 -0
  52. data/test/fixtures/table.md +10 -0
  53. data/test/test_attributes.rb +5 -3
  54. data/test/test_basics.rb +19 -0
  55. data/test/test_commands.rb +72 -0
  56. data/test/test_commonmark.rb +15 -13
  57. data/test/test_doc.rb +31 -29
  58. data/test/test_encoding.rb +9 -5
  59. data/test/test_extensions.rb +66 -73
  60. data/test/test_footnotes.rb +47 -12
  61. data/test/test_gc.rb +6 -2
  62. data/test/test_helper.rb +25 -15
  63. data/test/test_linebreaks.rb +2 -0
  64. data/test/test_maliciousness.rb +189 -190
  65. data/test/test_node.rb +12 -12
  66. data/test/test_options.rb +17 -15
  67. data/test/test_pathological_inputs.rb +14 -12
  68. data/test/test_plaintext.rb +23 -21
  69. data/test/test_renderer.rb +29 -10
  70. data/test/test_smartpunct.rb +7 -2
  71. data/test/test_spec.rb +7 -4
  72. data/test/test_tasklists.rb +43 -0
  73. data/test/test_xml.rb +107 -0
  74. metadata +74 -30
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestLinebreaks < Minitest::Test
@@ -1,263 +1,262 @@
1
- require 'test_helper'
1
+ # frozen_string_literal: true
2
2
 
3
- class CommonMarker::TestMaliciousness < Minitest::Test
4
- def setup
5
- @doc = CommonMarker.render_doc('Hi *there*')
6
- end
3
+ require 'test_helper'
7
4
 
8
- def test_init_with_bad_type
9
- assert_raises TypeError do
10
- Node.new(123)
5
+ module CommonMarker
6
+ class TestMaliciousness < Minitest::Test
7
+ def setup
8
+ @doc = CommonMarker.render_doc('Hi *there*')
11
9
  end
12
10
 
13
- assert_raises NodeError do
14
- Node.new(:totes_fake)
15
- end
11
+ def test_init_with_bad_type
12
+ assert_raises TypeError do
13
+ Node.new(123)
14
+ end
16
15
 
17
- assert_raises TypeError do
18
- Node.new([])
19
- end
16
+ assert_raises NodeError do
17
+ Node.new(:totes_fake)
18
+ end
20
19
 
21
- assert_raises TypeError do
22
- Node.new([23])
23
- end
20
+ assert_raises TypeError do
21
+ Node.new([])
22
+ end
24
23
 
25
- assert_raises TypeError do
26
- Node.new(nil)
27
- end
28
- end
24
+ assert_raises TypeError do
25
+ Node.new([23])
26
+ end
29
27
 
30
- def test_rendering_with_bad_type
31
- assert_raises TypeError do
32
- CommonMarker.render_html("foo \n baz", 123)
28
+ assert_raises TypeError do
29
+ Node.new(nil)
30
+ end
33
31
  end
34
32
 
35
- assert_raises TypeError do
36
- CommonMarker.render_html("foo \n baz", :totes_fake)
37
- end
33
+ def test_rendering_with_bad_type
34
+ assert_raises TypeError do
35
+ CommonMarker.render_html("foo \n baz", 123)
36
+ end
38
37
 
39
- assert_raises TypeError do
40
- CommonMarker.render_html("foo \n baz", [])
41
- end
38
+ assert_raises TypeError do
39
+ CommonMarker.render_html("foo \n baz", :totes_fake)
40
+ end
42
41
 
43
- assert_raises TypeError do
44
- CommonMarker.render_html("foo \n baz", [23])
45
- end
42
+ assert_raises TypeError do
43
+ CommonMarker.render_html("foo \n baz", [])
44
+ end
46
45
 
47
- assert_raises TypeError do
48
- CommonMarker.render_html("foo \n baz", nil)
49
- end
46
+ assert_raises TypeError do
47
+ CommonMarker.render_html("foo \n baz", [23])
48
+ end
50
49
 
51
- assert_raises TypeError do
52
- CommonMarker.render_html("foo \n baz", [:SMART, 'totes_fake'])
53
- end
50
+ assert_raises TypeError do
51
+ CommonMarker.render_html("foo \n baz", nil)
52
+ end
54
53
 
55
- assert_raises TypeError do
56
- CommonMarker.render_html(123)
57
- end
54
+ assert_raises TypeError do
55
+ CommonMarker.render_html("foo \n baz", [:SMART, 'totes_fake'])
56
+ end
58
57
 
59
- assert_raises TypeError do
60
- CommonMarker.render_html([123])
61
- end
58
+ assert_raises TypeError do
59
+ CommonMarker.render_html(123)
60
+ end
62
61
 
63
- assert_raises TypeError do
64
- CommonMarker.render_html(nil)
65
- end
62
+ assert_raises TypeError do
63
+ CommonMarker.render_html([123])
64
+ end
66
65
 
67
- err = assert_raises TypeError do
68
- CommonMarker.render_html("foo \n baz", [:SMART])
69
- end
70
- assert_equal err.message, 'option \':SMART\' does not exist for CommonMarker::Config::Render'
66
+ assert_raises TypeError do
67
+ CommonMarker.render_html(nil)
68
+ end
71
69
 
72
- assert_raises TypeError do
73
- CommonMarker.render_doc("foo \n baz", 123)
74
- end
70
+ assert_raises TypeError do
71
+ CommonMarker.render_doc("foo \n baz", 123)
72
+ end
75
73
 
76
- err = assert_raises TypeError do
77
- CommonMarker.render_doc("foo \n baz", :safe)
78
- end
79
- assert_equal err.message, 'option \':safe\' does not exist for CommonMarker::Config::Parse'
74
+ err = assert_raises TypeError do
75
+ CommonMarker.render_doc("foo \n baz", :safe)
76
+ end
77
+ assert_equal('option \':safe\' does not exist for CommonMarker::Config::OPTS[:parse]', err.message)
80
78
 
81
- assert_raises TypeError do
82
- CommonMarker.render_doc("foo \n baz", :totes_fake)
83
- end
79
+ assert_raises TypeError do
80
+ CommonMarker.render_doc("foo \n baz", :totes_fake)
81
+ end
84
82
 
85
- assert_raises TypeError do
86
- CommonMarker.render_doc("foo \n baz", [])
87
- end
83
+ assert_raises TypeError do
84
+ CommonMarker.render_doc("foo \n baz", [])
85
+ end
88
86
 
89
- assert_raises TypeError do
90
- CommonMarker.render_doc("foo \n baz", [23])
91
- end
87
+ assert_raises TypeError do
88
+ CommonMarker.render_doc("foo \n baz", [23])
89
+ end
92
90
 
93
- assert_raises TypeError do
94
- CommonMarker.render_doc("foo \n baz", nil)
95
- end
91
+ assert_raises TypeError do
92
+ CommonMarker.render_doc("foo \n baz", nil)
93
+ end
96
94
 
97
- assert_raises TypeError do
98
- CommonMarker.render_doc("foo \n baz", [:SMART, 'totes_fake'])
99
- end
95
+ assert_raises TypeError do
96
+ CommonMarker.render_doc("foo \n baz", [:SMART, 'totes_fake'])
97
+ end
100
98
 
101
- assert_raises TypeError do
102
- CommonMarker.render_doc(123)
103
- end
99
+ assert_raises TypeError do
100
+ CommonMarker.render_doc(123)
101
+ end
104
102
 
105
- assert_raises TypeError do
106
- CommonMarker.render_doc([123])
107
- end
103
+ assert_raises TypeError do
104
+ CommonMarker.render_doc([123])
105
+ end
108
106
 
109
- assert_raises TypeError do
110
- CommonMarker.render_doc(nil)
107
+ assert_raises TypeError do
108
+ CommonMarker.render_doc(nil)
109
+ end
111
110
  end
112
- end
113
111
 
114
- def test_bad_set_string_content
115
- assert_raises TypeError do
116
- @doc.string_content = 123
112
+ def test_bad_set_string_content
113
+ assert_raises TypeError do
114
+ @doc.string_content = 123
115
+ end
117
116
  end
118
- end
119
-
120
- def test_bad_walking
121
- assert_nil @doc.parent
122
- assert_nil @doc.previous
123
- end
124
117
 
125
- def test_bad_insertion
126
- code = Node.new(:code)
127
- assert_raises NodeError do
128
- @doc.insert_before(code)
118
+ def test_bad_walking
119
+ assert_nil @doc.parent
120
+ assert_nil @doc.previous
129
121
  end
130
122
 
131
- paragraph = Node.new(:paragraph)
132
- assert_raises NodeError do
133
- @doc.insert_after(paragraph)
134
- end
123
+ def test_bad_insertion
124
+ code = Node.new(:code)
125
+ assert_raises NodeError do
126
+ @doc.insert_before(code)
127
+ end
135
128
 
136
- document = Node.new(:document)
137
- assert_raises NodeError do
138
- @doc.prepend_child(document)
139
- end
129
+ paragraph = Node.new(:paragraph)
130
+ assert_raises NodeError do
131
+ @doc.insert_after(paragraph)
132
+ end
140
133
 
141
- assert_raises NodeError do
142
- @doc.append_child(document)
143
- end
144
- end
134
+ document = Node.new(:document)
135
+ assert_raises NodeError do
136
+ @doc.prepend_child(document)
137
+ end
145
138
 
146
- def test_bad_url_get
147
- assert_raises NodeError do
148
- @doc.url
139
+ assert_raises NodeError do
140
+ @doc.append_child(document)
141
+ end
149
142
  end
150
- end
151
143
 
152
- def test_bad_url_set
153
- assert_raises NodeError do
154
- @doc.url = '123'
144
+ def test_bad_url_get
145
+ assert_raises NodeError do
146
+ @doc.url
147
+ end
155
148
  end
156
149
 
157
- link = CommonMarker.render_doc('[GitHub](https://www.github.com)').first_child.first_child
158
- assert_raises TypeError do
159
- link.url = 123
160
- end
161
- end
150
+ def test_bad_url_set
151
+ assert_raises NodeError do
152
+ @doc.url = '123'
153
+ end
162
154
 
163
- def test_bad_title_get
164
- assert_raises NodeError do
165
- @doc.title
155
+ link = CommonMarker.render_doc('[GitHub](https://www.github.com)').first_child.first_child
156
+ assert_raises TypeError do
157
+ link.url = 123
158
+ end
166
159
  end
167
- end
168
160
 
169
- def test_bad_title_set
170
- assert_raises NodeError do
171
- @doc.title = '123'
161
+ def test_bad_title_get
162
+ assert_raises NodeError do
163
+ @doc.title
164
+ end
172
165
  end
173
166
 
174
- image = CommonMarker.render_doc('![alt text](https://github.com/favicon.ico "Favicon")')
175
- image = image.first_child.first_child
176
- assert_raises TypeError do
177
- image.title = 123
178
- end
179
- end
167
+ def test_bad_title_set
168
+ assert_raises NodeError do
169
+ @doc.title = '123'
170
+ end
180
171
 
181
- def test_bad_header_level_get
182
- assert_raises NodeError do
183
- @doc.header_level
172
+ image = CommonMarker.render_doc('![alt text](https://github.com/favicon.ico "Favicon")')
173
+ image = image.first_child.first_child
174
+ assert_raises TypeError do
175
+ image.title = 123
176
+ end
184
177
  end
185
- end
186
178
 
187
- def test_bad_header_level_set
188
- assert_raises NodeError do
189
- @doc.header_level = 1
179
+ def test_bad_header_level_get
180
+ assert_raises NodeError do
181
+ @doc.header_level
182
+ end
190
183
  end
191
184
 
192
- header = CommonMarker.render_doc('### Header Three').first_child
193
- assert_raises TypeError do
194
- header.header_level = '123'
195
- end
196
- end
185
+ def test_bad_header_level_set
186
+ assert_raises NodeError do
187
+ @doc.header_level = 1
188
+ end
197
189
 
198
- def test_bad_list_type_get
199
- assert_raises NodeError do
200
- @doc.list_type
190
+ header = CommonMarker.render_doc('### Header Three').first_child
191
+ assert_raises TypeError do
192
+ header.header_level = '123'
193
+ end
201
194
  end
202
- end
203
195
 
204
- def test_bad_list_type_set
205
- assert_raises NodeError do
206
- @doc.list_type = :bullet_list
196
+ def test_bad_list_type_get
197
+ assert_raises NodeError do
198
+ @doc.list_type
199
+ end
207
200
  end
208
201
 
209
- ul_list = CommonMarker.render_doc("* Bullet\n*Bullet").first_child
210
- assert_raises NodeError do
211
- ul_list.list_type = :fake
212
- end
213
- assert_raises TypeError do
214
- ul_list.list_type = 1234
215
- end
216
- end
202
+ def test_bad_list_type_set
203
+ assert_raises NodeError do
204
+ @doc.list_type = :bullet_list
205
+ end
217
206
 
218
- def test_bad_list_start_get
219
- assert_raises NodeError do
220
- @doc.list_start
207
+ ul_list = CommonMarker.render_doc("* Bullet\n*Bullet").first_child
208
+ assert_raises NodeError do
209
+ ul_list.list_type = :fake
210
+ end
211
+ assert_raises TypeError do
212
+ ul_list.list_type = 1234
213
+ end
221
214
  end
222
- end
223
215
 
224
- def test_bad_list_start_set
225
- assert_raises NodeError do
226
- @doc.list_start = 12
216
+ def test_bad_list_start_get
217
+ assert_raises NodeError do
218
+ @doc.list_start
219
+ end
227
220
  end
228
221
 
229
- ol_list = CommonMarker.render_doc("1. One\n2. Two").first_child
230
- assert_raises TypeError do
231
- ol_list.list_start = :fake
232
- end
233
- end
222
+ def test_bad_list_start_set
223
+ assert_raises NodeError do
224
+ @doc.list_start = 12
225
+ end
234
226
 
235
- def test_bad_list_tight_get
236
- assert_raises NodeError do
237
- @doc.list_tight
227
+ ol_list = CommonMarker.render_doc("1. One\n2. Two").first_child
228
+ assert_raises TypeError do
229
+ ol_list.list_start = :fake
230
+ end
238
231
  end
239
- end
240
232
 
241
- def test_bad_list_tight_set
242
- assert_raises NodeError do
243
- @doc.list_tight = false
233
+ def test_bad_list_tight_get
234
+ assert_raises NodeError do
235
+ @doc.list_tight
236
+ end
244
237
  end
245
- end
246
238
 
247
- def test_bad_fence_info_get
248
- assert_raises NodeError do
249
- @doc.fence_info
239
+ def test_bad_list_tight_set
240
+ assert_raises NodeError do
241
+ @doc.list_tight = false
242
+ end
250
243
  end
251
- end
252
244
 
253
- def test_bad_fence_info_set
254
- assert_raises NodeError do
255
- @doc.fence_info = 'ruby'
245
+ def test_bad_fence_info_get
246
+ assert_raises NodeError do
247
+ @doc.fence_info
248
+ end
256
249
  end
257
250
 
258
- fence = CommonMarker.render_doc("``` ruby\nputs 'wow'\n```").first_child
259
- assert_raises TypeError do
260
- fence.fence_info = 123
251
+ def test_bad_fence_info_set
252
+ assert_raises NodeError do
253
+ @doc.fence_info = 'ruby'
254
+ end
255
+
256
+ fence = CommonMarker.render_doc("``` ruby\nputs 'wow'\n```").first_child
257
+ assert_raises TypeError do
258
+ fence.fence_info = 123
259
+ end
261
260
  end
262
261
  end
263
262
  end
data/test/test_node.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestNode < Minitest::Test
@@ -10,7 +12,7 @@ class TestNode < Minitest::Test
10
12
  @doc.walk do |node|
11
13
  nodes << node.type
12
14
  end
13
- assert_equal [:document, :paragraph, :text, :emph, :text, :text], nodes
15
+ assert_equal %i[document paragraph text emph text text], nodes
14
16
  end
15
17
 
16
18
  def test_each
@@ -18,29 +20,29 @@ class TestNode < Minitest::Test
18
20
  @doc.first_child.each do |node|
19
21
  nodes << node.type
20
22
  end
21
- assert_equal [:text, :emph, :text], nodes
23
+ assert_equal %i[text emph text], nodes
22
24
  end
23
25
 
24
26
  def test_deprecated_each_child
25
27
  nodes = []
26
- out, err = capture_io do
28
+ _, err = capture_io do
27
29
  @doc.first_child.each_child do |node|
28
30
  nodes << node.type
29
31
  end
30
32
  end
31
- assert_equal [:text, :emph, :text], nodes
32
- assert_match /`each_child` is deprecated/, err
33
+ assert_equal %i[text emph text], nodes
34
+ assert_match(/`each_child` is deprecated/, err)
33
35
  end
34
36
 
35
37
  def test_select
36
38
  nodes = @doc.first_child.select { |node| node.type == :text }
37
39
  assert_equal CommonMarker::Node, nodes.first.class
38
- assert_equal [:text, :text], nodes.map(&:type)
40
+ assert_equal %i[text text], nodes.map(&:type)
39
41
  end
40
42
 
41
43
  def test_map
42
44
  nodes = @doc.first_child.map(&:type)
43
- assert_equal [:text, :emph, :text], nodes
45
+ assert_equal %i[text emph text], nodes
44
46
  end
45
47
 
46
48
  def test_insert_illegal
@@ -61,9 +63,7 @@ class TestNode < Minitest::Test
61
63
 
62
64
  def test_walk_and_set_string_content
63
65
  @doc.walk do |node|
64
- if node.type == :text && node.string_content == 'there'
65
- node.string_content = 'world'
66
- end
66
+ node.string_content = 'world' if node.type == :text && node.string_content == 'there'
67
67
  end
68
68
  result = HtmlRenderer.new.render(@doc)
69
69
  assert_equal "<p>Hi <em>world</em>, I am mostly text!</p>\n", result
@@ -80,10 +80,10 @@ class TestNode < Minitest::Test
80
80
  end
81
81
 
82
82
  def test_inspect
83
- assert_match /#<CommonMarker::Node\(document\):/, @doc.inspect
83
+ assert_match(/#<CommonMarker::Node\(document\):/, @doc.inspect)
84
84
  end
85
85
 
86
86
  def test_pretty_print
87
- assert_match /#<CommonMarker::Node\(document\):/, PP.pp(@doc, '')
87
+ assert_match(/#<CommonMarker::Node\(document\):/, PP.pp(@doc, +''))
88
88
  end
89
89
  end
data/test/test_options.rb CHANGED
@@ -1,35 +1,37 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestExtensions < Minitest::Test
4
6
  def test_full_info_string
5
- md = <<-MD
6
- ```ruby
7
- module Foo
8
- ```
7
+ md = <<~MD
8
+ ```ruby
9
+ module Foo
10
+ ```
9
11
  MD
10
12
 
11
13
  CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
12
- assert_includes out, %q(<pre><code class="language-ruby">)
14
+ assert_includes out, '<pre><code class="language-ruby">'
13
15
  end
14
16
 
15
- md = <<-MD
16
- ```ruby my info string
17
- module Foo
18
- ```
17
+ md = <<~MD
18
+ ```ruby my info string
19
+ module Foo
20
+ ```
19
21
  MD
20
22
 
21
23
  CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
22
- assert_includes out, %q(<pre><code class="language-ruby" data-meta="my info string">)
24
+ assert_includes out, '<pre><code class="language-ruby" data-meta="my info string">'
23
25
  end
24
26
 
25
- md = <<-MD
26
- ```ruby my \x00 string
27
- module Foo
28
- ```
27
+ md = <<~MD
28
+ ```ruby my \x00 string
29
+ module Foo
30
+ ```
29
31
  MD
30
32
 
31
33
  CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
32
- assert_includes out, %Q(<pre><code class="language-ruby" data-meta="my � string">)
34
+ assert_includes out, %(<pre><code class="language-ruby" data-meta="my � string">)
33
35
  end
34
36
  end
35
37
  end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'minitest/benchmark' if ENV['BENCH']
3
5
 
4
- def markdown(s)
5
- CommonMarker.render_doc(s).to_html
6
+ def markdown(str)
7
+ CommonMarker.render_doc(str).to_html
6
8
  end
7
9
 
8
10
  # list of pairs consisting of input and a regex that must match the output.
9
11
  pathological = {
10
12
  'nested strong emph' =>
11
- [('*a **a ' * 65_000) + 'b' + (' a** a*' * 65_000),
13
+ ["#{'*a **a ' * 65_000}b#{' a** a*' * 65_000}",
12
14
  Regexp.compile('(<em>a <strong>a ){65_000}b( a</strong> a</em>){65_000}')],
13
15
  'many emph closers with no openers' =>
14
16
  [('a_ ' * 65_000),
@@ -32,10 +34,10 @@ pathological = {
32
34
  ['**x [a*b**c*](d)',
33
35
  Regexp.compile('\\*\\*x <a href=\'d\'>a<em>b</em><em>c</em></a>')],
34
36
  'nested brackets' =>
35
- [('[' * 50_000) + 'a' + (']' * 50_000),
37
+ ["#{'[' * 50_000}a#{']' * 50_000}",
36
38
  Regexp.compile('\[{50000}a\]{50000}')],
37
39
  'nested block quotes' =>
38
- [(('> ' * 50_000) + 'a'),
40
+ ["#{'> ' * 50_000}a",
39
41
  Regexp.compile('(<blockquote>\n){50000}')],
40
42
  'U+0000 in input' =>
41
43
  ['abc\u0000de\u0000',
@@ -51,41 +53,41 @@ end
51
53
 
52
54
  if ENV['BENCH']
53
55
  class PathologicalInputsPerformanceTest < Minitest::Benchmark
54
- def bench_pathological_1
56
+ def test_bench_pathological_one
55
57
  assert_performance_linear 0.99 do |n|
56
58
  star = '*' * (n * 10)
57
59
  markdown("#{star}#{star}hi#{star}#{star}")
58
60
  end
59
61
  end
60
62
 
61
- def bench_pathological_2
63
+ def test_bench_pathological_two
62
64
  assert_performance_linear 0.99 do |n|
63
65
  c = '`t`t`t`t`t`t' * (n * 10)
64
66
  markdown(c)
65
67
  end
66
68
  end
67
69
 
68
- def bench_pathological_3
70
+ def test_bench_pathological_three
69
71
  assert_performance_linear 0.99 do |n|
70
72
  markdown(" [a]: #{'A' * n}\n\n#{'[a][]' * n}\n")
71
73
  end
72
74
  end
73
75
 
74
- def bench_pathological_4
76
+ def test_bench_pathological_four
75
77
  assert_performance_linear 0.5 do |n|
76
78
  markdown("#{'[' * n}a#{']' * n}")
77
79
  end
78
80
  end
79
81
 
80
- def bench_pathological_5
82
+ def test_bench_pathological_five
81
83
  assert_performance_linear 0.99 do |n|
82
84
  markdown("#{'**a *a ' * n}#{'a* a**' * n}")
83
85
  end
84
86
  end
85
87
 
86
- def bench_unbound_recursion
88
+ def test_bench_unbound_recursion
87
89
  assert_performance_linear 0.99 do |n|
88
- markdown(('[' * n) + 'foo' + ('](bar)' * n))
90
+ markdown("#{'[' * n}foo#{'](bar)' * n}")
89
91
  end
90
92
  end
91
93
  end