# encoding: UTF-8 require 'helper' class TestKramdown < JekyllUnitTest context "kramdown" do setup do @config = { 'markdown' => 'kramdown', 'kramdown' => { 'smart_quotes' => 'lsquo,rsquo,ldquo,rdquo', 'entity_output' => 'as_char', 'toc_levels' => '1..6', 'auto_ids' => false, 'footnote_nr' => 1, 'syntax_highlighter' => 'rouge', 'syntax_highlighter_opts' => { 'bold_every' => 8, 'css' => :class } } } @config = Jekyll.configuration(@config) @markdown = Converters::Markdown.new( @config ) end should "run Kramdown" do assert_equal "

Some Header

", @markdown.convert('# Some Header #').strip end context "when asked to convert smart quotes" do should "convert" do assert_match %r!

(“|“)Pit(’|’)hy(”|”)<\/p>!, @markdown.convert(%{"Pit'hy"}).strip end should "support custom types" do override = { "highlighter" => nil, 'kramdown' => { 'smart_quotes' => 'lsaquo,rsaquo,laquo,raquo' } } markdown = Converters::Markdown.new(Utils.deep_merge_hashes(@config, override)) assert_match %r!

(«|«)Pit(›|›)hy(»|»)<\/p>!, \ markdown.convert(%{"Pit'hy"}).strip end end should "render fenced code blocks with syntax highlighting" do result = nokogiri_fragment(@markdown.convert(Utils.strip_heredoc <<-MARKDOWN)) ~~~ruby puts "Hello World" ~~~ MARKDOWN selector = "div.highlighter-rouge>pre.highlight>code" refute result.css(selector).empty? end context "when a custom highlighter is chosen" do should "use the chosen highlighter if it's available" do override = { "highlighter" => nil, "markdown" => "kramdown", "kramdown" => { "syntax_highlighter" => :coderay } } markdown = Converters::Markdown.new(Utils.deep_merge_hashes(@config, override)) result = nokogiri_fragment(markdown.convert(Utils.strip_heredoc <<-MARKDOWN)) ~~~ruby puts "Hello World" ~~~ MARKDOWN selector = "div.highlighter-coderay>div.CodeRay>div.code>pre" refute result.css(selector).empty? end should "support legacy enable_coderay... for now" do override = { "markdown" => "kramdown", "kramdown" => { "enable_coderay" => true, } } @config.delete("highlighter") @config["kramdown"].delete("syntax_highlighter") markdown = Converters::Markdown.new(Utils.deep_merge_hashes(@config, override)) result = nokogiri_fragment(markdown.convert(Utils.strip_heredoc <<-MARKDOWN)) ~~~ruby puts "Hello World" ~~~ MARKDOWN selector = "div.highlighter-coderay>div.CodeRay>div.code>pre" refute result.css(selector).empty?, "pre tag should exist" end end should "move coderay to syntax_highlighter_opts" do original = Kramdown::Document.method(:new) markdown = Converters::Markdown.new(Utils.deep_merge_hashes(@config, { "higlighter" => nil, "markdown" => "kramdown", "kramdown" => { "syntax_highlighter" => "coderay", "coderay" => { "hello" => "world" } } })) expect(Kramdown::Document).to receive(:new) do |arg1, hash| assert_equal hash["syntax_highlighter_opts"]["hello"], "world" original.call(arg1, hash) end markdown.convert("hello world") end end end