greenmat 3.2.2.4 → 3.5.1.0

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.
@@ -2,34 +2,33 @@ require 'test_helper'
2
2
 
3
3
  class SafeRenderTest < Greenmat::TestCase
4
4
  def setup
5
- @render = Greenmat::Render::Safe
6
- @parser = Greenmat::Markdown.new(@render, fenced_code_blocks: true)
5
+ @renderer = Greenmat::Render::Safe
7
6
  end
8
7
 
9
8
  def test_safe_links_only_is_enabled_by_default
10
9
  markdown = "[foo](javascript:alert('foo'))"
11
- output = @parser.render(markdown)
10
+ output = render(markdown)
12
11
 
13
12
  assert_not_match %r{a href}, output
14
13
  end
15
14
 
16
15
  def test_escape_html_is_enabled_by_default
17
16
  markdown = "<p>Hello world!</p>"
18
- output = @parser.render(markdown)
17
+ output = render(markdown)
19
18
 
20
19
  assert_match %r{&lt;}, output
21
20
  end
22
21
 
23
22
  def test_html_escaping_in_code_blocks
24
23
  markdown = "~~~\n<p>Hello!</p>\n~~~"
25
- output = @parser.render(markdown)
24
+ output = render(markdown)
26
25
 
27
26
  assert_match %r{&lt;p&gt;}, output
28
27
  end
29
28
 
30
29
  def test_lang_class_is_removed
31
30
  markdown = "~~~ruby\nclass Foo; end\n~~~"
32
- output = @parser.render(markdown)
31
+ output = render(markdown, with: [:fenced_code_blocks])
33
32
 
34
33
  assert_not_match %r{ruby}, output
35
34
  end
@@ -3,43 +3,49 @@ require 'test_helper'
3
3
 
4
4
  class SmartyHTMLTest < Greenmat::TestCase
5
5
  def setup
6
- @smarty_markdown = Greenmat::Markdown.new(Greenmat::Render::SmartyHTML)
6
+ @renderer = Greenmat::Render::SmartyHTML
7
7
  end
8
8
 
9
9
  def test_that_smartyhtml_converts_single_quotes
10
- markdown = @smarty_markdown.render("They're not for sale.")
11
- assert_equal "<p>They&rsquo;re not for sale.</p>\n", markdown
10
+ markdown = render("They're not for sale.")
11
+ assert_equal "<p>They&rsquo;re not for sale.</p>", markdown
12
12
  end
13
13
 
14
14
  def test_that_smartyhtml_converts_double_quotes
15
- rd = @smarty_markdown.render(%("Quoted text"))
16
- assert_equal %(<p>&ldquo;Quoted text&rdquo;</p>\n), rd
15
+ rd = render(%("Quoted text"))
16
+ assert_equal %(<p>&ldquo;Quoted text&rdquo;</p>), rd
17
17
  end
18
18
 
19
19
  def test_that_smartyhtml_converts_double_hyphen
20
- rd = @smarty_markdown.render("double hyphen -- ndash")
21
- assert_equal "<p>double hyphen &ndash; ndash</p>\n", rd
20
+ rd = render("double hyphen -- ndash")
21
+ assert_equal "<p>double hyphen &ndash; ndash</p>", rd
22
22
  end
23
23
 
24
24
  def test_that_smartyhtml_converts_triple_hyphen
25
- rd = @smarty_markdown.render("triple hyphen --- mdash")
26
- assert_equal "<p>triple hyphen &mdash; mdash</p>\n", rd
25
+ rd = render("triple hyphen --- mdash")
26
+ assert_equal "<p>triple hyphen &mdash; mdash</p>", rd
27
27
  end
28
28
 
29
29
  def test_that_smartyhtml_ignores_double_hyphen_in_code
30
- rd = @smarty_markdown.render("double hyphen in `--option`")
31
- assert_equal "<p>double hyphen in <code>--option</code></p>\n", rd
30
+ rd = render("double hyphen in `--option`")
31
+ assert_equal "<p>double hyphen in <code>--option</code></p>", rd
32
32
  end
33
33
 
34
34
  def test_that_smartyhtml_ignores_pre
35
- rd = @smarty_markdown.render(" It's a test of \"pre\"\n")
35
+ rd = render(" It's a test of \"pre\"\n")
36
36
  expected = "It&#39;s a test of &quot;pre&quot;"
37
37
  assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
38
38
  end
39
39
 
40
40
  def test_that_smartyhtml_ignores_code
41
- rd = @smarty_markdown.render("`It's a test of \"code\"`\n")
41
+ rd = render("`It's a test of \"code\"`\n")
42
42
  expected = "It&#39;s a test of &quot;code&quot;"
43
43
  assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
44
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
45
51
  end
@@ -45,4 +45,14 @@ class SmartyPantsTest < Greenmat::TestCase
45
45
  rd = @pants.render("<p>Hopin' that this bug gets some fixin'.</p>")
46
46
  assert_equal "<p>Hopin&rsquo; that this bug gets some fixin&rsquo;.</p>", rd
47
47
  end
48
+
49
+ def test_that_is_not_confused_by_fractions
50
+ rd = @pants.render('I am 1/4... of the way to 1/4/2000')
51
+ assert_equal "I am &frac14;&hellip; of the way to 1/4/2000", rd
52
+ end
53
+
54
+ def test_that_smart_converts_multiple_single_quotes
55
+ rd = @pants.render(%(<p>'First' and 'second' and 'third'</p>))
56
+ assert_equal %(<p>&lsquo;First&rsquo; and &lsquo;second&rsquo; and &lsquo;third&rsquo;</p>), rd
57
+ end
48
58
  end
@@ -3,37 +3,66 @@ require 'test_helper'
3
3
 
4
4
  class StripDownRender < Greenmat::TestCase
5
5
  def setup
6
- @parser = Greenmat::Markdown.new(Greenmat::Render::StripDown)
6
+ @renderer = Greenmat::Render::StripDown
7
7
  end
8
8
 
9
9
  def test_titles
10
10
  markdown = "# Foo bar"
11
- output = @parser.render(markdown)
11
+ output = render(markdown)
12
12
 
13
- assert_equal "Foo bar\n", output
13
+ assert_equal "Foo bar", output
14
14
  end
15
15
 
16
16
  def test_code_blocks
17
17
  markdown = "\tclass Foo\n\tend"
18
- output = @parser.render(markdown)
18
+ output = render(markdown)
19
19
 
20
- assert_equal "class Foo\nend\n", output
20
+ assert_equal "class Foo\nend", output
21
21
  end
22
22
 
23
23
  def test_images
24
24
  markdown = "Look at this ![picture](http://example.org/picture.png)\n" \
25
25
  "And this: ![](http://example.org/image.jpg)"
26
26
  expected = "Look at this picture http://example.org/picture.png\n" \
27
- "And this: http://example.org/image.jpg\n"
28
- output = @parser.render(markdown)
27
+ "And this: http://example.org/image.jpg"
28
+ output = render(markdown)
29
29
 
30
30
  assert_equal expected, output
31
31
  end
32
32
 
33
33
  def test_links
34
34
  markdown = "Here's an [example](https://github.com)"
35
- expected = "Here's an example (https://github.com)\n"
36
- output = @parser.render(markdown)
35
+ expected = "Here's an example (https://github.com)"
36
+ output = render(markdown)
37
+
38
+ assert_equal expected, output
39
+ end
40
+
41
+ def test_tables
42
+ markdown = "| Left-Aligned | Centre Aligned | Right Aligned |\n" \
43
+ "| :------------ |:---------------:| -----:|\n" \
44
+ "| col 3 is | some wordy text | $1600 |\n" \
45
+ "| col 2 is | centered | $12 |"
46
+ expected = "Left-Aligned\tCentre Aligned\tRight Aligned\t\n" \
47
+ "col 3 is\tsome wordy text\t$1600\t\n" \
48
+ "col 2 is\tcentered\t$12\t"
49
+ output = render(markdown, with: [:tables])
50
+
51
+ assert_equal expected, output
52
+ end
53
+
54
+ def test_highlight
55
+ markdown = "==Hello world!=="
56
+ expected = "Hello world!"
57
+ output = render(markdown, with: [:highlight])
58
+
59
+ assert_equal expected, output
60
+ end
61
+
62
+ def test_with_quote_option_enabled
63
+ markdown = %(A common idiom is "Hello world")
64
+ expected = %(A common idiom is Hello world)
65
+ output = render(markdown, with: [:quote])
37
66
 
38
67
  assert_equal expected, output
39
68
  end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # coding: UTF-8
2
- Encoding.default_internal = 'UTF-8' if defined? Encoding
2
+ $:.unshift(File.expand_path('../../lib', __FILE__))
3
+ Encoding.default_internal = 'UTF-8'
3
4
 
4
5
  gem 'test-unit', '>= 2' # necessary when not using bundle exec
5
6
 
@@ -9,21 +10,41 @@ require 'nokogiri'
9
10
  require 'greenmat'
10
11
  require 'greenmat/render_strip'
11
12
  require 'greenmat/render_man'
12
- require 'greenmat/compat'
13
13
 
14
14
  class Greenmat::TestCase < Test::Unit::TestCase
15
- def html_equal(html_a, html_b)
16
- assert_equal Nokogiri::HTML::DocumentFragment.parse(html_a).to_html,
17
- Nokogiri::HTML::DocumentFragment.parse(html_b).to_html
15
+ def assert_renders(html, markdown)
16
+ assert_equal html, render(markdown)
18
17
  end
19
18
 
20
- def assert_renders(html, markdown)
21
- html_equal html, parser.render(markdown)
19
+ def render(markdown, options = {})
20
+ options = options.fetch(:with, {})
21
+
22
+ if options.kind_of?(Array)
23
+ options = Hash[options.map {|o| [o, true]}]
24
+ end
25
+
26
+ render = begin
27
+ renderer.new(options)
28
+ rescue ArgumentError
29
+ renderer.new
30
+ end
31
+
32
+ parser = Greenmat::Markdown.new(render, options)
33
+
34
+ parser.render(markdown).chomp
22
35
  end
23
36
 
24
37
  private
25
38
 
26
- def parser
27
- @parser ||= Greenmat::Markdown.new(Greenmat::Render::HTML)
39
+ def renderer
40
+ @renderer ||= Greenmat::Render::HTML
41
+ end
42
+
43
+ # Imported from Active Support
44
+ class ::String
45
+ def strip_heredoc
46
+ indent = scan(/^ *(?=\S)/).min.size || 0
47
+ gsub(/^[ \t]{#{indent}}/, '')
48
+ end
28
49
  end
29
50
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: greenmat
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.2.4
4
+ version: 3.5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natacha Porté
8
8
  - Vicent Martí
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-06-11 00:00:00.000000000 Z
12
+ date: 2021-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -45,28 +45,28 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '10.0'
48
+ version: 12.2.1
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '10.0'
55
+ version: 12.2.1
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rake-compiler
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 0.8.3
62
+ version: 1.0.3
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 0.8.3
69
+ version: 1.0.3
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -87,14 +87,14 @@ dependencies:
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 2.5.4
90
+ version: 3.2.3
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: 2.5.4
97
+ version: 3.2.3
98
98
  description: A Markdown parser for Qiita, based on Redcarpet.
99
99
  email: nkymyj@gmail.com
100
100
  executables:
@@ -134,6 +134,7 @@ files:
134
134
  - ext/greenmat/stack.h
135
135
  - greenmat.gemspec
136
136
  - lib/greenmat.rb
137
+ - lib/greenmat/cli.rb
137
138
  - lib/greenmat/compat.rb
138
139
  - lib/greenmat/render_man.rb
139
140
  - lib/greenmat/render_strip.rb
@@ -229,6 +230,7 @@ files:
229
230
  - test/benchmark.rb
230
231
  - test/custom_render_test.rb
231
232
  - test/fixtures/benchmark.md
233
+ - test/greenmat_bin_test.rb
232
234
  - test/greenmat_compat_test.rb
233
235
  - test/html5_test.rb
234
236
  - test/html_render_test.rb
@@ -244,7 +246,7 @@ homepage: https://github.com/increments/greenmat
244
246
  licenses:
245
247
  - MIT
246
248
  metadata: {}
247
- post_install_message:
249
+ post_install_message:
248
250
  rdoc_options: []
249
251
  require_paths:
250
252
  - lib
@@ -259,9 +261,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
259
261
  - !ruby/object:Gem::Version
260
262
  version: '0'
261
263
  requirements: []
262
- rubyforge_project:
263
- rubygems_version: 2.7.4
264
- signing_key:
264
+ rubygems_version: 3.0.3
265
+ signing_key:
265
266
  specification_version: 4
266
267
  summary: A Markdown parser for Qiita, based on Redcarpet.
267
268
  test_files:
@@ -354,6 +355,7 @@ test_files:
354
355
  - test/benchmark.rb
355
356
  - test/custom_render_test.rb
356
357
  - test/fixtures/benchmark.md
358
+ - test/greenmat_bin_test.rb
357
359
  - test/greenmat_compat_test.rb
358
360
  - test/html5_test.rb
359
361
  - test/html_render_test.rb