test/helpers/test_capturing.rb in nanoc-4.1.6 vs test/helpers/test_capturing.rb in nanoc-4.2.0b1

- old
+ new

@@ -1,51 +1,51 @@ class Nanoc::Helpers::CapturingTest < Nanoc::TestCase include Nanoc::Helpers::Capturing - def test_content_for - require 'erb' - - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" + def item_rep_repo_for(item) + Nanoc::Int::ItemRepRepo.new.tap do |repo| + repo << Nanoc::Int::ItemRep.new(item, :default) end + end - # Build content to be evaluated - content = "head <% content_for :sidebar do %>\n" \ - " <%= 1+2 %>\n" \ - '<% end %> foot' - - # Build site - site = Nanoc::Int::SiteLoader.new.new_empty - item = Nanoc::Int::Item.new('moo', {}, '/blah/') - @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil) - @item = Nanoc::ItemWithRepsView.new(item, nil) - - # Evaluate content - result = ::ERB.new(content).result(binding) - - # Check - assert_equal '3', content_for(@item, :sidebar).strip - assert_match(/^head\s+foot$/, result) + def view_context_for(item) + Nanoc::ViewContext.new( + reps: item_rep_repo_for(item), + items: :__irrelevant__, + dependency_tracker: :__irrelevant__, + compiler: :__irrelevant__, + ) end - def test_capture - require 'erb' + def test_dependencies + with_site do |_site| + # Prepare + File.open('lib/helpers.rb', 'w') do |io| + io.write 'include Nanoc::Helpers::Capturing' + end + File.open('content/includer.erb', 'w') do |io| + io.write '[<%= content_for(@items.find { |i| i.identifier == \'/includee/\' }, :blah) %>]' + end + File.open('Rules', 'w') do |io| + io.write "compile '*' do ; filter :erb ; end\n" + io.write "route '*' do ; item.identifier + 'index.html' ; end\n" + end - # Build site - @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil) - @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('moo', {}, '/blah/'), nil) + # Compile once + File.open('content/includee.erb', 'w') do |io| + io.write '{<% content_for :blah do %>Old content<% end %>}' + end + Nanoc::CLI.run(%w(compile)) + assert_equal '[Old content]', File.read('output/includer/index.html') - # Capture - _erbout = 'foo' - captured_content = capture do - _erbout << 'bar' + # Compile again + File.open('content/includee.erb', 'w') do |io| + io.write '{<% content_for :blah do %>New content<% end %>}' + end + Nanoc::CLI.run(%w(compile)) + assert_equal '[New content]', File.read('output/includer/index.html') end - - # Check - assert_equal 'foo', _erbout - assert_equal 'bar', captured_content end def test_content_for_recursively require 'erb' @@ -64,191 +64,17 @@ <% end %> <%= content_for @item, :outerbox %> foot EOS - @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil) - @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('content', {}, '/'), nil) + item = Nanoc::Int::Item.new('content', {}, '/') + @item = Nanoc::ItemWithRepsView.new(item, view_context_for(item)) result = ::ERB.new(content).result(binding) expected = %w( head before basic after foot ) actual = result.scan(/[a-z]+/) assert_equal expected, actual - end - - def test_different_sites - require 'erb' - - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" - end - - @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil) - @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('content', {}, '/'), nil) - content = '<% content_for :a do %>Content One<% end %>' - ::ERB.new(content).result(binding) - - assert_equal 'Content One', content_for(@item, :a) - assert_equal nil, content_for(@item, :b) - - @site = Nanoc::SiteView.new(Nanoc::Int::SiteLoader.new.new_empty, nil) - @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('content', {}, '/'), nil) - content = '<% content_for :b do %>Content Two<% end %>' - ::ERB.new(content).result(binding) - - assert_equal nil, content_for(@item, :a) - assert_equal 'Content Two', content_for(@item, :b) - end - - def test_content_for_with_existing_symbol - with_site do |_site| - # Prepare - File.open('lib/helpers.rb', 'w') do |io| - io.write 'include Nanoc::Helpers::Capturing' - end - File.open('content/includer.erb', 'w') do |io| - io.write '[<%= content_for(@items["/includee/"], :blah) %>]' - end - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" - end - - File.open('content/includee.erb', 'w') do |io| - io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah do %>Second content<% end %>}' - end - - # Using the same symbols twice now raises an error, to be changed to concatenating in a future version - assert_raises do - Nanoc::CLI.run(%w(compile)) - end - end - end - - def test_content_for_with_existing_symbol_with_error_option - with_site do |_site| - # Prepare - File.open('lib/helpers.rb', 'w') do |io| - io.write 'include Nanoc::Helpers::Capturing' - end - File.open('content/includer.erb', 'w') do |io| - io.write '[<%= content_for(@items["/includee/"], :blah) %>]' - end - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" - end - - File.open('content/includee.erb', 'w') do |io| - io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah, existing: :error do %>Second content<% end %>}' - end - - assert_raises do - Nanoc::CLI.run(%w(compile)) - end - end - end - - def test_content_for_with_existing_symbol_with_overwrite_option - with_site do |_site| - # Prepare - File.open('lib/helpers.rb', 'w') do |io| - io.write 'include Nanoc::Helpers::Capturing' - end - File.open('content/includer.erb', 'w') do |io| - io.write '[<%= content_for(@items["/includee/"], :blah) %>]' - end - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" - end - - File.open('content/includee.erb', 'w') do |io| - io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah, existing: :overwrite do %>Second content<% end %>}' - end - - Nanoc::CLI.run(%w(compile)) - assert_equal '[Second content]', File.read('output/includer/index.html') - end - end - - def test_content_for_with_existing_symbol_with_append_option - with_site do |_site| - # Prepare - File.open('lib/helpers.rb', 'w') do |io| - io.write 'include Nanoc::Helpers::Capturing' - end - File.open('content/includer.erb', 'w') do |io| - io.write '[<%= content_for(@items["/includee/"], :blah) %>]' - end - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" - end - - File.open('content/includee.erb', 'w') do |io| - io.write '{<% content_for :blah do %>First content<% end %><% content_for :blah, existing: :append do %>Second content<% end %>}' - end - - Nanoc::CLI.run(%w(compile)) - assert_equal '[First contentSecond content]', File.read('output/includer/index.html') - end - end - - def test_content_for_with_existing_symbol_with_unrecognised_option - with_site do |_site| - # Prepare - File.open('lib/helpers.rb', 'w') do |io| - io.write 'include Nanoc::Helpers::Capturing' - end - File.open('content/includer.erb', 'w') do |io| - io.write '[<%= content_for(@items["/includee/"], :blah) %>]' - end - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" - end - - File.open('content/includee.erb', 'w') do |io| - io.write '{<% content_for :blah, existing: :donkey do %>First content<% end %>}' - end - - assert_raises(ArgumentError) do - Nanoc::CLI.run(%w(compile)) - end - end - end - - def test_dependencies - with_site do |_site| - # Prepare - File.open('lib/helpers.rb', 'w') do |io| - io.write 'include Nanoc::Helpers::Capturing' - end - File.open('content/includer.erb', 'w') do |io| - io.write '[<%= content_for(@items.find { |i| i.identifier == \'/includee/\' }, :blah) %>]' - end - File.open('Rules', 'w') do |io| - io.write "compile '*' do ; filter :erb ; end\n" - io.write "route '*' do ; item.identifier + 'index.html' ; end\n" - end - - # Compile once - File.open('content/includee.erb', 'w') do |io| - io.write '{<% content_for :blah do %>Old content<% end %>}' - end - Nanoc::CLI.run(%w(compile)) - assert_equal '[Old content]', File.read('output/includer/index.html') - - # Compile again - File.open('content/includee.erb', 'w') do |io| - io.write '{<% content_for :blah do %>New content<% end %>}' - end - Nanoc::CLI.run(%w(compile)) - assert_equal '[New content]', File.read('output/includer/index.html') - end end def test_dependency_without_item_variable with_site do |_site| # Prepare