require File.expand_path("#{File.dirname(__FILE__)}/rails_spec_helper") describe Erector::Rails do before do @controller = ActionController::Base.new @controller.request = ActionController::TestRequest.new @view = ActionView::Base.new @view.controller = @controller def @view.protect_against_forgery? false end end def test_render(&block) Erector::Rails.render(Erector.inline(&block), @controller.view_context) end describe "#link_to" do it "renders a link" do test_render do link_to 'Test', '/foo' end.should == %{Test} end it "supports blocks" do test_render do link_to '/foo' do strong "Test" end end.should == %{Test} end it "escapes input" do test_render do link_to 'This&that', '/foo?this=1&that=1' end.should == %{This&that} end it "isn't double rendered when 'text link_to' is used by mistake" do test_render do text link_to('Test', '/foo') end.should == %{Test} end end describe "a regular helper" do it "can be called directly" do test_render do text truncate("foo") end.should == "foo" end it "can be called via capture" do test_render do text capture { text truncate("foo") } end.should == "foo" end it "can be called via sub-widget" do test_render do widget Erector.inline { text truncate("foo") } end.should == "foo" end end describe "a named route helper" do before do Rails.application.routes.draw do root :to => "rails_helpers_spec#index" end @app_controller = ApplicationController.new @app_controller.request = ActionController::TestRequest.new def app_render(&block) Erector::Rails.render(Erector.inline(&block), @app_controller.view_context) end end it "can be called directly" do app_render do text root_path end.should == "/" end it "can be called via parent" do app_render do text parent.root_path end.should == "/" end it "respects default_url_options defined by the controller" do def @app_controller.default_url_options(options = nil) { :host => "www.override.com" } end app_render do text root_url end.should == "http://www.override.com/" end end describe "#auto_discovery_link_tag" do it "renders tag" do test_render do auto_discovery_link_tag(:rss, "rails") end.should == %{} end end describe "#javascript_include_tag" do it "renders tag" do test_render do javascript_include_tag("rails") end.should =~ %r{} end end describe "#stylesheet_link_tag" do it "renders tag" do test_render do stylesheet_link_tag("rails") end.should == %{} end end describe "#favicon_link_tag" do it "renders tag" do test_render do favicon_link_tag("rails.ico") end.should == %{} end end describe "#image_tag" do it "renders tag" do test_render do image_tag("/foo") end.should == %{Foo} end end describe "#javascript_tag" do it "renders tag" do test_render do javascript_tag "alert('All is good')" end.should == %{} end it "supports block syntax" do test_render do javascript_tag do text! "alert('All is good')" end end.should == %{} end end if defined?(ActionView::Helpers::ScriptaculousHelper) [:sortable_element, :draggable_element, :drop_receiving_element].each do |helper| describe "##{helper}" do it "renders helper js" do test_render do send(helper, "rails", :url => "/foo") end.should =~ %r{}m end end end end describe "#render" do it "renders text" do test_render do render :text => "Test" end.should == "Test" end end describe "#form_tag" do it "works without a block" do test_render do form_tag("/posts") end.should == %{
} end it "can be mixed with erector and rails helpers" do test_render do form_tag("/posts") do div { submit_tag 'Save' } end end.should == %{
} end end describe "#form_for" do it "produces expected output" do test_render do form_for(:something, :url => "/test") do |form| form.label :my_input, "My input" form.text_field :my_input end end.should == %{
} end it "doesn't double render if 'text form.label' is used by mistake" do test_render do form_for(:something, :url => "/test") do |form| text form.label(:my_input, "My input") end end.should == %{
} end it "can be called from a nested widget" do test_render do widget Erector.inline { form_for(:something, :url => "/test") { |form| form.text_field :my_input } } end.should =~ /^
"/test", :builder => builder) do |form| text form.foo end end.should =~ /foo/ end end end