ENV['RACK_ENV'] = 'test' begin require 'rack' rescue LoadError require 'rubygems' require 'rack' end require 'contest' require 'sinatra/test' require 'haml' begin require 'redgreen' rescue LoadError end require File.dirname(__FILE__) + '/../lib/sinatra/content_for' Sinatra::Base.set :environment, :test module Sinatra class Base set :environment, :test helpers ContentFor end end class Test::Unit::TestCase include Sinatra::Test class << self alias_method :it, :test end def mock_app(base=Sinatra::Base, &block) @app = Sinatra.new(base, &block) end end class ContentForTest < Test::Unit::TestCase context 'using erb' do def erb_app(view) mock_app { layout { '<% yield_content :foo %>' } get('/') { erb view } } end it 'renders blocks declared with the same key you use when rendering' do erb_app '<% content_for :foo do %>foo<% end %>' get '/' assert ok? assert_equal 'foo', body end it 'does not render a block with a different key' do erb_app '<% content_for :bar do %>bar<% end %>' get '/' assert ok? assert_equal '', body end it 'renders multiple blocks with the same key' do erb_app <<-erb_snippet <% content_for :foo do %>foo<% end %> <% content_for :foo do %>bar<% end %> <% content_for :baz do %>WON'T RENDER ME<% end %> <% content_for :foo do %>baz<% end %> erb_snippet get '/' assert ok? assert_equal 'foobarbaz', body end it 'passes values to the blocks' do mock_app { layout { '<% yield_content :foo, 1, 2 %>' } get('/') { erb '<% content_for :foo do |a, b| %><%= a %> <%= b %><% end %>' } } get '/' assert ok? assert_equal '1 2', body end end context 'with haml' do def haml_app(view) mock_app { layout { '= yield_content :foo' } get('/') { haml view } } end it 'renders blocks declared with the same key you use when rendering' do haml_app <<-haml_end - content_for :foo do foo haml_end get '/' assert ok? assert_equal "foo\n", body end it 'does not render a block with a different key' do haml_app <<-haml_end - content_for :bar do bar haml_end get '/' assert ok? assert_equal "\n", body end it 'renders multiple blocks with the same key' do haml_app <<-haml_end - content_for :foo do foo - content_for :foo do bar - content_for :baz do WON'T RENDER ME - content_for :foo do baz haml_end get '/' assert ok? assert_equal "foo\nbar\nbaz\n", body end it 'passes values to the blocks' do mock_app { layout { '= yield_content :foo, 1, 2' } get('/') { haml <<-haml_end - content_for :foo do |a, b| %i= a =b haml_end } } get '/' assert ok? assert_equal "1\n2\n", body end end end