require 'helper' class TestExcerpt < Test::Unit::TestCase def setup_post(file) Post.new(@site, source_dir, '', file) end def do_render(post) layouts = { "default" => Layout.new(@site, source_dir('_layouts'), "simple.html")} post.render(layouts, {"site" => {"posts" => []}}) end context "With extraction disabled" do setup do clear_dest stub(Jekyll).configuration do Jekyll::Configuration::DEFAULTS.merge({'excerpt_separator' => ''}) end @site = Site.new(Jekyll.configuration) @post = setup_post("2013-07-22-post-excerpt-with-layout.markdown") end should "not be generated" do excerpt = @post.send(:extract_excerpt) assert_equal true, excerpt.empty? end end context "An extracted excerpt" do setup do clear_dest stub(Jekyll).configuration { Jekyll::Configuration::DEFAULTS } @site = Site.new(Jekyll.configuration) @post = setup_post("2013-07-22-post-excerpt-with-layout.markdown") @excerpt = @post.send :extract_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 its content if no output present" do assert_equal @excerpt.content, @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, "" 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 mimick the post liquid" do assert_equal "Post Excerpt with Layout", @excerpt.to_liquid["title"] assert_equal "/bar/baz/z_category/2013/07/22/post-excerpt-with-layout.html", @excerpt.to_liquid["url"] assert_equal Time.parse("2013-07-22"), @excerpt.to_liquid["date"] assert_equal %w[bar baz z_category], @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 should "consider inheritance" do klass = Class.new(Jekyll::Post) assert_gets_called = false klass.send(:define_method, :assert_gets_called) { assert_gets_called = true } klass.const_set(:EXCERPT_ATTRIBUTES_FOR_LIQUID, Jekyll::Post::EXCERPT_ATTRIBUTES_FOR_LIQUID + ['assert_gets_called']) post = klass.new(@site, source_dir, '', "2008-02-02-published.textile") Jekyll::Excerpt.new(post).to_liquid assert assert_gets_called, 'assert_gets_called did not get called on post.' end end context "#content" do context "before render" do should "be the first paragraph of the page" do assert_equal "First paragraph with [link ref][link].\n\n[link]: http://www.jekyllrb.com/", @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.send :extracted_excerpt end should "be the first paragraph of the page" do assert_equal "

First paragraph with link ref.

\n\n", @extracted_excerpt.content end should "link properly" do assert @extracted_excerpt.content.include?("http://www.jekyllrb.com/") end end end end end