diff options
65 files changed, 717 insertions, 2536 deletions
diff --git a/vendor/plugins/rspec_on_rails/README b/vendor/plugins/rspec_on_rails/README index 5ba4ec2f3..9008b8a57 100644 --- a/vendor/plugins/rspec_on_rails/README +++ b/vendor/plugins/rspec_on_rails/README @@ -1 +1,3 @@ -See Spec::Rails
\ No newline at end of file +See the rdoc for Spec::Rails for usage documentation. + +See ~/rspec/README for instructions on running rspec_on_rails' examples.
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb b/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb index 6e983b72a..d5512e386 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb @@ -16,9 +16,13 @@ class RspecGenerator < Rails::Generator::Base m.directory 'spec' m.template 'spec_helper.rb', 'spec/spec_helper.rb' m.file 'spec.opts', 'spec/spec.opts' - m.file 'previous_failures.txt', 'previous_failures.txt' + m.file 'rcov.opts', 'spec/rcov.opts' m.file 'script/spec_server', 'script/spec_server', script_options m.file 'script/spec', 'script/spec', script_options + + m.directory 'stories' + m.file 'all_stories.rb', 'stories/all.rb' + m.file 'stories_helper.rb', 'stories/helper.rb' end end diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec b/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec index d318f1ae3..d81556575 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec +++ b/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec @@ -1,4 +1,4 @@ #!/usr/bin/env ruby $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../vendor/plugins/rspec/lib")) require 'spec' -::Spec::Runner::CommandLine.run(ARGV, STDERR, STDOUT, true, true) +exit ::Spec::Runner::CommandLine.run(::Spec::Runner::OptionParser.parse(ARGV, STDERR, STDOUT)) diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server b/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server index cac91e2b8..3787a39d9 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server +++ b/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server @@ -6,27 +6,44 @@ require 'drb/drb' require 'rbconfig' require 'spec' require 'optparse' -specmate = ENV['HOME'] + "/Library/Application\ Support/TextMate/Bundles/RSpec.tmbundle/Support/lib" -if File.directory?(specmate) - $LOAD_PATH.unshift(specmate) - require 'text_mate_formatter' -end # This is based on Florian Weber's TDDMate - module Spec module Runner class RailsSpecServer - def run(args, stderr, stdout) - $stdout = stdout - $stderr = stderr + def run(argv, stderr, stdout) + $stdout = stdout + $stderr = stderr + + base = ActiveRecord::Base + def base.clear_reloadable_connections! + active_connections.each do |name, conn| + if conn.requires_reloading? + conn.disconnect! + active_connections.delete(name) + end + end + end - ::Dispatcher.reset_application! + if ActionController.const_defined?(:Dispatcher) + dispatcher = ::ActionController::Dispatcher.new($stdout) + dispatcher.cleanup_application(true) + elsif ::Dispatcher.respond_to?(:reset_application!) + ::Dispatcher.reset_application! + else + raise "Application reloading failed" + end ::Dependencies.mechanism = :load require_dependency('application.rb') unless Object.const_defined?(:ApplicationController) load File.dirname(__FILE__) + '/../spec/spec_helper.rb' - - ::Spec::Runner::CommandLine.run(args, stderr, stdout, false, true) + + ::Spec::Runner::CommandLine.run( + ::Spec::Runner::OptionParser.parse( + argv, + $stderr, + $stdout + ) + ) end end end @@ -43,7 +60,7 @@ def restart_test_server ruby = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT'] command_line = [ruby, $0, ARGV].flatten.join(' ') exec(command_line) -end +end def daemonize(pid_file = nil) return yield if $DEBUG @@ -83,4 +100,3 @@ if options[:daemon] else exec_server.call end - diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts b/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts index d8c8db5d4..2144705ed 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts +++ b/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts @@ -4,3 +4,4 @@ progress --loadby mtime --reverse +--backtrace
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb b/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb index e5d4f2259..210d9d196 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb @@ -2,22 +2,38 @@ # from the project root directory. ENV["RAILS_ENV"] = "test" require File.expand_path(File.dirname(__FILE__) + "/../config/environment") +require 'spec' require 'spec/rails' Spec::Runner.configure do |config| + # If you're not using ActiveRecord you should remove these + # lines, delete config/database.yml and disable :active_record + # in your config/boot.rb config.use_transactional_fixtures = true config.use_instantiated_fixtures = false - config.fixture_path = RAILS_ROOT + '/spec/fixtures' + config.fixture_path = RAILS_ROOT + '/spec/fixtures/' - # You can declare fixtures for each behaviour like this: + # == Fixtures + # + # You can declare fixtures for each example_group like this: # describe "...." do # fixtures :table_a, :table_b # # Alternatively, if you prefer to declare them only once, you can - # do so here, like so ... + # do so right here. Just uncomment the next line and replace the fixture + # names with your fixtures. # - # config.global_fixtures = :table_a, :table_b + # config.global_fixtures = :table_a, :table_b # # If you declare global fixtures, be aware that they will be declared # for all of your examples, even those that don't use them. + # + # == Mock Framework + # + # RSpec uses it's own mocking framework by default. If you prefer to + # use mocha, flexmock or RR, uncomment the appropriate line: + # + # config.mock_with :mocha + # config.mock_with :flexmock + # config.mock_with :rr end diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb b/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb index a2a1552a7..d21c2156a 100755 --- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb @@ -1,6 +1,8 @@ require 'rails_generator/generators/components/controller/controller_generator' +require File.join(File.dirname(__FILE__), *%w[.. helpers rails_identifier]) class RspecControllerGenerator < ControllerGenerator + def manifest record do |m| # Check for class naming collisions. @@ -14,11 +16,10 @@ class RspecControllerGenerator < ControllerGenerator m.directory File.join('spec/helpers', class_path) m.directory File.join('spec/views', class_path, file_name) - if ActionView::Base.const_defined?('DEFAULT_TEMPLATE_HANDLER_PREFERENCE') && - ActionView::Base::DEFAULT_TEMPLATE_HANDLER_PREFERENCE.include?(:erb) then - @default_file_extension = "html.erb" - else + if RailsIdentifier.using_legacy_templates? @default_file_extension = "rhtml" + else + @default_file_extension = "html.erb" end # Controller spec, class, and helper. diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb index 9b6d0a652..e79549e2c 100755 --- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb @@ -14,9 +14,11 @@ describe <%= class_name %>Controller do <% unless actions.empty? -%> <% for action in actions -%> - it "GET '<%= action %>' should be successful" do - get '<%= action %>' - response.should be_success + describe "GET '<%= action %>'" do + it "should be successful" do + get '<%= action %>' + response.should be_success + end end <% end -%> <% end -%> diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb index 45af093f4..4d9e7dcf1 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb @@ -1,7 +1,7 @@ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper' describe "/<%= class_name.underscore %>/<%= action %>" do - before do + before(:each) do render '<%= class_name.underscore %>/<%= action %>' end diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb index b60c21534..19d09cb13 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb @@ -1,3 +1,5 @@ +require File.join(File.dirname(__FILE__), *%w[.. helpers rails_identifier]) + class RspecScaffoldGenerator < Rails::Generator::NamedBase default_options :skip_migration => false @@ -28,14 +30,17 @@ class RspecScaffoldGenerator < Rails::Generator::NamedBase @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}" end - if ActionView::Base.const_defined?('DEFAULT_TEMPLATE_HANDLER_PREFERENCE') && - ActionView::Base::DEFAULT_TEMPLATE_HANDLER_PREFERENCE.include?(:erb) then + if RailsIdentifier.using_legacy_templates? + @resource_generator = "scaffold_resource" + @default_file_extension = "rhtml" + else @resource_generator = "scaffold" @default_file_extension = "html.erb" + end + + if ActionController::Base.respond_to?(:resource_action_separator) @resource_edit_path = "/edit" else - @resource_generator = "scaffold_resource" - @default_file_extension = "rhtml" @resource_edit_path = ";edit" end end @@ -59,6 +64,9 @@ class RspecScaffoldGenerator < Rails::Generator::NamedBase m.directory File.join('spec/views', controller_class_path, controller_file_name) # Controller spec, class, and helper. + m.template 'rspec_scaffold:routing_spec.rb', + File.join('spec/controllers', controller_class_path, "#{controller_file_name}_routing_spec.rb") + m.template 'rspec_scaffold:controller_spec.rb', File.join('spec/controllers', controller_class_path, "#{controller_file_name}_controller_spec.rb") diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb index d25b91c09..748190743 100755 --- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb @@ -1,323 +1,313 @@ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper' -describe <%= controller_class_name %>Controller, "#route_for" do +describe <%= controller_class_name %>Controller do + describe "handling GET /<%= table_name %>" do - it "should map { :controller => '<%= table_name %>', :action => 'index' } to /<%= table_name %>" do - route_for(:controller => "<%= table_name %>", :action => "index").should == "/<%= table_name %>" - end - - it "should map { :controller => '<%= table_name %>', :action => 'new' } to /<%= table_name %>/new" do - route_for(:controller => "<%= table_name %>", :action => "new").should == "/<%= table_name %>/new" - end - - it "should map { :controller => '<%= table_name %>', :action => 'show', :id => 1 } to /<%= table_name %>/1" do - route_for(:controller => "<%= table_name %>", :action => "show", :id => 1).should == "/<%= table_name %>/1" - end - - it "should map { :controller => '<%= table_name %>', :action => 'edit', :id => 1 } to /<%= table_name %>/1<%= resource_edit_path %>" do - route_for(:controller => "<%= table_name %>", :action => "edit", :id => 1).should == "/<%= table_name %>/1<%= resource_edit_path %>" - end - - it "should map { :controller => '<%= table_name %>', :action => 'update', :id => 1} to /<%= table_name %>/1" do - route_for(:controller => "<%= table_name %>", :action => "update", :id => 1).should == "/<%= table_name %>/1" - end - - it "should map { :controller => '<%= table_name %>', :action => 'destroy', :id => 1} to /<%= table_name %>/1" do - route_for(:controller => "<%= table_name %>", :action => "destroy", :id => 1).should == "/<%= table_name %>/1" - end - -end - -describe <%= controller_class_name %>Controller, "handling GET /<%= table_name %>" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>) - <%= class_name %>.stub!(:find).and_return([@<%= file_name %>]) - end - - def do_get - get :index - end - - it "should be successful" do - do_get - response.should be_success - end - - it "should render index template" do - do_get - response.should render_template('index') - end - - it "should find all <%= table_name %>" do - <%= class_name %>.should_receive(:find).with(:all).and_return([@<%= file_name %>]) - do_get - end + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>) + <%= class_name %>.stub!(:find).and_return([@<%= file_name %>]) + end + + def do_get + get :index + end + + it "should be successful" do + do_get + response.should be_success + end + + it "should render index template" do + do_get + response.should render_template('index') + end + + it "should find all <%= table_name %>" do + <%= class_name %>.should_receive(:find).with(:all).and_return([@<%= file_name %>]) + do_get + end - it "should assign the found <%= table_name %> for the view" do - do_get - assigns[:<%= table_name %>].should == [@<%= file_name %>] - end -end + it "should assign the found <%= table_name %> for the view" do + do_get + assigns[:<%= table_name %>].should == [@<%= file_name %>] + end + end + + describe "handling GET /<%= table_name %>.xml" do -describe <%= controller_class_name %>Controller, "handling GET /<%= table_name %>.xml" do + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>, :to_xml => "XML") + <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) + end + + def do_get + @request.env["HTTP_ACCEPT"] = "application/xml" + get :index + end + + it "should be successful" do + do_get + response.should be_success + end + + it "should find all <%= table_name %>" do + <%= class_name %>.should_receive(:find).with(:all).and_return([@<%= file_name %>]) + do_get + end + + it "should render the found <%= table_name %> as xml" do + @<%= file_name %>.should_receive(:to_xml).and_return("XML") + do_get + response.body.should == "XML" + end + end - before do - @<%= file_name %> = mock_model(<%= class_name %>, :to_xml => "XML") - <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) - end - - def do_get - @request.env["HTTP_ACCEPT"] = "application/xml" - get :index - end - - it "should be successful" do - do_get - response.should be_success - end + describe "handling GET /<%= table_name %>/1" do + + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>) + <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) + end + + def do_get + get :show, :id => "1" + end + + it "should be successful" do + do_get + response.should be_success + end + + it "should render show template" do + do_get + response.should render_template('show') + end + + it "should find the <%= file_name %> requested" do + <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) + do_get + end + + it "should assign the found <%= file_name %> for the view" do + do_get + assigns[:<%= file_name %>].should equal(@<%= file_name %>) + end + end - it "should find all <%= table_name %>" do - <%= class_name %>.should_receive(:find).with(:all).and_return([@<%= file_name %>]) - do_get - end - - it "should render the found <%= table_name %> as xml" do - @<%= file_name %>.should_receive(:to_xml).and_return("XML") - do_get - response.body.should == "XML" - end -end - -describe <%= controller_class_name %>Controller, "handling GET /<%= table_name %>/1" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>) - <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) - end - - def do_get - get :show, :id => "1" - end - - it "should be successful" do - do_get - response.should be_success - end - - it "should render show template" do - do_get - response.should render_template('show') - end - - it "should find the <%= file_name %> requested" do - <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) - do_get - end - - it "should assign the found <%= file_name %> for the view" do - do_get - assigns[:<%= file_name %>].should equal(@<%= file_name %>) - end -end - -describe <%= controller_class_name %>Controller, "handling GET /<%= table_name %>/1.xml" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>, :to_xml => "XML") - <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) - end - - def do_get - @request.env["HTTP_ACCEPT"] = "application/xml" - get :show, :id => "1" - end - - it "should be successful" do - do_get - response.should be_success - end - - it "should find the <%= file_name %> requested" do - <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) - do_get - end - - it "should render the found <%= file_name %> as xml" do - @<%= file_name %>.should_receive(:to_xml).and_return("XML") - do_get - response.body.should == "XML" - end -end - -describe <%= controller_class_name %>Controller, "handling GET /<%= table_name %>/new" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>) - <%= class_name %>.stub!(:new).and_return(@<%= file_name %>) - end - - def do_get - get :new - end - - it "should be successful" do - do_get - response.should be_success - end - - it "should render new template" do - do_get - response.should render_template('new') - end - - it "should create an new <%= file_name %>" do - <%= class_name %>.should_receive(:new).and_return(@<%= file_name %>) - do_get - end - - it "should not save the new <%= file_name %>" do - @<%= file_name %>.should_not_receive(:save) - do_get - end - - it "should assign the new <%= file_name %> for the view" do - do_get - assigns[:<%= file_name %>].should equal(@<%= file_name %>) - end -end - -describe <%= controller_class_name %>Controller, "handling GET /<%= table_name %>/1/edit" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>) - <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) - end - - def do_get - get :edit, :id => "1" - end - - it "should be successful" do - do_get - response.should be_success - end - - it "should render edit template" do - do_get - response.should render_template('edit') - end - - it "should find the <%= file_name %> requested" do - <%= class_name %>.should_receive(:find).and_return(@<%= file_name %>) - do_get - end - - it "should assign the found <%= class_name %> for the view" do - do_get - assigns[:<%= file_name %>].should equal(@<%= file_name %>) - end -end - -describe <%= controller_class_name %>Controller, "handling POST /<%= table_name %>" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1") - <%= class_name %>.stub!(:new).and_return(@<%= file_name %>) - end - - def post_with_successful_save - @<%= file_name %>.should_receive(:save).and_return(true) - post :create, :<%= file_name %> => {} - end - - def post_with_failed_save - @<%= file_name %>.should_receive(:save).and_return(false) - post :create, :<%= file_name %> => {} - end - - it "should create a new <%= file_name %>" do - <%= class_name %>.should_receive(:new).with({}).and_return(@<%= file_name %>) - post_with_successful_save - end - - it "should redirect to the new <%= file_name %> on successful save" do - post_with_successful_save - response.should redirect_to(<%= table_name.singularize %>_url("1")) - end - - it "should re-render 'new' on failed save" do - post_with_failed_save - response.should render_template('new') - end -end - -describe <%= controller_class_name %>Controller, "handling PUT /<%= table_name %>/1" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1") - <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) - end - - def put_with_successful_update - @<%= file_name %>.should_receive(:update_attributes).and_return(true) - put :update, :id => "1" - end - - def put_with_failed_update - @<%= file_name %>.should_receive(:update_attributes).and_return(false) - put :update, :id => "1" - end - - it "should find the <%= file_name %> requested" do - <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) - put_with_successful_update - end - - it "should update the found <%= file_name %>" do - put_with_successful_update - assigns(:<%= file_name %>).should equal(@<%= file_name %>) - end - - it "should assign the found <%= file_name %> for the view" do - put_with_successful_update - assigns(:<%= file_name %>).should equal(@<%= file_name %>) - end - - it "should redirect to the <%= file_name %> on successful update" do - put_with_successful_update - response.should redirect_to(<%= table_name.singularize %>_url("1")) - end - - it "should re-render 'edit' on failed update" do - put_with_failed_update - response.should render_template('edit') - end -end - -describe <%= controller_class_name %>Controller, "handling DELETE /<%= table_name %>/1" do - - before do - @<%= file_name %> = mock_model(<%= class_name %>, :destroy => true) - <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) - end - - def do_delete - delete :destroy, :id => "1" - end - - it "should find the <%= file_name %> requested" do - <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) - do_delete - end - - it "should call destroy on the found <%= file_name %>" do - @<%= file_name %>.should_receive(:destroy) - do_delete - end - - it "should redirect to the <%= table_name %> list" do - do_delete - response.should redirect_to(<%= table_name %>_url) - end -end + describe "handling GET /<%= table_name %>/1.xml" do + + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>, :to_xml => "XML") + <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) + end + + def do_get + @request.env["HTTP_ACCEPT"] = "application/xml" + get :show, :id => "1" + end + + it "should be successful" do + do_get + response.should be_success + end + + it "should find the <%= file_name %> requested" do + <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) + do_get + end + + it "should render the found <%= file_name %> as xml" do + @<%= file_name %>.should_receive(:to_xml).and_return("XML") + do_get + response.body.should == "XML" + end + end + + describe "handling GET /<%= table_name %>/new" do + + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>) + <%= class_name %>.stub!(:new).and_return(@<%= file_name %>) + end + + def do_get + get :new + end + + it "should be successful" do + do_get + response.should be_success + end + + it "should render new template" do + do_get + response.should render_template('new') + end + + it "should create an new <%= file_name %>" do + <%= class_name %>.should_receive(:new).and_return(@<%= file_name %>) + do_get + end + + it "should not save the new <%= file_name %>" do + @<%= file_name %>.should_not_receive(:save) + do_get + end + + it "should assign the new <%= file_name %> for the view" do + do_get + assigns[:<%= file_name %>].should equal(@<%= file_name %>) + end + end + + describe "handling GET /<%= table_name %>/1/edit" do + + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>) + <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) + end + + def do_get + get :edit, :id => "1" + end + + it "should be successful" do + do_get + response.should be_success + end + + it "should render edit template" do + do_get + response.should render_template('edit') + end + + it "should find the <%= file_name %> requested" do + <%= class_name %>.should_receive(:find).and_return(@<%= file_name %>) + do_get + end + + it "should assign the found <%= class_name %> for the view" do + do_get + assigns[:<%= file_name %>].should equal(@<%= file_name %>) + end + end + + describe "handling POST /<%= table_name %>" do + + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1") + <%= class_name %>.stub!(:new).and_return(@<%= file_name %>) + end + + describe "with successful save" do + + def do_post + @<%= file_name %>.should_receive(:save).and_return(true) + post :create, :<%= file_name %> => {} + end + + it "should create a new <%= file_name %>" do + <%= class_name %>.should_receive(:new).with({}).and_return(@<%= file_name %>) + do_post + end + + it "should redirect to the new <%= file_name %>" do + do_post + response.should redirect_to(<%= table_name.singularize %>_url("1")) + end + + end + + describe "with failed save" do + + def do_post + @<%= file_name %>.should_receive(:save).and_return(false) + post :create, :<%= file_name %> => {} + end + + it "should re-render 'new'" do + do_post + response.should render_template('new') + end + + end + end + + describe "handling PUT /<%= table_name %>/1" do + + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1") + <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) + end + + describe "with successful update" do + + def do_put + @<%= file_name %>.should_receive(:update_attributes).and_return(true) + put :update, :id => "1" + end + + it "should find the <%= file_name %> requested" do + <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) + do_put + end + + it "should update the found <%= file_name %>" do + do_put + assigns(:<%= file_name %>).should equal(@<%= file_name %>) + end + + it "should assign the found <%= file_name %> for the view" do + do_put + assigns(:<%= file_name %>).should equal(@<%= file_name %>) + end + + it "should redirect to the <%= file_name %>" do + do_put + response.should redirect_to(<%= table_name.singularize %>_url("1")) + end + + end + + describe "with failed update" do + + def do_put + @<%= file_name %>.should_receive(:update_attributes).and_return(false) + put :update, :id => "1" + end + + it "should re-render 'edit'" do + do_put + response.should render_template('edit') + end + + end + end + + describe "handling DELETE /<%= table_name %>/1" do + + before(:each) do + @<%= file_name %> = mock_model(<%= class_name %>, :destroy => true) + <%= class_name %>.stub!(:find).and_return(@<%= file_name %>) + end + + def do_delete + delete :destroy, :id => "1" + end + + it "should find the <%= file_name %> requested" do + <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>) + do_delete + end + + it "should call destroy on the found <%= file_name %>" do + @<%= file_name %>.should_receive(:destroy) + do_delete + end + + it "should redirect to the <%= table_name %> list" do + do_delete + response.should redirect_to(<%= table_name %>_url) + end + end +end
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb index 0e0aea776..85cf795dc 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb @@ -1,4 +1,11 @@ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper' -describe <%= controller_class_name %>Helper do # Helper methods can be called directly in the examples (it blocks) +describe <%= controller_class_name %>Helper do + + #Delete this example and add some real ones or delete this file + it "should include the <%= class_name %>Helper" do + included_modules = self.metaclass.send :included_modules + included_modules.should include(<%= controller_class_name %>Helper) + end + end diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb index a55bc36a1..9d61c6f4c 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb @@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_ describe "/<%= table_name %>/index.<%= default_file_extension %>" do include <%= controller_class_name %>Helper - before do + before(:each) do <% [98,99].each do |id| -%> <%= file_name %>_<%= id %> = mock_model(<%= class_name %>) <% for attribute in attributes -%> diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb index 8a335f5f3..2ae085ad7 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb @@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_ describe "/<%= table_name %>/new.<%= default_file_extension %>" do include <%= controller_class_name %>Helper - before do + before(:each) do @<%= file_name %> = mock_model(<%= class_name %>) @<%= file_name %>.stub!(:new_record?).and_return(true) <% for attribute in attributes -%> diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb index db83e901e..53de98323 100644 --- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb +++ b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb @@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_ describe "/<%= table_name %>/show.<%= default_file_extension %>" do include <%= controller_class_name %>Helper - before do + before(:each) do @<%= file_name %> = mock_model(<%= class_name %>) <% for attribute in attributes -%> @<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>) diff --git a/vendor/plugins/rspec_on_rails/init.rb b/vendor/plugins/rspec_on_rails/init.rb index 54e574905..6262f0368 100644 --- a/vendor/plugins/rspec_on_rails/init.rb +++ b/vendor/plugins/rspec_on_rails/init.rb @@ -6,4 +6,4 @@ # Running 'ruby script/generate rspec' will # generate spec/spec_helper.rb, which includes the necessary # require statements and configuration. This file should -# be required by all of your spec files. +# be required by all of your spec files.
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb b/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb index 994b9f68e..1fe20fbc9 100644 --- a/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb +++ b/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb @@ -25,55 +25,55 @@ $:.push(*Dir["vendor/rails/*/lib"]) require 'active_support' require 'autotest/rspec' -class Autotest::RailsRspec < Autotest::Rspec - - def initialize # :nodoc: - super - @exceptions = %r%^\./(?:coverage|db|doc|log|public|script|vendor\/rails|previous_failures.txt)% - @test_mappings = { - %r%^(test|spec)/fixtures/(.*).yml$% => proc { |_, m| - ["spec/models/#{m[2].singularize}_spec.rb"] + files_matching(%r%^spec\/views\/#{m[2]}/.*_spec\.rb$%) - }, - %r%^spec/(models|controllers|views|helpers|lib)/.*rb$% => proc { |filename, _| - filename - }, - %r%^app/models/(.*)\.rb$% => proc { |_, m| - ["spec/models/#{m[1]}_spec.rb"] - }, - %r%^app/views/(.*)$% => proc { |_, m| - files_matching %r%^spec/views/#{m[1]}_spec.rb$% - }, - %r%^app/controllers/(.*)\.rb$% => proc { |_, m| - ["spec/controllers/#{m[1]}_spec.rb"] - }, - %r%^app/helpers/(.*)_helper\.rb$% => proc { |_, m| - if m[1] == "application" then - files_matching(%r%^spec/(views|helpers)/.*_spec\.rb$%) - else - ["spec/helpers/#{m[1]}_helper_spec.rb"] + files_matching(%r%^spec\/views\/#{m[1]}/.*_spec\.rb$%) - end - }, - %r%^app/helpers/application_helper\.rb$% => proc { - files_matching %r%^spec/(views|helpers)/.*_spec\.rb$% - }, - %r%^app/controllers/application\.rb$% => proc { |_, m| - files_matching %r%^spec/controllers/.*_spec\.rb$% - }, - %r%^config/routes\.rb$% => proc { - files_matching %r%^spec/(controllers|views|helpers)/.*_spec\.rb$% - }, - %r%^config/database\.yml$% => proc { |_, m| - files_matching %r%^spec/models/.*_spec\.rb$% - }, - %r%^(spec/(spec_helper|shared/.*)|config/(boot|environment(s/test)?))\.rb$% => proc { - files_matching %r%^spec/(models|controllers|views|helpers)/.*_spec\.rb$% - }, - %r%^lib/(.*)\.rb$% => proc { |_, m| - ["spec/lib/#{m[1]}_spec.rb"] - }, - } +Autotest.add_hook :initialize do |at| + %w{config coverage db doc log public script vendor/rails vendor/plugins previous_failures.txt}.each do |exception| + at.add_exception(exception) end + at.clear_mappings + + at.add_mapping(%r%^(test|spec)/fixtures/(.*).yml$%) { |_, m| + ["spec/models/#{m[2].singularize}_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[2]}/.*_spec\.rb$%) + } + at.add_mapping(%r%^spec/(models|controllers|views|helpers|lib)/.*rb$%) { |filename, _| + filename + } + at.add_mapping(%r%^app/models/(.*)\.rb$%) { |_, m| + ["spec/models/#{m[1]}_spec.rb"] + } + at.add_mapping(%r%^app/views/(.*)$%) { |_, m| + at.files_matching %r%^spec/views/#{m[1]}_spec.rb$% + } + at.add_mapping(%r%^app/controllers/(.*)\.rb$%) { |_, m| + if m[1] == "application" + at.files_matching %r%^spec/controllers/.*_spec\.rb$% + else + ["spec/controllers/#{m[1]}_spec.rb"] + end + } + at.add_mapping(%r%^app/helpers/(.*)_helper\.rb$%) { |_, m| + if m[1] == "application" then + at.files_matching(%r%^spec/(views|helpers)/.*_spec\.rb$%) + else + ["spec/helpers/#{m[1]}_helper_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[1]}/.*_spec\.rb$%) + end + } + at.add_mapping(%r%^config/routes\.rb$%) { + at.files_matching %r%^spec/(controllers|views|helpers)/.*_spec\.rb$% + } + at.add_mapping(%r%^config/database\.yml$%) { |_, m| + at.files_matching %r%^spec/models/.*_spec\.rb$% + } + at.add_mapping(%r%^(spec/(spec_helper|shared/.*)|config/(boot|environment(s/test)?))\.rb$%) { + at.files_matching %r%^spec/(models|controllers|views|helpers)/.*_spec\.rb$% + } + at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m| + ["spec/lib/#{m[1]}_spec.rb"] + } +end + +class Autotest::RailsRspec < Autotest::Rspec + def spec_command "script/spec" end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/dsl.rb b/vendor/plugins/rspec_on_rails/lib/spec/dsl.rb deleted file mode 100755 index 272032210..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/dsl.rb +++ /dev/null @@ -1,2 +0,0 @@ -dir = File.dirname(__FILE__) -require File.expand_path("#{dir}/dsl/configuration") diff --git a/vendor/plugins/rspec_on_rails/lib/spec/dsl/configuration.rb b/vendor/plugins/rspec_on_rails/lib/spec/dsl/configuration.rb deleted file mode 100755 index 5605dc913..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/dsl/configuration.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Spec - module DSL - class Configuration - attr_writer :use_transactional_fixtures, :use_instantiated_fixtures, :fixture_path, :global_fixtures - - def use_transactional_fixtures - @use_transactional_fixtures.nil? ? @use_transactional_fixtures = true : @use_transactional_fixtures - end - - def use_instantiated_fixtures - @use_instantiated_fixtures ||= false - end - - def fixture_path - @fixture_path ||= RAILS_ROOT + '/spec/fixtures' - end - - def global_fixtures - @global_fixtures ||= [] - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/matchers.rb b/vendor/plugins/rspec_on_rails/lib/spec/matchers.rb deleted file mode 100755 index 7268a03ce..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/matchers.rb +++ /dev/null @@ -1,3 +0,0 @@ -dir = File.dirname(__FILE__) - -require File.expand_path("#{dir}/matchers/have") diff --git a/vendor/plugins/rspec_on_rails/lib/spec/matchers/have.rb b/vendor/plugins/rspec_on_rails/lib/spec/matchers/have.rb deleted file mode 100644 index 4abeb2faf..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/matchers/have.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Spec #:nodoc: - module Matchers #:nodoc: - class Have #:nodoc: - alias_method :__original_failure_message, :failure_message - def failure_message - return "expected #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}, got #{@actual}" if @collection_name == :errors_on - return "expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@actual}" if @collection_name == :error_on - return __original_failure_message - end - - alias_method :__original_description, :description - def description - return "should have #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}" if @collection_name == :errors_on - return "should have #{relativities[@relativity]}#{@expected} error on :#{@args[0]}" if @collection_name == :error_on - return __original_description - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails.rb index b9b87043b..be8a6c415 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails.rb @@ -1,29 +1,23 @@ -dir = File.dirname(__FILE__) -require 'application' - silence_warnings { RAILS_ENV = "test" } + +require 'application' require 'action_controller/test_process' require 'action_controller/integration' -require 'active_record/base' -require 'active_record/fixtures' -require 'spec' - -require File.expand_path("#{dir}/rails/dsl") +require 'active_record/fixtures' if defined?(ActiveRecord::Base) +require 'test/unit' -require File.expand_path("#{dir}/dsl") -require File.expand_path("#{dir}/matchers") - -require File.expand_path("#{dir}/rails/version") -require File.expand_path("#{dir}/rails/extensions") -require File.expand_path("#{dir}/rails/matchers") +require 'spec' -Test::Unit.run = true +require 'spec/rails/extensions' +require 'spec/rails/example' +require 'spec/rails/version' +require 'spec/rails/matchers' module Spec # = Spec::Rails # # Spec::Rails (a.k.a. RSpec on Rails) is a Ruby on Rails plugin that allows you to drive the development - # of your RoR application using RSpec, a framework that aims to enable Behaviour Driven Development + # of your RoR application using RSpec, a framework that aims to enable Example Driven Development # in Ruby. # # == Features diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl.rb deleted file mode 100644 index 23df14d68..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl.rb +++ /dev/null @@ -1,40 +0,0 @@ -dir = File.dirname(__FILE__) - -require File.expand_path("#{dir}/dsl/ivar_proxy") -require File.expand_path("#{dir}/dsl/assigns_hash_proxy") -require File.expand_path("#{dir}/dsl/behaviour") - -module Spec - module Rails - # Spec::Rails::DSL extends Spec::DSL (RSpec's core DSL module) to provide - # Rails-specific contexts for describing Rails Models, Views, Controllers and Helpers. - # - # == Model Examples - # - # These are the equivalent of unit tests in Rails' built in testing. Ironically (for the traditional TDD'er) these are the only specs that we feel should actually interact with the database. - # - # See Spec::Rails::DSL::ModelBehaviour - # - # == Controller Examples - # - # These align somewhat with functional tests in rails, except that they do not actually render views (though you can force rendering of views if you prefer). Instead of setting expectations about what goes on a page, you set expectations about what templates get rendered. - # - # See Spec::Rails::DSL::ControllerBehaviour - # - # == View Examples - # - # This is the other half of Rails functional testing. View specs allow you to set up assigns and render - # a template. By assigning mock model data, you can specify view behaviour with no dependency on a database - # or your real models. - # - # See Spec::Rails::DSL::ViewBehaviour - # - # == Helper Examples - # - # These let you specify directly methods that live in your helpers. - # - # See Spec::Rails::DSL::HelperBehaviour - module DSL - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/assigns_hash_proxy.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/assigns_hash_proxy.rb deleted file mode 100644 index 8e71c9b1e..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/assigns_hash_proxy.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Spec - module Rails - module DSL - class AssignsHashProxy #:nodoc: - def initialize(object) - @object = object - end - - def [](ivar) - if assigns.include?(ivar.to_s) - assigns[ivar.to_s] - elsif assigns.include?(ivar) - assigns[ivar] - else - nil - end - end - - def []=(ivar, val) - assigns[ivar.to_s] = val - end - - def delete(name) - assigns.delete(name.to_s) - end - - def each(&block) - assigns.each &block - end - - def has_key?(key) - assigns.key?(key.to_s) - end - - protected - def assigns - @object.assigns - end - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour.rb deleted file mode 100644 index 0c45ad22c..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour.rb +++ /dev/null @@ -1,9 +0,0 @@ -dir = File.dirname(__FILE__) - -require File.expand_path("#{dir}/behaviour/render_observer") -require File.expand_path("#{dir}/behaviour/base") -require File.expand_path("#{dir}/behaviour/functional") -require File.expand_path("#{dir}/behaviour/model") -require File.expand_path("#{dir}/behaviour/controller") -require File.expand_path("#{dir}/behaviour/helper") -require File.expand_path("#{dir}/behaviour/view") diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/base.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/base.rb deleted file mode 100644 index f40d191a0..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/base.rb +++ /dev/null @@ -1,88 +0,0 @@ -module Spec - module Rails - class TestCase < Test::Unit::TestCase - cattr_accessor :fixture_path, :use_transactional_fixtures, :use_instantiated_fixtures, :global_fixtures - remove_method :default_test if respond_to?(:default_test) - - def add_assertion #:nodoc: - # no-op - end - end - end -end - -module Spec - module Rails - module DSL - module AllBehaviourHelpers - ActionView::Base.cache_template_extensions = false - class << self - def included(mod) - mod.send :include, ExampleMethods - mod.send :extend, BehaviourMethods - end - end - - module BehaviourMethods - def configure - self.use_transactional_fixtures = Spec::Runner.configuration.use_transactional_fixtures - self.use_instantiated_fixtures = Spec::Runner.configuration.use_instantiated_fixtures - self.fixture_path = Spec::Runner.configuration.fixture_path - self.global_fixtures = Spec::Runner.configuration.global_fixtures - fixtures global_fixtures if global_fixtures - end - end - - module ExampleMethods - @@model_id = 1000 - # Creates a mock object instance for a +model_class+ with common - # methods stubbed out. - # Additional methods may be easily stubbed (via add_stubs) if +stubs+ is passed. - def mock_model(model_class, stubs = {}) - id = @@model_id - @@model_id += 1 - m = mock("#{model_class.name}_#{id}") - m.stub!(:id).and_return(id) - m.stub!(:to_param).and_return(id.to_s) - m.stub!(:new_record?).and_return(false) - m.stub!(:errors).and_return(stub("errors", :count => 0)) - m.send(:__mock_proxy).instance_eval <<-CODE - def @target.is_a?(other) - #{model_class}.ancestors.include?(other) - end - def @target.kind_of?(other) - #{model_class}.ancestors.include?(other) - end - def @target.instance_of?(other) - other == #{model_class} - end - def @target.class - #{model_class} - end - CODE - add_stubs(m, stubs) - yield m if block_given? - m - end - - #-- - # TODO - Shouldn't this just be an extension of stub! ?? - # - object.stub!(:method => return_value, :method2 => return_value2, :etc => etc) - #++ - # Stubs methods on +object+ (if +object+ is a symbol or string a new mock - # with that name will be created). +stubs+ is a Hash of <tt>method=>value</tt> - def add_stubs(object, stubs = {}) #:nodoc: - m = [String, Symbol].index(object.class) ? mock(object.to_s) : object - stubs.each {|k,v| m.stub!(k).and_return(v)} - m - end - end - end - - class EvalContext < Spec::Rails::TestCase - include Spec::Rails::Matchers - include Spec::Rails::DSL::AllBehaviourHelpers - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/controller.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/controller.rb deleted file mode 100644 index 54d08f8aa..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/controller.rb +++ /dev/null @@ -1,269 +0,0 @@ -module Spec - module Rails - module DSL - module ControllerBehaviourHelpers - class << self - def included(mod) - mod.send :include, ExampleMethods - mod.send :extend, BehaviourMethods - end - end - - module BehaviourMethods - attr_accessor :controller_class_name # :nodoc: - - # Use this to instruct RSpec to render views in your controller examples (Integration Mode). - # - # describe ThingController do - # integrate_views - # ... - # - # See Spec::Rails::DSL::ControllerBehaviour for more information about - # Integration and Isolation modes. - def integrate_views - @integrate_views = true - end - def integrate_views? # :nodoc: - @integrate_views - end - end - - module ExampleMethods - # Uses ActionController::Routing::Routes to generate - # the correct route for a given set of options. - # == Examples - # route_for(:controller => 'registrations', :action => 'edit', :id => 1) - # => '/registrations/1;edit' - def route_for(options) - ensure_that_routes_are_loaded - ActionController::Routing::Routes.generate(options) - end - end - end - - module ControllerInstanceMethods #:nodoc: - include Spec::Rails::DSL::RenderObserver - - # === render(options = nil, deprecated_status = nil, &block) - # - # This gets added to the controller's singleton meta class, - # allowing Controller Examples to run in two modes, freely switching - # from context to context. - def render(options=nil, deprecated_status=nil, &block) - unless block_given? - unless integrate_views? - @template.metaclass.class_eval do - define_method :file_exists? do true end - define_method :render_file do |*args| - @first_render ||= args[0] - end - end - end - end - - if (Hash === options) - expect_render_mock_proxy.render(options) - end - if expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options) - @performed_render = true - else - super(options, deprecated_status, &block) - end - end - - if self.respond_to?(:should_receive) && self.respond_to?(:stub!) - self.send :alias_method, :orig_should_receive, :should_receive - self.send :alias_method, :orig_stub!, :stub! - def raise_with_disable_message(old_method, new_method) - raise %Q| - controller.#{old_method}(:render) has been disabled because it - can often produce unexpected results. Instead, you should - use the following (before the action): - - controller.#{new_method}(*args) - - See the rdoc for #{new_method} for more information. - | - end - def should_receive(*args) - if args[0] == :render - raise_with_disable_message("should_receive", "expect_render") - else - orig_should_receive(*args) - end - end - def stub!(*args) - if args[0] == :render - raise_with_disable_message("stub!", "stub_render") - else - orig_stub!(*args) - end - end - end - - def response(&block) - # NOTE - we're setting @update for the assert_select_spec - kinda weird, huh? - @update = block - @_response || @response - end - - def integrate_views! - @integrate_views = true - end - - private - - def integrate_views? - @integrate_views - end - end - - # The methods provided by Spec::Rails::DSL::ControllerEvalContext - # are available to you in Controller Examples. - # - # The Public Class Methods are to be used within the +context+ block: - # - # describe ThingController do - # # public class methods go here - # - # The Public Instance Methods are to be used within the +specify+ block: - # - # describe ThingController do - # it "should do stuff" do - # # public instance methods go here - # - # See Spec::Rails::DSL::ControllerBehaviour for more general information - # on Controller Examples - class ControllerEvalContext < Spec::Rails::DSL::FunctionalEvalContext - include Spec::Rails::DSL::ControllerBehaviourHelpers - attr_reader :response, :request, :controller - - def setup #:nodoc: - super - - # Some Rails apps explicitly disable ActionMailer in environment.rb - if defined?(ActionMailer) - @deliveries = [] - ActionMailer::Base.deliveries = @deliveries - end - - unless @controller.class.ancestors.include?(ActionController::Base) - Spec::Expectations.fail_with <<-EOE - You have to declare the controller name in controller specs. For example: - describe "The ExampleController" do - controller_name "example" #invokes the ExampleController - end - EOE - end - @controller.metaclass.class_eval do - def controller_path #:nodoc: - self.class.name.underscore.gsub('_controller','') - end - include ControllerInstanceMethods - end - @controller.integrate_views! if @integrate_views - @controller.session = session - end - - protected - def _controller_ivar_proxy - @controller_ivar_proxy ||= AssignsHashProxy.new @controller - end - - private - def ensure_that_routes_are_loaded - ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty? - end - end - - # Controller Examples live in $RAILS_ROOT/spec/controllers/. - # - # Controller Examples use Spec::Rails::DSL::ControllerBehaviour, which supports running specs for - # Controllers in two modes, which represent the tension between the more granular - # testing common in TDD and the more high level testing built into - # rails. BDD sits somewhere in between: we want to a balance between - # specs that are close enough to the code to enable quick fault - # isolation and far enough away from the code to enable refactoring - # with minimal changes to the existing specs. - # - # == Isolation mode (default) - # - # No dependencies on views because none are ever rendered. The - # benefit of this mode is that can spec the controller completely - # independent of the view, allowing that responsibility to be - # handled later, or by somebody else. Combined w/ separate view - # specs, this also provides better fault isolation. - # - # == Integration mode - # - # To run in this mode, include the +integrate_views+ declaration - # in your controller context: - # - # describe ThingController do - # integrate_views - # ... - # - # In this mode, controller specs are run in the same way that - # rails functional tests run - one set of tests for both the - # controllers and the views. The benefit of this approach is that - # you get wider coverage from each spec. Experienced rails - # developers may find this an easier approach to begin with, however - # we encourage you to explore using the isolation mode and revel - # in its benefits. - # - # == Expecting Errors - # - # Rspec on Rails will raise errors that occur in controller actions. - # In contrast, Rails will swallow errors that are raised in controller - # actions and return an error code in the header. If you wish to override - # Rspec and have Rail's default behaviour,tell the controller to use - # rails error handling ... - # - # before(:each) do - # controller.use_rails_error_handling! - # end - # - # When using Rail's error handling, you can expect error codes in headers ... - # - # it "should return an error in the header" do - # response.should be_error - # end - # - # it "should return a 501" do - # response.response_code.should == 501 - # end - # - # it "should return a 501" do - # response.code.should == "501" - # end - # - # See Spec::Rails::DSL::ControllerEvalContext for information - # about methods you can use in your Controller Examples - class ControllerBehaviour < Spec::DSL::Behaviour - def execution_context(example=nil) # :nodoc: - instance = execution_context_class.new(example) - if controller_class_name.nil? && !described_type.nil? - controller_klass_name = described_type.to_s - else - controller_klass_name = controller_class_name.to_s - end - integrate_views = integrate_views? - instance.instance_eval { - @controller_class_name = controller_klass_name - @integrate_views = integrate_views - } - instance - end - - def before_eval # :nodoc: - inherit Spec::Rails::DSL::ControllerEvalContext - prepend_before {setup} - append_after {teardown} - configure - end - - Spec::DSL::BehaviourFactory.add_behaviour_class(:controller, self) - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/functional.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/functional.rb deleted file mode 100644 index e0caf9f48..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/functional.rb +++ /dev/null @@ -1,90 +0,0 @@ -module Spec - module Rails - module DSL - module FunctionalBehaviourHelpers - class << self - def included(mod) - mod.send :include, ExampleMethods - mod.send :extend, BehaviourMethods - end - end - - module BehaviourMethods - # You MUST provide a controller_name within the context of - # your controller specs: - # - # describe "ThingController" do - # controller_name :thing - # ... - def controller_name(name=nil) - @controller_class_name = "#{name}_controller".camelize - end - end - - module ExampleMethods - # :call-seq: - # assigns() - # - # Hash of instance variables to values that are made available to views. - # == Examples - # - # #in thing_controller.rb - # def new - # @thing = Thing.new - # end - # - # #in thing_controller_spec - # get 'new' - # assigns[:registration].should == Thing.new - #-- - # NOTE - Even though docs say only use assigns[:key] format, but allowing assigns(:key) - # in order to avoid breaking old specs. - #++ - def assigns(key = nil) - if key.nil? - @controller.assigns - _controller_ivar_proxy - else - @controller.assigns[key] - _controller_ivar_proxy[key] - end - end - - protected - def _controller_ivar_proxy - @controller_ivar_proxy ||= IvarProxy.new @controller - end - end - end - - class FunctionalEvalContext < Spec::Rails::DSL::EvalContext - include Spec::Rails::DSL::FunctionalBehaviourHelpers - attr_reader :request, :response - - def setup #:nodoc: - - @controller_class = Object.path2class @controller_class_name - raise "Can't determine controller class for #{@controller_class_name}" if @controller_class.nil? - - @controller = @controller_class.new - - @request = ActionController::TestRequest.new - @response = ActionController::TestResponse.new - end - - def params - request.parameters - end - - def flash - response.flash - end - - def session - request.session - end - - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/helper.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/helper.rb deleted file mode 100644 index 9d73c7a1c..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/helper.rb +++ /dev/null @@ -1,112 +0,0 @@ -module Spec - module Rails - module DSL - module HelperBehaviourHelpers - class << self - def included(mod) - mod.send :include, ExampleMethods - mod.send :extend, BehaviourMethods - end - end - - module BehaviourMethods - # The helper name.... - def helper_name(name=nil) - send :include, "#{name}_helper".camelize.constantize - end - end - - module ExampleMethods - include ActionView::Helpers::ActiveRecordHelper - include ActionView::Helpers::AssetTagHelper - include ActionView::Helpers::BenchmarkHelper - include ActionView::Helpers::CacheHelper - include ActionView::Helpers::CaptureHelper - include ActionView::Helpers::DateHelper - include ActionView::Helpers::DebugHelper - include ActionView::Helpers::FormHelper - include ActionView::Helpers::FormOptionsHelper - include ActionView::Helpers::FormTagHelper - include ActionView::Helpers::JavaScriptHelper - include ActionView::Helpers::JavaScriptMacrosHelper - include ActionView::Helpers::NumberHelper - include ActionView::Helpers::PaginationHelper rescue nil #removed after 1.2.3 - include ActionView::Helpers::PrototypeHelper - include ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods - include ActionView::Helpers::ScriptaculousHelper - include ActionView::Helpers::TagHelper - include ActionView::Helpers::TextHelper - include ActionView::Helpers::UrlHelper - - def eval_erb(text) - ERB.new(text).result(binding) - end - - end - end - - class HelperEvalContextController < ApplicationController #:nodoc: - attr_accessor :request, :url - - # Re-raise errors - def rescue_action(e); raise e; end - end - - class HelperEvalContext < Spec::Rails::DSL::FunctionalEvalContext - include Spec::Rails::DSL::HelperBehaviourHelpers - - def setup #:nodoc: - @controller_class_name = 'Spec::Rails::DSL::HelperEvalContextController' - super - @controller.request = @request - @controller.url = ActionController::UrlRewriter.new @request, {} # url_for - - @flash = ActionController::Flash::FlashHash.new - session['flash'] = @flash - - ActionView::Helpers::AssetTagHelper::reset_javascript_include_default - end - - def flash - @flash - end - - end - - # Helper Specs live in $RAILS_ROOT/spec/helpers/. - # - # Helper Specs use Spec::Rails::DSL::HelperBehaviour, which allows you to - # include your Helper directly in the context and write specs directly - # against its methods. - # - # HelperBehaviour also includes the standard lot of ActionView::Helpers in case your - # helpers rely on any of those. - # - # == Example - # - # class ThingHelper - # def number_of_things - # Thing.count - # end - # end - # - # describe "ThingHelper behaviour" do - # include ThingHelper - # it "should tell you the number of things" do - # Thing.should_receive(:count).and_return(37) - # number_of_things.should == 37 - # end - # end - class HelperBehaviour < Spec::DSL::Behaviour - def before_eval #:nodoc: - inherit Spec::Rails::DSL::HelperEvalContext - prepend_before {setup} - append_after {teardown} - configure - end - - Spec::DSL::BehaviourFactory.add_behaviour_class(:helper, self) - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/model.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/model.rb deleted file mode 100644 index a18455ab1..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/model.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Spec - module Rails - module DSL - # Model examples live in $RAILS_ROOT/spec/models/. - # - # Model examples use Spec::Rails::DSL::ModelBehaviour, which - # provides support for fixtures and some custom expectations via extensions - # to ActiveRecord::Base. - class ModelBehaviour < Spec::DSL::Behaviour - def before_eval # :nodoc: - inherit Spec::Rails::DSL::EvalContext - prepend_before {setup} - append_after {teardown} - configure - end - - Spec::DSL::BehaviourFactory.add_behaviour_class(:model, self) - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/render_observer.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/render_observer.rb deleted file mode 100644 index 1687e58b5..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/render_observer.rb +++ /dev/null @@ -1,94 +0,0 @@ -require 'spec/mocks' - -module Spec - module Rails - module DSL - # Provides specialized mock-like behaviour for controller and view examples, - # allowing you to mock or stub calls to render with specific arguments while - # ignoring all other calls. - module RenderObserver - - # Similar to mocking +render+ with the exception that calls to +render+ with - # any other options are passed on to the receiver (i.e. controller in - # controller examples, template in view examples). - # - # This is necessary because Rails uses the +render+ method on both - # controllers and templates as a dispatcher to render different kinds of - # things, sometimes resulting in many calls to the render method within one - # request. This approach makes it impossible to use a normal mock object, which - # is designed to observe all incoming messages with a given name. - # - # +expect_render+ is auto-verifying, so failures will be reported without - # requiring you to explicitly request verification. - # - # Also, +expect_render+ uses parts of RSpec's mock expectation framework. Because - # it wraps only a subset of the framework, using this will create no conflict with - # other mock frameworks if you choose to use them. Additionally, the object returned - # by expect_render is an RSpec mock object, which means that you can call any of the - # chained methods available in RSpec's mocks. - # - # == Controller Examples - # - # controller.expect_render(:partial => 'thing', :object => thing) - # controller.expect_render(:partial => 'thing', :collection => things).once - # - # controller.stub_render(:partial => 'thing', :object => thing) - # controller.stub_render(:partial => 'thing', :collection => things).twice - # - # == View Examples - # - # template.expect_render(:partial => 'thing', :object => thing) - # template.expect_render(:partial => 'thing', :collection => things) - # - # template.stub_render(:partial => 'thing', :object => thing) - # template.stub_render(:partial => 'thing', :collection => things) - # - def expect_render(opts={}) - expectation = expect_render_mock_proxy.should_receive(:render, :expected_from => caller(1)[0]).with(opts) - register_verify_after_each - expectation - end - - # This is exactly like expect_render, with the exception that the call to render will not - # be verified. Use this if you are trying to isolate your example from a complicated render - # operation but don't care whether it is called or not. - def stub_render(opts={}) - expect_render_mock_proxy.should_receive(:render, :expected_from => caller(1)[0]).with(opts).any_number_of_times - end - - def verify_rendered # :nodoc: - expect_render_mock_proxy.rspec_verify - end - - def unregister_verify_after_each #:nodoc: - proc = verify_rendered_proc - Spec::DSL::Behaviour.remove_after(:each, &proc) - end - - protected - - def verify_rendered_proc #:nodoc: - template = self - @verify_rendered_proc ||= Proc.new do - template.verify_rendered - template.unregister_verify_after_each - end - end - - def register_verify_after_each #:nodoc: - proc = verify_rendered_proc - Spec::DSL::Behaviour.after(:each, &proc) - end - - def expect_render_mock_proxy #:nodoc: - @expect_render_mock_proxy ||= lambda do - proxy = Spec::Mocks::Mock.new("expect_render_mock_proxy") - proxy.stub!(:render) - proxy - end.call - end - - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/view.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/view.rb deleted file mode 100644 index 033d6f9c3..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/behaviour/view.rb +++ /dev/null @@ -1,196 +0,0 @@ -module Spec - module Rails - module DSL - module ViewBehaviourHelpers - class << self - def included(mod) - mod.send :include, ExampleMethods - end - end - - module ExampleMethods - # Renders a template for a View Spec, which then provides access to the result - # through the +response+. - # - # == Examples - # - # render('/people/list') - # render('/people/list', :helper => MyHelper) - # render('/people/list', :helpers => [MyHelper, MyOtherHelper]) - # render(:partial => '/people/_address') - # - # See Spec::Rails::DSL::ViewBehaviour for more information. - def render(*args) - options = Hash === args.last ? args.pop : {} - options[:template] = args.first.to_s unless args.empty? - - set_base_view_path(options) - add_helpers(options) - - assigns[:action_name] = @action_name - - @request.path_parameters = { - :controller => derived_controller_name(options), - :action => derived_action_name(options) - } - - defaults = { :layout => false } - options = defaults.merge options - - @controller.instance_variable_set :@params, @request.parameters - - @controller.send :initialize_current_url - - @controller.class.instance_eval %{ - def controller_path - "#{derived_controller_name(options)}" - end - - def controller_name - "#{derived_controller_name(options).split('/').last}" - end - } - - @controller.send :forget_variables_added_to_assigns - @controller.send :render, options - @controller.send :process_cleanup - end - - # This provides the template. Use this to set mock - # expectations for dealing with partials - # - # == Example - # - # describe "/person/new" do - # it "should use the form partial" do - # template.should_receive(:render).with(:partial => 'form') - # render "/person/new" - # end - # end - def template - @controller.template - end - - end - end - - class ViewExampleController < ActionController::Base #:nodoc: - include Spec::Rails::DSL::RenderObserver - attr_reader :template - - def add_helper_for(template_path) - add_helper(template_path.split('/')[0]) - end - - def add_helper(name) - begin - helper_module = "#{name}_helper".camelize.constantize - rescue - return - end - template.metaclass.class_eval do - include helper_module - end - end - - end - - class ViewEvalContext < Spec::Rails::DSL::FunctionalEvalContext - include Spec::Rails::DSL::ViewBehaviourHelpers - def setup #:nodoc: - super - ensure_that_flash_and_session_work_properly - end - - def ensure_that_flash_and_session_work_properly #:nodoc: - @controller.send :initialize_template_class, @response - @controller.send :assign_shortcuts, @request, @response - @session = @controller.session - @controller.class.send :public, :flash - end - - def teardown #:nodoc: - super - ensure_that_base_view_path_is_not_set_across_behaviours - end - - def ensure_that_base_view_path_is_not_set_across_behaviours #:nodoc: - ActionView::Base.base_view_path = nil - end - - def set_base_view_path(options) #:nodoc: - ActionView::Base.base_view_path = base_view_path(options) - end - - def base_view_path(options) #:nodoc: - "/#{derived_controller_name(options)}/" - end - - def derived_controller_name(options) #:nodoc: - parts = subject_of_render(options).split('/').reject { |part| part.empty? } - "#{parts[0..-2].join('/')}" - end - - def derived_action_name(options) #:nodoc: - parts = subject_of_render(options).split('/').reject { |part| part.empty? } - "#{parts.last}" - end - - def subject_of_render(options) #:nodoc: - [:template, :partial, :file].each do |render_type| - if options.has_key?(render_type) - return options[render_type] - end - end - raise Exception.new("Unhandled render type in view spec.") - end - - def add_helpers(options) #:nodoc: - @controller.add_helper("application") - @controller.add_helper(derived_controller_name(options)) - @controller.add_helper(options[:helper]) if options[:helper] - options[:helpers].each { |helper| @controller.add_helper(helper) } if options[:helpers] - end - - end - - # View Examples live in $RAILS_ROOT/spec/views/. - # - # View Specs use Spec::Rails::DSL::ViewBehaviour, - # which provides access to views without invoking any of your controllers. - # See Spec::Rails::Expectations::Matchers for information about specific - # expectations that you can set on views. - # - # == Example - # - # describe "login/login" do - # before do - # render 'login/login' - # end - # - # it "should display login form" do - # response.should have_tag("form[action=/login]") do - # with_tag("input[type=text][name=email]") - # with_tag("input[type=password][name=password]") - # with_tag("input[type=submit][value=Login]") - # end - # end - # end - class ViewBehaviour < Spec::DSL::Behaviour - def execution_context(specification=nil) # :nodoc: - instance = execution_context_class.new(specification) - instance.instance_eval { @controller_class_name = "Spec::Rails::DSL::ViewExampleController" } - instance - end - def before_eval # :nodoc: - inherit Spec::Rails::DSL::ViewEvalContext - prepend_before {setup} - append_after {teardown} - configure - end - - Spec::DSL::BehaviourFactory.add_behaviour_class(:view, self) - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/ivar_proxy.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/ivar_proxy.rb deleted file mode 100644 index 4128c88f1..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/dsl/ivar_proxy.rb +++ /dev/null @@ -1,62 +0,0 @@ -## -# A wrapper that allows instance variables to be manipulated using +[]+ and -# +[]=+ - -module Spec - module Rails - module DSL - class IvarProxy #:nodoc: - - ## - # Wraps +object+ allowing its instance variables to be manipulated. - - def initialize(object) - @object = object - end - - ## - # Retrieves +ivar+ from the wrapped object. - - def [](ivar) - get_variable "@#{ivar}" - end - - ## - # Sets +ivar+ to +val+ on the wrapped object. - - def []=(ivar, val) - set_variable "@#{ivar}", val - end - - def each - @object.instance_variables.each do |variable_full_name| - variable_name = variable_full_name[1...variable_full_name.length] - yield variable_name, get_variable(variable_full_name) - end - end - - def delete(key) - var_name = "@#{key}" - if @object.instance_variables.include?(var_name) - @object.send(:remove_instance_variable, var_name) - else - return nil - end - end - - def has_key?(key) - @object.instance_variables.include?("@#{key}") - end - - protected - def get_variable(name) - @object.instance_variable_get name - end - - def set_variable(name, value) - @object.instance_variable_set name, value - end - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb index 73dd1540f..2a4b9ecca 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb @@ -1,8 +1,12 @@ -dir = File.dirname(__FILE__) -require File.expand_path("#{dir}/extensions/object") -require File.expand_path("#{dir}/extensions/active_record/base") -require File.expand_path("#{dir}/extensions/active_record/oracle_adapter_patch") -require File.expand_path("#{dir}/extensions/action_controller/base") -require File.expand_path("#{dir}/extensions/action_controller/rescue") -require File.expand_path("#{dir}/extensions/action_controller/test_response") -require File.expand_path("#{dir}/extensions/action_view/base") +require 'spec' + +require 'spec/rails/extensions/object' + +require 'spec/rails/extensions/spec/example/configuration' +require 'spec/rails/extensions/spec/matchers/have' + +require 'spec/rails/extensions/active_record/base' +require 'spec/rails/extensions/action_controller/base' +require 'spec/rails/extensions/action_controller/rescue' +require 'spec/rails/extensions/action_controller/test_response' +require 'spec/rails/extensions/action_view/base' diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb index 4b1b7c2df..1f7edf83c 100755 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb @@ -2,8 +2,11 @@ module ActionController class Base class << self def set_view_path(path) - method = respond_to?(:view_paths=) ? :view_paths= : :template_root= - send(method, path) + [:append_view_path, :view_paths=, :template_root=].each do |method| + if respond_to?(method) + return send(method, path) + end + end end end end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb index 8bb9ff1b6..47c717a9d 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb @@ -1,6 +1,6 @@ module ActionView #:nodoc: class Base #:nodoc: - include Spec::Rails::DSL::RenderObserver + include Spec::Rails::Example::RenderObserver cattr_accessor :base_view_path def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc: if partial_path.is_a?(String) @@ -15,11 +15,12 @@ module ActionView #:nodoc: alias_method :orig_render, :render def render(options = {}, old_local_assigns = {}, &block) - if (Hash === options) + if expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options) expect_render_mock_proxy.render(options) - end - unless expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options) - orig_render(options, old_local_assigns, &block) + else + unless expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options) + orig_render(options, old_local_assigns, &block) + end end end end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb index c58e8579f..fd6d50f5f 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb @@ -1,29 +1,30 @@ -module ActiveRecord #:nodoc: - class Base +if defined?(ActiveRecord::Base) + module ActiveRecord #:nodoc: + class Base - (class << self; self; end).class_eval do - # Extension for <tt>should have</tt> on AR Model classes + (class << self; self; end).class_eval do + # Extension for <tt>should have</tt> on AR Model classes + # + # ModelClass.should have(:no).records + # ModelClass.should have(1).record + # ModelClass.should have(n).records + def records + find(:all) + end + alias :record :records + end + + # Extension for <tt>should have</tt> on AR Model instances # - # ModelClass.should have(:no).records - # ModelClass.should have(1).record - # ModelClass.should have(n).records - def records - find(:all) + # model.should have(:no).errors_on(:attribute) + # model.should have(1).error_on(:attribute) + # model.should have(n).errors_on(:attribute) + def errors_on(attribute) + self.valid? + [self.errors.on(attribute)].flatten.compact end - alias :record :records - end + alias :error_on :errors_on - # Extension for <tt>should have</tt> on AR Model instances - # - # model.should have(:no).errors_on(:attribute) - # model.should have(1).error_on(:attribute) - # model.should have(n).errors_on(:attribute) - def errors_on(attribute) - self.valid? - [self.errors.on(attribute)].flatten.compact end - alias :error_on :errors_on - end -end - +end
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/oracle_adapter_patch.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/oracle_adapter_patch.rb deleted file mode 100644 index 18f40b808..000000000 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/oracle_adapter_patch.rb +++ /dev/null @@ -1,8 +0,0 @@ -if defined?(OCI8AutoRecover) - module OracleAdapterPatch - def describe(name) - @connection.describe(name) - end - end - OCI8AutoRecover.send(:include, OracleAdapterPatch) -end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb index c5258966d..27ac2ba0f 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb @@ -1,8 +1,8 @@ dir = File.dirname(__FILE__) -require File.expand_path("#{dir}/matchers/assert_select") -require File.expand_path("#{dir}/matchers/have_text") -require File.expand_path("#{dir}/matchers/redirect_to") -require File.expand_path("#{dir}/matchers/render_template") +require 'spec/rails/matchers/assert_select' +require 'spec/rails/matchers/have_text' +require 'spec/rails/matchers/redirect_to' +require 'spec/rails/matchers/render_template' module Spec module Rails diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb index c8cdf3521..1af35118f 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb @@ -3,12 +3,12 @@ module Spec # :nodoc: module Rails module Matchers - + class AssertSelect #:nodoc: - - def initialize(*args, &block) - @assertion = args.shift - @spec_scope = args.shift + + def initialize(assertion, spec_scope, *args, &block) + @assertion = assertion + @spec_scope = spec_scope @args = args @block = block end @@ -24,21 +24,22 @@ module Spec # :nodoc: @block = block if block begin @spec_scope.send(@assertion, *@args, &@block) - rescue Exception => @error + rescue ::Test::Unit::AssertionFailedError => @error end + @error.nil? end - + def failure_message; @error.message; end def negative_failure_message; "should not #{description}, but did"; end - + def description { :assert_select => "have tag#{format_args(*@args)}", :assert_select_email => "send email#{format_args(*@args)}", }[@assertion] end - + private def format_args(*args) @@ -73,9 +74,7 @@ module Spec # :nodoc: # # see documentation for assert_select at http://api.rubyonrails.org/ def have_tag(*args, &block) - args.unshift(self) - args.unshift(:assert_select) - AssertSelect.new(*args, &block) + AssertSelect.new(:assert_select, self, *args, &block) end # wrapper for a nested assert_select @@ -107,9 +106,7 @@ module Spec # :nodoc: # # see documentation for assert_select_rjs at http://api.rubyonrails.org/ def have_rjs(*args, &block) - args.unshift(self) - args.unshift(:assert_select_rjs) - AssertSelect.new(*args, &block) + AssertSelect.new(:assert_select_rjs, self, *args, &block) end # :call-seq: @@ -119,18 +116,14 @@ module Spec # :nodoc: # # see documentation for assert_select_email at http://api.rubyonrails.org/ def send_email(*args, &block) - args.unshift(self) - args.unshift(:assert_select_email) - AssertSelect.new(*args, &block) + AssertSelect.new(:assert_select_email, self, *args, &block) end # wrapper for assert_select_encoded # # see documentation for assert_select_encoded at http://api.rubyonrails.org/ def with_encoded(*args, &block) - args.unshift(self) - args.unshift(:assert_select_encoded) - should AssertSelect.new(*args, &block) + should AssertSelect.new(:assert_select_encoded, self, *args, &block) end end end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb index 5e4324107..12c71ead8 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb @@ -8,8 +8,8 @@ module Spec @expected = expected end - def matches?(response) - @actual = response.body + def matches?(response_or_text) + @actual = response_or_text.respond_to?(:body) ? response_or_text.body : response_or_text return actual =~ expected if Regexp === expected return actual == expected unless Regexp === expected end diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb index 35ebbe5d7..7c61c81e7 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb @@ -1,11 +1,9 @@ -require 'action_controller/url_rewriter' - module Spec module Rails module Matchers - + class RedirectTo #:nodoc: - + def initialize(request, expected) @expected = expected @request = request @@ -42,17 +40,12 @@ module Spec def path_hash(url) path = url.sub(%r{^\w+://#{@request.host}}, "").split("?", 2)[0] - path = path.split("/")[1..-1] if ::Rails::VERSION::MINOR < 2 ActionController::Routing::Routes.recognize_path path end def query_hash(url) query = url.split("?", 2)[1] || "" - if defined?(CGIMethods) - CGIMethods.parse_query_parameters(query) - else - ActionController::AbstractRequest.parse_query_parameters(query) - end + QueryParameterParser.parse_query_parameters(query, @request) end def expected_url @@ -75,14 +68,24 @@ module Spec return %Q{expected redirect to #{@expected.inspect}, got no redirect} end end - + def negative_failure_message return %Q{expected not to be redirected to #{@expected.inspect}, but was} if @redirected end - + def description "redirect to #{@actual.inspect}" end + + class QueryParameterParser + def self.parse_query_parameters(query, request) + if defined?(CGIMethods) + CGIMethods.parse_query_parameters(query) + else + request.class.parse_query_parameters(query) + end + end + end end # :call-seq: diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb index b97040856..47043a07e 100644 --- a/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb +++ b/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb @@ -1,27 +1,23 @@ module Spec module Rails module VERSION #:nodoc: - unless defined?(REV) - # RANDOM_TOKEN: 0.510454315029681 - REV = "$LastChangedRevision: 2338 $".match(/LastChangedRevision: (\d+)/)[1] - end + BUILD_TIME_UTC = 20080114022430 end end end -# Verifies that the plugin has the same revision as RSpec -if Spec::VERSION::REV != Spec::Rails::VERSION::REV +# Verify that the plugin has the same revision as RSpec +if Spec::Rails::VERSION::BUILD_TIME_UTC != Spec::VERSION::BUILD_TIME_UTC raise <<-EOF ############################################################################ Your RSpec on Rails plugin is incompatible with your installed RSpec. -RSpec : #{Spec::VERSION::FULL_VERSION} -RSpec on Rails : r#{Spec::Rails::VERSION::REV} +RSpec : #{Spec::VERSION::BUILD_TIME_UTC} +RSpec on Rails : #{Spec::Rails::VERSION::BUILD_TIME_UTC} Make sure your RSpec on Rails plugin is compatible with your RSpec gem. See http://rspec.rubyforge.org/documentation/rails/install.html for details. ############################################################################ EOF end - diff --git a/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb index 8098be519..7a2658d2c 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb @@ -4,6 +4,7 @@ require File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "autotest", " describe Autotest::RailsRspec, "file mapping" do before(:each) do @autotest = Autotest::RailsRspec.new + @autotest.hook :initialize @autotest.output = StringIO.new @autotest.files.clear @autotest.last_mtime = Time.at(0) @@ -36,4 +37,5 @@ describe Autotest::RailsRspec, "file mapping" do it "should map view.html.erb" do ensure_mapping(['spec/views/things/index.html.erb_spec.rb'], 'app/views/things/index.html.erb') end + end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/assigns_hash_proxy_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/assigns_hash_proxy_spec.rb deleted file mode 100644 index 47532b3a2..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/assigns_hash_proxy_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -describe "An AssignsHashProxy" do - before(:each) do - @object = Object.new - @assigns = Hash.new - @object.stub!(:assigns).and_return(@assigns) - @proxy = Spec::Rails::DSL::AssignsHashProxy.new(@object) - end - - it "has [] accessor" do - @proxy['foo'] = 'bar' - @assigns['foo'].should == 'bar' - @proxy['foo'].should == 'bar' - end - - it "checks for string key before symbol key" do - @assigns[:foo] = 2 - @proxy[:foo].should == 2 - end - - it "checks for string key before symbol key" do - @assigns['foo'] = false - @assigns[:foo] = 2 - @proxy[:foo].should == false - end - - it "each method iterates through each element like a Hash" do - values = { - 'foo' => 1, - 'bar' => 2, - 'baz' => 3 - } - @proxy['foo'] = values['foo'] - @proxy['bar'] = values['bar'] - @proxy['baz'] = values['baz'] - - @proxy.each do |key, value| - key.should == key - value.should == values[key] - end - end - - it "delete method deletes the element of passed in key" do - @proxy['foo'] = 'bar' - @proxy.delete('foo').should == 'bar' - @proxy['foo'].should be_nil - end - - it "has_key? detects the presence of a key" do - @proxy['foo'] = 'bar' - @proxy.has_key?('foo').should == true - @proxy.has_key?('bar').should == false - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/behaviour_factory_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/behaviour_factory_spec.rb deleted file mode 100644 index 84d43bfcd..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/behaviour_factory_spec.rb +++ /dev/null @@ -1,73 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -describe "the BehaviourFactory" do - it "should return a ModelBehaviour when given :behaviour_type => :model" do - Spec::DSL::BehaviourFactory.create("name", :behaviour_type => :model) { - }.should be_an_instance_of(Spec::Rails::DSL::ModelBehaviour) - end - - it "should return a ModelBehaviour when given :spec_path => '/blah/spec/models/'" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '/blah/spec/models/blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::ModelBehaviour) - end - - it "should return a ModelBehaviour when given :spec_path => '\\blah\\spec\\models\\' (windows format)" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '\\blah\\spec\\models\\blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::ModelBehaviour) - end - - it "should return a ViewBehaviour when given :behaviour_type => :model" do - Spec::DSL::BehaviourFactory.create("name", :behaviour_type => :view) { - }.should be_an_instance_of(Spec::Rails::DSL::ViewBehaviour) - end - - it "should return a ViewBehaviour when given :spec_path => '/blah/spec/views/'" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '/blah/spec/views/blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::ViewBehaviour) - end - - it "should return a ModelBehaviour when given :spec_path => '\\blah\\spec\\views\\' (windows format)" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '\\blah\\spec\\views\\blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::ViewBehaviour) - end - - it "should return a HelperBehaviour when given :behaviour_type => :helper" do - Spec::DSL::BehaviourFactory.create("name", :behaviour_type => :helper) { - }.should be_an_instance_of(Spec::Rails::DSL::HelperBehaviour) - end - - it "should return a HelperBehaviour when given :spec_path => '/blah/spec/helpers/'" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '/blah/spec/helpers/blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::HelperBehaviour) - end - - it "should return a ModelBehaviour when given :spec_path => '\\blah\\spec\\helpers\\' (windows format)" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '\\blah\\spec\\helpers\\blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::HelperBehaviour) - end - - it "should return a ControllerBehaviour when given :behaviour_type => :controller" do - Spec::DSL::BehaviourFactory.create("name", :behaviour_type => :controller) { - }.should be_an_instance_of(Spec::Rails::DSL::ControllerBehaviour) - end - - it "should return a ControllerBehaviour when given :spec_path => '/blah/spec/controllers/'" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '/blah/spec/controllers/blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::ControllerBehaviour) - end - - it "should return a ModelBehaviour when given :spec_path => '\\blah\\spec\\controllers\\' (windows format)" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '\\blah\\spec\\controllers\\blah.rb') { - }.should be_an_instance_of(Spec::Rails::DSL::ControllerBehaviour) - end - - it "should favor the :behaviour_type over the :spec_path" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '/blah/spec/models/blah.rb', :behaviour_type => :controller) { - }.should be_an_instance_of(Spec::Rails::DSL::ControllerBehaviour) - end - - it "should create a Spec::DSL::Behaviour if :shared => true" do - Spec::DSL::BehaviourFactory.create("name", :spec_path => '/blah/spec/models/blah.rb', :behaviour_type => :controller, :shared => true) { - }.should be_an_instance_of(Spec::DSL::Behaviour) - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/configuration_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/configuration_spec.rb deleted file mode 100644 index 4984222e1..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/configuration_spec.rb +++ /dev/null @@ -1,56 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - describe Configuration do - before(:each) { @config = Configuration.new } - - it "should default use_transactional_fixtures to true" do - @config.use_transactional_fixtures.should be(true) - end - - it "should let you set use_transactional_fixtures false" do - @config.use_transactional_fixtures = false - @config.use_transactional_fixtures.should be(false) - end - - it "should let you set use_transactional_fixtures true" do - @config.use_transactional_fixtures = true - @config.use_transactional_fixtures.should be(true) - end - - it "should default use_instantiated_fixtures to false" do - @config.use_instantiated_fixtures.should be(false) - end - - it "should let you set use_instantiated_fixtures false" do - @config.use_instantiated_fixtures = false - @config.use_instantiated_fixtures.should be(false) - end - - it "should let you set use_instantiated_fixtures true" do - @config.use_instantiated_fixtures = true - @config.use_instantiated_fixtures.should be(true) - end - - it "should default fixture_path to RAILS_ROOT + '/spec/fixtures'" do - @config.fixture_path.should == RAILS_ROOT + '/spec/fixtures' - end - - it "should let you set fixture_path false" do - @config.fixture_path = "/new/path" - @config.fixture_path.should == "/new/path" - end - - it "should default global_fixtures to []" do - @config.global_fixtures.should == [] - end - - it "should let you set global_fixtures false" do - @config.global_fixtures << :blah - @config.global_fixtures.should == [:blah] - end - - end - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/controller_isolation_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/controller_isolation_spec.rb deleted file mode 100644 index 0c0eea1d8..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/controller_isolation_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' -require 'controller_spec_controller' - -describe "a controller spec running in isolation mode", :behaviour_type => :controller do - controller_name :controller_spec - - it "should not care if the template doesn't exist" do - get 'some_action' - response.should be_success - response.should render_template("template/that/does/not/actually/exist") - end - - it "should not care if the template has errors" do - get 'action_with_errors_in_template' - response.should be_success - response.should render_template("action_with_errors_in_template") - end -end - -describe "a controller spec running in integration mode", :behaviour_type => :controller do - controller_name :controller_spec - integrate_views - - before(:each) do - controller.class.send(:define_method, :rescue_action) { |e| raise e } - end - - it "should render a template" do - get 'action_with_template' - response.should be_success - response.should have_tag('div', 'This is action_with_template.rhtml') - end - - it "should choke if the template doesn't exist" do - lambda { get 'some_action' }.should raise_error(ActionController::MissingTemplate) - response.should_not be_success - end - - it "should choke if the template has errors" do - lambda { get 'action_with_errors_in_template' }.should raise_error(ActionView::TemplateError) - response.should_not be_success - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/controller_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/controller_spec_spec.rb deleted file mode 100644 index bfe7ea638..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/controller_spec_spec.rb +++ /dev/null @@ -1,158 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' -require 'controller_spec_controller' - -['integration', 'isolation'].each do |mode| - describe "A controller example running in #{mode} mode", :behaviour_type => :controller do - controller_name :controller_spec - integrate_views if mode == 'integration' - - it "should provide controller.session as session" do - get 'action_with_template' - session.should equal(controller.session) - end - - it "should provide the same session object before and after the action" do - session_before = session - get 'action_with_template' - session.should equal(session_before) - end - - it "should ensure controller.session is NOT nil before the action" do - controller.session.should_not be_nil - get 'action_with_template' - end - - it "should ensure controller.session is NOT nil after the action" do - get 'action_with_template' - controller.session.should_not be_nil - end - - it "should allow specifying a partial with partial name only" do - get 'action_with_partial' - response.should render_template("_partial") - end - - it "should allow specifying a partial with expect_render" do - controller.expect_render(:partial => "controller_spec/partial") - get 'action_with_partial' - end - - it "should allow specifying a partial with expect_render with object" do - controller.expect_render(:partial => "controller_spec/partial", :object => "something") - get 'action_with_partial_with_object', :thing => "something" - end - - it "should allow specifying a partial with expect_render with locals" do - controller.expect_render(:partial => "controller_spec/partial", :locals => {:thing => "something"}) - get 'action_with_partial_with_locals', :thing => "something" - end - - it "should allow a path relative to RAILS_ROOT/app/views/ when specifying a partial" do - get 'action_with_partial' - response.should render_template("controller_spec/_partial") - end - - it "should provide access to flash" do - get 'action_with_template' - flash[:flash_key].should == "flash value" - end - - it "should provide access to flash values set after a session reset" do - get 'action_setting_flash_after_session_reset' - flash[:after_reset].should == "available" - end - - it "should not provide access to flash values set before a session reset" do - get 'action_setting_flash_before_session_reset' - flash[:before_reset].should_not == "available" - end - - it "should provide access to session" do - get 'action_with_template' - session[:session_key].should == "session value" - end - - it "should support custom routes" do - route_for(:controller => "custom_route_spec", :action => "custom_route").should == "/custom_route" - end - - it "should support existing routes" do - route_for(:controller => "controller_spec", :action => "some_action").should == "/controller_spec/some_action" - end - - it "should expose the assigns hash directly" do - get 'action_setting_the_assigns_hash' - assigns[:direct_assigns_key].should == :direct_assigns_key_value - end - - it "should complain when calling should_receive(:render) on the controller" do - lambda { - controller.should_receive(:render) - }.should raise_error(RuntimeError, /should_receive\(:render\) has been disabled/) - end - - it "should complain when calling stub!(:render) on the controller" do - lambda { - controller.stub!(:render) - }.should raise_error(RuntimeError, /stub!\(:render\) has been disabled/) - end - - it "should NOT complain when calling should_receive with arguments other than :render" do - controller.should_receive(:anything_besides_render) - lambda { - controller.rspec_verify - }.should raise_error(Exception, /expected :anything_besides_render/) - end - end - - describe "Given a controller spec for RedirectSpecController running in #{mode} mode", :behaviour_type => :controller do - controller_name :redirect_spec - integrate_views if mode == 'integration' - - it "a redirect should ignore the absence of a template" do - get 'action_with_redirect_to_somewhere' - response.should be_redirect - response.redirect_url.should == "http://test.host/redirect_spec/somewhere" - response.should redirect_to("http://test.host/redirect_spec/somewhere") - end - - it "a call to response.should redirect_to should fail if no redirect" do - get 'action_with_no_redirect' - lambda { - response.redirect?.should be_true - }.should fail - lambda { - response.should redirect_to("http://test.host/redirect_spec/somewhere") - }.should fail_with("expected redirect to \"http://test.host/redirect_spec/somewhere\", got no redirect") - end - end - - describe "Given a controller spec running in #{mode} mode", :behaviour_type => :controller do - integrate_views if mode == 'integration' - it "a spec in a context without controller_name set should fail with a useful warning", - :should_raise => [ - Spec::Expectations::ExpectationNotMetError, - /You have to declare the controller name in controller specs/ - ] do - end - end - -end - -describe ControllerSpecController, :behaviour_type => :controller do - it "should not require naming the controller if describe is passed a type" do - end -end - -module Spec - module Rails - module DSL - describe ControllerBehaviour do - it "should tell you its behaviour_type is :controller" do - behaviour = ControllerBehaviour.new("") {} - behaviour.behaviour_type.should == :controller - end - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/helper_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/helper_spec_spec.rb deleted file mode 100755 index 102e06097..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/helper_spec_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' -Spec::Runner.configuration.global_fixtures = :people - -describe "HelperBehaviour", :behaviour_type => :helper do - helper_name :explicit - - it "should have direct access to methods defined in helpers" do - method_in_explicit_helper.should =~ /text from a method/ - end -end - - -describe "HelperBehaviour#eval_erb", :behaviour_type => :helper do - helper_name :explicit - - it "should support methods that accept blocks" do - eval_erb("<% prepend 'foo' do %>bar<% end %>").should == "foobar" - end -end - -describe "HelperBehaviour.fixtures", :behaviour_type => :helper do - helper_name :explicit - fixtures :animals - - it "loads fixtures" do - pig = animals(:pig) - pig.class.should == Animal - end - - it "loads global fixtures" do - lachie = people(:lachie) - lachie.class.should == Person - end -end - -describe "HelperBehaviour included modules", :behaviour_type => :helper do - helpers = [ - ActionView::Helpers::ActiveRecordHelper, - ActionView::Helpers::AssetTagHelper, - ActionView::Helpers::BenchmarkHelper, - ActionView::Helpers::CacheHelper, - ActionView::Helpers::CaptureHelper, - ActionView::Helpers::DateHelper, - ActionView::Helpers::DebugHelper, - ActionView::Helpers::FormHelper, - ActionView::Helpers::FormOptionsHelper, - ActionView::Helpers::FormTagHelper, - ActionView::Helpers::JavaScriptHelper, - ActionView::Helpers::JavaScriptMacrosHelper, - ActionView::Helpers::NumberHelper, - ActionView::Helpers::PrototypeHelper, - ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods, - ActionView::Helpers::ScriptaculousHelper, - ActionView::Helpers::TagHelper, - ActionView::Helpers::TextHelper, - ActionView::Helpers::UrlHelper - ] - helpers << ActionView::Helpers::PaginationHelper unless ENV['RSPEC_RAILS_VERSION'] == 'edge' - helpers.each do |helper_module| - it "should include #{helper_module}" do - self.class.ancestors.should include(helper_module) - end - end -end - -describe ExplicitHelper, :behaviour_type => :helper do - it "should not require naming the helper if describe is passed a type" do - method_in_explicit_helper.should match(/text from a method/) - end -end - -module Spec - module Rails - module DSL - describe HelperBehaviour do - it "should tell you its behaviour_type is :helper" do - behaviour = HelperBehaviour.new("") {} - behaviour.behaviour_type.should == :helper - end - end - end - end -end - -module Bug11223 - # see http://rubyforge.org/tracker/index.php?func=detail&aid=11223&group_id=797&atid=3149 - describe 'Accessing flash from helper spec', :behaviour_type => :helper do - it 'should not raise an error' do - lambda { flash['test'] }.should_not raise_error - end - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/ivar_proxy_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/ivar_proxy_spec.rb deleted file mode 100644 index c2558d78d..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/ivar_proxy_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -describe "IvarProxy setup", :shared => true do - before do - @object = Object.new - @proxy = Spec::Rails::DSL::IvarProxy.new(@object) - end -end - -describe "IvarProxy" do - it_should_behave_like "IvarProxy setup" - - it "has [] accessor" do - @proxy['foo'] = 'bar' - @object.instance_variable_get(:@foo).should == 'bar' - @proxy['foo'].should == 'bar' - end - - it "iterates through each element like a Hash" do - values = { - 'foo' => 1, - 'bar' => 2, - 'baz' => 3 - } - @proxy['foo'] = values['foo'] - @proxy['bar'] = values['bar'] - @proxy['baz'] = values['baz'] - - @proxy.each do |key, value| - key.should == key - value.should == values[key] - end - end - - it "detects the presence of a key" do - @proxy['foo'] = 'bar' - @proxy.has_key?('foo').should == true - @proxy.has_key?('bar').should == false - end -end - -describe "IvarProxy", "#delete" do - it_should_behave_like "IvarProxy setup" - - it "deletes the element with key" do - @proxy['foo'] = 'bar' - @proxy.delete('foo').should == 'bar' - @proxy['foo'].should be_nil - end - - it "deletes nil instance variables" do - @proxy['foo'] = nil - @object.instance_variables.should include("@foo") - @proxy.delete('foo').should == nil - @proxy['foo'].should be_nil - @object.instance_variables.should_not include("@foo") - end - - it "returns nil when key does not exist" do - @proxy['foo'].should be_nil - @proxy.delete('foo').should == nil - @proxy['foo'].should be_nil - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/model_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/model_spec_spec.rb deleted file mode 100644 index 789b50d82..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/model_spec_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Rails - module DSL - describe ModelBehaviour do - it "should tell you its behaviour_type is :model" do - behaviour = ModelBehaviour.new("") {} - behaviour.behaviour_type.should == :model - end - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/shared_behaviour_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/shared_behaviour_spec.rb deleted file mode 100755 index 20461f02e..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/shared_behaviour_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -describe "A shared view behaviour", :shared => true do - it "should have some tag with some text" do - response.should have_tag('div', 'This is text from a method in the ViewSpecHelper') - end -end - -describe "A view behaviour", :behaviour_type => :view do - it_should_behave_like "A shared view behaviour" - - before(:each) do - render "view_spec/implicit_helper" - end -end - diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/test_unit_assertion_accessibility_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/test_unit_assertion_accessibility_spec.rb deleted file mode 100644 index 18eb50593..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/test_unit_assertion_accessibility_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -['model','view','helper'].each do |context| - describe "A #{context} spec should be able to access 'test/unit' assertions", :behaviour_type => context.to_sym do - - it "like assert_equal" do - assert_equal 1, 1 - lambda { - assert_equal 1, 2 - }.should raise_error(Test::Unit::AssertionFailedError) - end - - end -end - -['integration', 'isolation'].each do |mode| - describe "A controller spec in #{mode} mode should be able to access 'test/unit' assertions", :behaviour_type => :controller do - controller_name :controller_spec - integrate_views if mode == 'integration' - - it "like assert_equal" do - assert_equal 1, 1 - lambda { - assert_equal 1, 2 - }.should raise_error(Test::Unit::AssertionFailedError) - end - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/dsl/view_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/dsl/view_spec_spec.rb deleted file mode 100644 index 65aa6b8bd..000000000 --- a/vendor/plugins/rspec_on_rails/spec/rails/dsl/view_spec_spec.rb +++ /dev/null @@ -1,240 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -describe "A template with an implicit helper", :behaviour_type => :view do - before(:each) do - render "view_spec/implicit_helper" - end - - it "should include the helper" do - response.should have_tag('div', :content => "This is text from a method in the ViewSpecHelper") - end - - it "should include the application helper" do - response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper") - end -end - -describe "A template requiring an explicit helper", :behaviour_type => :view do - before(:each) do - render "view_spec/explicit_helper", :helper => 'explicit' - end - - it "should include the helper if specified" do - response.should have_tag('div', :content => "This is text from a method in the ExplicitHelper") - end - - it "should include the application helper" do - response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper") - end -end - -describe "A template requiring multiple explicit helpers", :behaviour_type => :view do - before(:each) do - render "view_spec/multiple_helpers", :helpers => ['explicit', 'more_explicit'] - end - - it "should include all specified helpers" do - response.should have_tag('div', :content => "This is text from a method in the ExplicitHelper") - response.should have_tag('div', :content => "This is text from a method in the MoreExplicitHelper") - end - - it "should include the application helper" do - response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper") - end -end - -describe "Message Expectations on helper methods", :behaviour_type => :view do - it "should work" do - template.should_receive(:method_in_plugin_application_helper).and_return('alternate message 1') - render "view_spec/implicit_helper" - response.body.should =~ /alternate message 1/ - end - - it "should work twice" do - template.should_receive(:method_in_plugin_application_helper).and_return('alternate message 2') - render "view_spec/implicit_helper" - response.body.should =~ /alternate message 2/ - end -end - -describe "A template that includes a partial", :behaviour_type => :view do - def render! - render "view_spec/template_with_partial" - end - - it "should render the enclosing template" do - render! - response.should have_tag('div', "method_in_partial in ViewSpecHelper") - end - - it "should render the partial" do - render! - response.should have_tag('div', "method_in_template_with_partial in ViewSpecHelper") - end - - it "should include the application helper" do - render! - response.should have_tag('div', "This is text from a method in the ApplicationHelper") - end - - it "should pass expect_render with the right partial" do - template.expect_render(:partial => 'partial') - render! - template.verify_rendered - end - - it "should fail expect_render with the wrong partial" do - template.expect_render(:partial => 'non_existent') - render! - begin - template.verify_rendered - rescue Spec::Mocks::MockExpectationError => e - ensure - e.backtrace.find{|line| line =~ /view_spec_spec\.rb\:87/}.should_not be_nil - end - end - - it "should pass expect_render when a partial is expected twice and happens twice" do - template.expect_render(:partial => 'partial_used_twice').twice - render! - template.verify_rendered - end - - it "should pass expect_render when a partial is expected once and happens twice" do - template.expect_render(:partial => 'partial_used_twice') - render! - begin - template.verify_rendered - rescue Spec::Mocks::MockExpectationError => e - ensure - e.backtrace.find{|line| line =~ /view_spec_spec\.rb\:104/}.should_not be_nil - end - end - - it "should fail expect_render with the right partial but wrong options" do - template.expect_render(:partial => 'partial', :locals => {:thing => Object.new}) - render! - lambda {template.verify_rendered}.should raise_error(Spec::Mocks::MockExpectationError) - end -end - -describe "A partial that includes a partial", :behaviour_type => :view do - it "should support expect_render with nested partial" do - obj = Object.new - template.expect_render(:partial => 'partial', :object => obj) - render :partial => "view_spec/partial_with_sub_partial", :locals => { :partial => obj } - end -end - -describe "A view that includes a partial using :collection and :spacer_template", :behaviour_type => :view do - it "should render the partial w/ spacer_tamplate" do - render "view_spec/template_with_partial_using_collection" - response.should have_tag('div',/method_in_partial/) - response.should have_tag('div',/ApplicationHelper/) - response.should have_tag('div',/ViewSpecHelper/) - response.should have_tag('hr#spacer') - end - - it "should render the partial w/ spacer_tamplate" do - template.expect_render(:partial => 'partial', - :collection => ['Alice', 'Bob'], - :spacer_template => 'spacer') - render "view_spec/template_with_partial_using_collection" - end - -end - -describe "A view that includes a partial using an array as partial_path", :behaviour_type => :view do - before(:each) do - module ActionView::Partials - def render_template_with_partial_with_array_support(partial_path, local_assigns = nil, deprecated_local_assigns = nil) - if partial_path.is_a?(Array) - "Array Partial" - else - render_partial_without_array_support(partial_path, local_assigns, deprecated_local_assigns) - end - end - - alias :render_partial_without_array_support :render_partial - alias :render_partial :render_template_with_partial_with_array_support - end - - @array = ['Alice', 'Bob'] - assigns[:array] = @array - end - - after(:each) do - module ActionView::Partials - alias :render_template_with_partial_with_array_support :render_partial - alias :render_partial :render_partial_without_array_support - undef render_template_with_partial_with_array_support - end - end - - it "should render have the array passed through to render_partial without modification" do - render "view_spec/template_with_partial_with_array" - response.body.should match(/^Array Partial$/) - end -end - -describe "Different types of renders (not :template)", :behaviour_type => :view do - it "should render partial with local" do - render :partial => "view_spec/partial_with_local_variable", :locals => {:x => "Ender"} - response.should have_tag('div', :content => "Ender") - end -end - -describe "A view", :behaviour_type => :view do - before(:each) do - session[:key] = "session" - params[:key] = "params" - flash[:key] = "flash" - render "view_spec/accessor" - end - - it "should have access to session data" do - response.should have_tag("div#session", "session") - end - - specify "should have access to params data" do - response.should have_tag("div#params", "params") - end - - it "should have access to flash data" do - response.should have_tag("div#flash", "flash") - end -end - -describe "A view with a form_tag", :behaviour_type => :view do - it "should render the right action" do - render "view_spec/entry_form" - response.should have_tag("form[action=?]","/view_spec/entry_form") - end -end - -describe "An instantiated ViewExampleController", :behaviour_type => :view do - before do - render "view_spec/foo/show" - end - - it "should return the name of the real controller that it replaces" do - @controller.controller_name.should == 'foo' - end - - it "should return the path of the real controller that it replaces" do - @controller.controller_path.should == 'view_spec/foo' - end -end - -module Spec - module Rails - module DSL - describe ViewBehaviour do - it "should tell you its behaviour_type is :view" do - behaviour = ViewBehaviour.new("") {} - behaviour.behaviour_type.should == :view - end - end - end - end -end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb index 60fb153da..9d3e759b2 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb @@ -1,14 +1,17 @@ require File.dirname(__FILE__) + '/../../spec_helper' require 'spec/mocks/errors' -describe ActionView::Base, "with RSpec extensions", :behaviour_type => :view do +describe ActionView::Base, "with RSpec extensions", :type => :view do it "should not raise when render has been received" do template.expect_render(:partial => "name") template.render :partial => "name" end - it "should raise when render has NOT been received", :should_raise => [Spec::Mocks::MockExpectationError] do + it "should raise when render has NOT been received" do template.expect_render(:partial => "name") + lambda { + template.verify_rendered + }.should raise_error end it "should not raise when stubbing and render has been received" do @@ -21,6 +24,14 @@ describe ActionView::Base, "with RSpec extensions", :behaviour_type => :view do end it "should not raise when stubbing and render has been received with different options" do - template.stub_render(:partial => "different_name") + template.stub_render(:partial => "name") + template.render :partial => "view_spec/spacer" + end + + it "should not raise when stubbing and expecting and render has been received" do + template.stub_render(:partial => "name") + template.expect_render(:partial => "name") + template.render(:partial => "name") end + end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb index cc4bb90e8..95d43b25b 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb @@ -1,10 +1,7 @@ require File.dirname(__FILE__) + '/../../spec_helper' -class Thing < ActiveRecord::Base - validates_presence_of :name -end - describe "A model" do + fixtures :things it "should tell you its required fields" do Thing.new.should have(1).error_on(:name) end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb index dd9604c08..bdc8cf0b8 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb @@ -69,6 +69,13 @@ module AssertSelectSpecHelpers get :xml end + def first_non_rspec_line_in_backtrace_of(error) + rspec_path = File.join('rspec', 'lib', 'spec') + error.backtrace.reject { |line| + line =~ /#{rspec_path}/ + }.first + end + private # necessary for 1.2.1 def clear_response @@ -80,7 +87,7 @@ unless defined?(SpecFailed) SpecFailed = Spec::Expectations::ExpectationNotMetError end -describe "should have_tag", :behaviour_type => :controller do +describe "should have_tag", :type => :controller do include AssertSelectSpecHelpers controller_name :assert_select integrate_views @@ -226,8 +233,44 @@ describe "should have_tag", :behaviour_type => :controller do }.should raise_error(SpecFailed) end - it "should should report the correct line number for a nested failure" do - pending("bug report: http://rubyforge.org/tracker/index.php?func=detail&aid=11602&group_id=797&atid=3149") do + it "should report the correct line number for a nested failed expectation" do + render_html %Q{ + <form action="test"> + <input type="text" name="email"> + </form> + } + begin + response.should have_tag("form[action=test]") { + @expected_error_line = __LINE__; should have_tag("input[type=text][name=other_input]") + } + rescue => e + first_non_rspec_line_in_backtrace_of(e).should =~ + /#{File.basename(__FILE__)}:#{@expected_error_line}/ + else + fail + end + end + + it "should report the correct line number for a nested raised exception" do + render_html %Q{ + <form action="test"> + <input type="text" name="email"> + </form> + } + begin + response.should have_tag("form[action=test]") { + @expected_error_line = __LINE__; raise "Failed!" + } + rescue => e + first_non_rspec_line_in_backtrace_of(e).should =~ + /#{File.basename(__FILE__)}:#{@expected_error_line}/ + else + fail + end + end + + it "should report the correct line number for a nested failed test/unit assertion" do + pending "Doesn't work at the moment. Do we want to support this?" do render_html %Q{ <form action="test"> <input type="text" name="email"> @@ -235,13 +278,17 @@ describe "should have_tag", :behaviour_type => :controller do } begin response.should have_tag("form[action=test]") { - with_tag("input[type=text][name=other_input]") + @expected_error_line = __LINE__; assert false } rescue => e - e.backtrace[3].to_s.should =~ /assert_select_spec.rb:238/ + first_non_rspec_line_in_backtrace_of(e).should =~ + /#{File.basename(__FILE__)}:#{@expected_error_line}/ + else + fail end end end + it "beatles" do unless defined?(BEATLES) @@ -358,7 +405,7 @@ describe "should have_tag", :behaviour_type => :controller do end end -describe "css_select", :behaviour_type => :controller do +describe "css_select", :type => :controller do include AssertSelectSpecHelpers controller_name :assert_select integrate_views @@ -409,7 +456,7 @@ describe "css_select", :behaviour_type => :controller do end -describe "have_rjs behaviour", :behaviour_type => :controller do +describe "have_rjs behaviour_type", :type => :controller do include AssertSelectSpecHelpers controller_name :assert_select integrate_views @@ -584,7 +631,7 @@ describe "have_rjs behaviour", :behaviour_type => :controller do end end -describe "send_email behaviour", :behaviour_type => :controller do +describe "send_email behaviour_type", :type => :controller do include AssertSelectSpecHelpers controller_name :assert_select integrate_views @@ -628,7 +675,7 @@ describe "send_email behaviour", :behaviour_type => :controller do end # describe "An rjs call to :visual_effect, a 'should have_rjs' spec with", -# :behaviour_type => :view do +# :type => :view do # # before do # render 'rjs_spec/visual_effect' @@ -653,7 +700,7 @@ end # end # # describe "An rjs call to :visual_effect for a toggle, a 'should have_rjs' spec with", -# :behaviour_type => :view do +# :type => :view do # # before do # render 'rjs_spec/visual_toggle_effect' @@ -677,7 +724,7 @@ end # # end -describe "string.should have_tag", :behaviour_type => :helper do +describe "string.should have_tag", :type => :helper do include AssertSelectSpecHelpers it "should find root element" do @@ -709,7 +756,7 @@ describe "string.should have_tag", :behaviour_type => :helper do end end -describe "have_tag", :behaviour_type => :controller do +describe "have_tag", :type => :controller do include AssertSelectSpecHelpers controller_name :assert_select integrate_views @@ -733,3 +780,4 @@ describe "have_tag", :behaviour_type => :controller do response.should have_tag("#wrapper .piece h3", :text => "Another") end end + diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb index 1a83da680..4fd2bcd1c 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb @@ -3,40 +3,35 @@ require File.dirname(__FILE__) + '/../../spec_helper' class DescriptionGenerationSpecController < ActionController::Base def render_action end - + def redirect_action redirect_to :action => :render_action end end -describe "Description generation", :behaviour_type => :controller do +describe "Description generation", :type => :controller do controller_name :description_generation_spec - before(:each) do - @desc = nil - @callback = lambda { |desc| @desc = desc } - Spec::Matchers.description_generated(@callback) - end after(:each) do - Spec::Matchers.unregister_description_generated(@callback) + Spec::Matchers.clear_generated_description end - + it "should generate description for render_template" do get 'render_action' response.should render_template("render_action") - @desc.should == "should render template \"render_action\"" + Spec::Matchers.generated_description.should == "should render template \"render_action\"" end - + it "should generate description for render_template with full path" do get 'render_action' response.should render_template("description_generation_spec/render_action") - @desc.should == "should render template \"description_generation_spec/render_action\"" + Spec::Matchers.generated_description.should == "should render template \"description_generation_spec/render_action\"" end - + it "should generate description for redirect_to" do get 'redirect_action' response.should redirect_to("http://test.host/description_generation_spec/render_action") - @desc.should == "should redirect to \"http://test.host/description_generation_spec/render_action\"" + Spec::Matchers.generated_description.should == "should redirect to \"http://test.host/description_generation_spec/render_action\"" end - + end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb index fdf6ea0ca..b3c7d7a86 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb @@ -1,7 +1,7 @@ require File.dirname(__FILE__) + '/../../spec_helper' ['isolation','integration'].each do |mode| - describe "redirect_to behaviour", :behaviour_type => :controller do + describe "redirect_to behaviour", :type => :controller do if mode == 'integration' integrate_views end @@ -84,7 +84,7 @@ require File.dirname(__FILE__) + '/../../spec_helper' end - describe "redirect_to with a controller spec in #{mode} mode and a custom request.host", :behaviour_type => :controller do + describe "redirect_to with a controller spec in #{mode} mode and a custom request.host", :type => :controller do if mode == 'integration' integrate_views end @@ -99,7 +99,7 @@ require File.dirname(__FILE__) + '/../../spec_helper' end end - describe "Given a controller spec in #{mode} mode", :behaviour_type => :controller do + describe "Given a controller spec in #{mode} mode", :type => :controller do if mode == 'integration' integrate_views end @@ -129,7 +129,7 @@ require File.dirname(__FILE__) + '/../../spec_helper' end - describe "Given a controller spec in #{mode} mode, should redirect_to should fail when", :behaviour_type => :controller do + describe "Given a controller spec in #{mode} mode, should redirect_to should fail when", :type => :controller do if mode == 'integration' integrate_views end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb index 029297c9a..5dbf576f1 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb @@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../../spec_helper' ['isolation','integration'].each do |mode| describe "response.should render_template (in #{mode} mode)", - :behaviour_type => :controller do + :type => :controller do controller_name :render_spec if mode == 'integration' integrate_views @@ -30,7 +30,8 @@ require File.dirname(__FILE__) + '/../../spec_helper' it "should match an rjs template" do xhr :post, 'some_action' - if ActionView::Base.const_defined?('DEFAULT_TEMPLATE_HANDLER_PREFERENCE') + if ActionView::Base.const_defined?('DEFAULT_TEMPLATE_HANDLER_PREFERENCE') || + ActionView::Base.respond_to?(:handler_for_extension) then response.should render_template('render_spec/some_action') else response.should render_template('render_spec/some_action.rjs') @@ -82,50 +83,4 @@ require File.dirname(__FILE__) + '/../../spec_helper' end.should fail_with("expected \"some_action\", got nil") end end - - describe "response.should have_text (in #{mode} mode)", - :behaviour_type => :controller do - controller_name :render_spec - if mode == 'integration' - integrate_views - end - - it "should pass with exactly matching text" do - post 'text_action' - response.should have_text("this is the text for this action") - end - - it "should pass with matching text (using Regexp)" do - post 'text_action' - response.should have_text(/is the text/) - end - - it "should fail with matching text" do - post 'text_action' - lambda { - response.should have_text("this is NOT the text for this action") - }.should fail_with("expected \"this is NOT the text for this action\", got \"this is the text for this action\"") - end - - it "should fail when a template is rendered" do - post 'some_action' - lambda { - response.should have_text("this is the text for this action") - }.should fail_with(/expected \"this is the text for this action\", got .*/) - end - end - - describe "response.should_not have_text (in #{mode} mode)", - :behaviour_type => :controller do - controller_name :render_spec - if mode == 'integration' - integrate_views - end - - it "should pass with exactly matching text" do - post 'text_action' - response.should_not have_text("the accordian guy") - end - end - end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb index 87981dbcf..76793f0a1 100644 --- a/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb +++ b/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb @@ -1,12 +1,17 @@ require File.dirname(__FILE__) + '/../../spec_helper' class MockableModel < ActiveRecord::Base + has_one :associated_model end class SubMockableModel < MockableModel end -describe "mock_model", :behaviour_type => :view do +class AssociatedModel < ActiveRecord::Base + belongs_to :mockable_model +end + +describe "mock_model", :type => :view do before(:each) do @model = mock_model(SubMockableModel) end @@ -29,3 +34,32 @@ describe "mock_model", :behaviour_type => :view do @model.instance_of?(MockableModel).should be(false) end end + +describe "mock_model with null_object", :type => :view do + before(:each) do + @model = mock_model(MockableModel, :null_object => true, :mocked_method => "mocked") + end + + it "should be able to mock methods" do + @model.mocked_method.should == "mocked" + end + it "should return itself to unmocked methods" do + @model.unmocked_method.should equal(@model) + end +end + +describe "mock_model as association", :type => :view do + before(:each) do + @real = AssociatedModel.create! + @mock_model = mock_model(MockableModel) + @real.mockable_model = @mock_model + end + + it "should pass associated_model == mock" do + @mock_model.should == @real.mockable_model + end + + it "should pass mock == associated_model" do + @real.mockable_model.should == @mock_model + end +end diff --git a/vendor/plugins/rspec_on_rails/spec/spec_helper.rb b/vendor/plugins/rspec_on_rails/spec/spec_helper.rb index dc45b5ca7..2d2c7279f 100644 --- a/vendor/plugins/rspec_on_rails/spec/spec_helper.rb +++ b/vendor/plugins/rspec_on_rails/spec/spec_helper.rb @@ -1,25 +1,23 @@ dir = File.dirname(__FILE__) -$LOAD_PATH.unshift("#{dir}/../../../../../rspec/lib") -$LOAD_PATH.unshift("#{dir}/../spec_resources/controllers") -$LOAD_PATH.unshift("#{dir}/../spec_resources/helpers") -require "#{dir}/../../../../spec/spec_helper" -require "#{dir}/../spec_resources/controllers/render_spec_controller" -require "#{dir}/../spec_resources/controllers/rjs_spec_controller" -require "#{dir}/../spec_resources/controllers/redirect_spec_controller" -require "#{dir}/../spec_resources/controllers/action_view_base_spec_controller" -require "#{dir}/../spec_resources/helpers/explicit_helper" -require "#{dir}/../spec_resources/helpers/more_explicit_helper" -require "#{dir}/../spec_resources/helpers/view_spec_helper" -require "#{dir}/../spec_resources/helpers/plugin_application_helper" +$LOAD_PATH.unshift(File.expand_path("#{dir}/../rspec/lib")) +$LOAD_PATH.unshift(File.expand_path("#{dir}/../spec_resources/controllers")) +$LOAD_PATH.unshift(File.expand_path("#{dir}/../spec_resources/helpers")) +require File.expand_path("#{dir}/../../../../spec/spec_helper") +require File.expand_path("#{dir}/../spec_resources/controllers/render_spec_controller") +require File.expand_path("#{dir}/../spec_resources/controllers/rjs_spec_controller") +require File.expand_path("#{dir}/../spec_resources/controllers/redirect_spec_controller") +require File.expand_path("#{dir}/../spec_resources/controllers/action_view_base_spec_controller") +require File.expand_path("#{dir}/../spec_resources/helpers/explicit_helper") +require File.expand_path("#{dir}/../spec_resources/helpers/more_explicit_helper") +require File.expand_path("#{dir}/../spec_resources/helpers/view_spec_helper") +require File.expand_path("#{dir}/../spec_resources/helpers/plugin_application_helper") -if Rails::VERSION::MINOR >= 2 - ActionController::Routing.controller_paths << "#{dir}/../spec_resources/controllers" -end +ActionController::Routing.controller_paths << "#{dir}/../spec_resources/controllers" module Spec module Rails - module DSL - class ViewExampleController + module Example + class ViewExampleGroupController set_view_path File.join(File.dirname(__FILE__), "..", "spec_resources", "views") end end @@ -39,3 +37,10 @@ class Proc lambda { self.call }.should_not raise_error end end + +ActionController::Routing::Routes.draw do |map| + map.resources :rspec_on_rails_specs + map.connect 'custom_route', :controller => 'custom_route_spec', :action => 'custom_route' + map.connect ":controller/:action/:id" +end + diff --git a/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb b/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb index 1a7da6f6f..ce8bc186c 100644 --- a/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb +++ b/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb @@ -1,5 +1,9 @@ class ControllerSpecController < ActionController::Base - set_view_path File.join(File.dirname(__FILE__), "..", "views") + if ['edge','2.0.0'].include?(ENV['RSPEC_RAILS_VERSION']) + set_view_path [File.join(File.dirname(__FILE__), "..", "views")] + else + set_view_path File.join(File.dirname(__FILE__), "..", "views") + end def some_action render :template => "template/that/does/not/actually/exist" @@ -29,8 +33,9 @@ class ControllerSpecController < ActionController::Base def action_setting_the_assigns_hash assigns['direct_assigns_key'] = :direct_assigns_key_value + @indirect_assigns_key = :indirect_assigns_key_value end - + def action_setting_flash_after_session_reset reset_session flash[:after_reset] = "available" diff --git a/vendor/plugins/rspec_on_rails/tasks/rspec.rake b/vendor/plugins/rspec_on_rails/tasks/rspec.rake index c9536e86a..722854740 100644 --- a/vendor/plugins/rspec_on_rails/tasks/rspec.rake +++ b/vendor/plugins/rspec_on_rails/tasks/rspec.rake @@ -25,7 +25,9 @@ namespace :spec do t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] t.spec_files = FileList['spec/**/*_spec.rb'] t.rcov = true - t.rcov_opts = ['--exclude', 'spec', '--rails'] + t.rcov_opts = lambda do + IO.readlines("#{RAILS_ROOT}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten + end end desc "Print Specdoc for all specs (excluding plugin specs)" @@ -56,7 +58,7 @@ namespace :spec do namespace :plugins do desc "Runs the examples for rspec_on_rails" - Spec::Rake::SpecTask.new(:rspec_on_rails => spec_prereq) do |t| + Spec::Rake::SpecTask.new(:rspec_on_rails) do |t| t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] t.spec_files = FileList['vendor/plugins/rspec_on_rails/spec/**/*_spec.rb'] end @@ -72,14 +74,16 @@ namespace :spec do # Setup specs for stats task :statsetup do require 'code_statistics' - ::STATS_DIRECTORIES << %w(Model\ specs spec/models) - ::STATS_DIRECTORIES << %w(View\ specs spec/views) - ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) - ::STATS_DIRECTORIES << %w(Helper\ specs spec/views) - ::CodeStatistics::TEST_TYPES << "Model specs" - ::CodeStatistics::TEST_TYPES << "View specs" - ::CodeStatistics::TEST_TYPES << "Controller specs" - ::CodeStatistics::TEST_TYPES << "Helper specs" + ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models') + ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views') + ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) if File.exist?('spec/controllers') + ::STATS_DIRECTORIES << %w(Helper\ specs spec/helpers) if File.exist?('spec/helpers') + ::STATS_DIRECTORIES << %w(Library\ specs spec/lib) if File.exist?('spec/lib') + ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models') + ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views') + ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers') + ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers') + ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib') ::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/} end |