Files
jekyll/test/test_excerpt.rb
Eloy Espinaco 9b09d8a8e8 Add support for indented link references on excerpt
Excerpt link reference extraction is missing all the indented references
at the bottom of the page. Markdown specify that those can be indented up
to three spaces.
2016-09-02 17:21:10 -03:00

170 lines
5.0 KiB
Ruby

require "helper"
class TestExcerpt < JekyllUnitTest
def setup_post(file)
Document.new(@site.in_source_dir(File.join("_posts", file)), {
:site => @site,
:collection => @site.posts
}).tap(&:read)
end
def do_render(document)
@site.layouts = {
"default" => Layout.new(@site, source_dir("_layouts"), "simple.html")
}
document.output = Jekyll::Renderer.new(@site, document, @site.site_payload).run
end
context "With extraction disabled" do
setup do
clear_dest
@site = fixture_site("excerpt_separator" => "")
@post = setup_post("2013-07-22-post-excerpt-with-layout.markdown")
end
should "not be generated" do
refute @post.generate_excerpt?
end
end
context "An extracted excerpt" do
setup do
clear_dest
@site = fixture_site
@post = setup_post("2013-07-22-post-excerpt-with-layout.markdown")
@excerpt = @post.data["excerpt"]
end
context "#include(string)" do
setup do
@excerpt.output = "Here is a fake output stub"
end
should "return true only if an excerpt output contains a specified string" do
assert @excerpt.include?("fake output")
refute @excerpt.include?("real output")
end
end
context "#id" do
should "contain the UID for the post" do
assert_equal @excerpt.id, "#{@post.id}#excerpt"
end
should "return a string" do
assert_same @post.id.class, String
end
end
context "#to_s" do
should "return rendered output" do
assert_equal @excerpt.output, @excerpt.to_s
end
should "return its output if output present" do
@excerpt.output = "Fake Output"
assert_equal @excerpt.output, @excerpt.to_s
end
end
context "#inspect" do
should "contain the excerpt id as a shorthand string identifier" do
assert_equal @excerpt.inspect, "<Excerpt: #{@excerpt.id}>"
end
should "return a string" do
assert_same @post.id.class, String
end
end
context "#to_liquid" do
should "contain the proper page data to mimic the post liquid" do
assert_equal "Post Excerpt with Layout", @excerpt.to_liquid["title"]
url = "/bar/baz/z_category/mixedcase/2013/07/22/post-excerpt-with-layout.html"
assert_equal url, @excerpt.to_liquid["url"]
assert_equal Time.parse("2013-07-22"), @excerpt.to_liquid["date"]
assert_equal %w(bar baz z_category MixedCase), @excerpt.to_liquid["categories"]
assert_equal %w(first second third jekyllrb.com), @excerpt.to_liquid["tags"]
assert_equal "_posts/2013-07-22-post-excerpt-with-layout.markdown",
@excerpt.to_liquid["path"]
end
end
context "#content" do
context "before render" do
should "be the first paragraph of the page" do
expected = "First paragraph with [link ref][link].\n\n[link]: "\
"http://www.jekyllrb.com/"
assert_equal expected, @excerpt.content
end
should "contain any refs at the bottom of the page" do
assert @excerpt.content.include?("[link]: http://www.jekyllrb.com/")
end
end
context "after render" do
setup do
@rendered_post = @post.dup
do_render(@rendered_post)
@extracted_excerpt = @rendered_post.data["excerpt"]
end
should "be the first paragraph of the page" do
expected = "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link "\
"ref</a>.</p>\n\n"
assert_equal expected, @extracted_excerpt.output
end
should "link properly" do
assert @extracted_excerpt.content.include?("http://www.jekyllrb.com/")
end
end
context "with indented link references" do
setup do
@post = setup_post("2016-08-16-indented-link-references.markdown")
@excerpt = @post.excerpt
end
should "contain all refs at the bottom of the page" do
(0..3).each do |i|
assert_match "[link_#{i}]: www.example.com/#{i}", @excerpt.content
end
end
should "ignore indented code" do
refute_match "[fakelink]:", @excerpt.content
end
should "render links properly" do
@rendered_post = @post.dup
do_render(@rendered_post)
output = @rendered_post.data["excerpt"].output
(0..3).each do |i|
assert_includes output, "<a href=\"www.example.com/#{i}\">"
end
end
end
end
end
context "A whole-post excerpt" do
setup do
clear_dest
@site = fixture_site
@post = setup_post("2008-02-02-published.markdown")
@excerpt = @post.data["excerpt"]
end
should "be generated" do
assert_equal true, @excerpt.is_a?(Jekyll::Excerpt)
end
context "#content" do
should "match the post content" do
assert_equal @post.content, @excerpt.content
end
end
end
end