1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00

move content-for tests to rspec

This commit is contained in:
Konstantin Haase 2011-03-28 10:11:57 +02:00
parent 19c68f8ad4
commit 7fa95253e3
14 changed files with 87 additions and 156 deletions

View file

@ -0,0 +1 @@
<% content_for :bar do %>bar<% end %>

View file

@ -0,0 +1,2 @@
- content_for :bar do
bar

View file

@ -0,0 +1 @@
<% yield_content :foo %>

View file

@ -0,0 +1 @@
= yield_content :foo

View file

@ -0,0 +1,4 @@
<% 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 %>

View file

@ -0,0 +1,8 @@
- content_for :foo do
foo
- content_for :foo do
bar
- content_for :baz do
WON'T RENDER ME
- content_for :foo do
baz

View file

@ -0,0 +1 @@
<% yield_content :foo, 1, 2 %>

View file

@ -0,0 +1 @@
= yield_content :foo, 1, 2

View file

@ -0,0 +1 @@
<% content_for :foo do %>foo<% end %>

View file

@ -0,0 +1,2 @@
- content_for :foo do
foo

View file

@ -0,0 +1 @@
<% content_for :foo do |a, b| %><i><%= a %></i> <%= b %><% end %>

View file

@ -0,0 +1,3 @@
- content_for :foo do |a, b|
%i= a
=b

View file

@ -0,0 +1,61 @@
require 'backports'
require_relative 'spec_helper'
describe Sinatra::ContentFor do
# TODO: erubis slim liquid radius markaby builder nokogiri
engines = %w[erb haml]
engines.each do |inner|
engines.each do |outer|
describe "#{inner.capitalize} templates with #{outer.capitalize} layouts" do
def body
super.gsub(/\s/, '')
end
before do
pending "different layout engines not supported yet" unless inner == outer
end
before :all do
begin
require inner
require outer
rescue LoadError => e
pending "Skipping: " << e.message
end
end
before do
mock_app do
helpers Sinatra::ContentFor
set inner, :layout_engine => outer
set :views, File.expand_path("../content_for", __FILE__)
get('/:view') { send(inner, params[:view].to_sym) }
get('/:layout/:view') do
send inner, params[:view].to_sym, :layout => params[:layout].to_sym
end
end
end
it 'renders blocks declared with the same key you use when rendering' do
get('/same_key').should be_ok
body.should == "foo"
end
it 'does not render a block with a different key' do
get('/different_key').should be_ok
body.should == ""
end
it 'renders multiple blocks with the same key'do
get('/multiple_blocks').should be_ok
body.should == "foobarbaz"
end
it 'passes values to the blocks' do
get('/passes_values/takes_values').should be_ok
body.should == "<i>1</i>2"
end
end
end
end
end

View file

@ -1,156 +0,0 @@
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| %><i><%= a %></i> <%= b %><% end %>' }
}
get '/'
assert ok?
assert_equal '<i>1</i> 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 "<i>1</i>\n2\n", body
end
end
end