You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by as...@apache.org on 2008/05/03 02:14:05 UTC
svn commit: r652957 [3/4] - in /ode/sandbox/singleshot: ./ app/controllers/
app/helpers/ app/models/ config/ db/ db/migrate/ lib/tasks/
public/javascripts/ spec/controllers/ vendor/plugins/rspec_on_rails/
vendor/plugins/rspec_on_rails/generators/ vendo...
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,113 @@
+module Spec
+ module Rails
+ module Matchers
+
+ class RedirectTo #:nodoc:
+
+ def initialize(request, expected)
+ @expected = expected
+ @request = request
+ end
+
+ def matches?(response)
+ @redirected = response.redirect?
+ @actual = response.redirect_url
+ return false unless @redirected
+ if @expected.instance_of? Hash
+ return false unless @actual =~ %r{^\w+://#{@request.host}}
+ return false unless actual_redirect_to_valid_route
+ return actual_hash == expected_hash
+ else
+ return @actual == expected_url
+ end
+ end
+
+ def actual_hash
+ hash_from_url @actual
+ end
+
+ def expected_hash
+ hash_from_url expected_url
+ end
+
+ def actual_redirect_to_valid_route
+ actual_hash
+ end
+
+ def hash_from_url(url)
+ query_hash(url).merge(path_hash(url)).with_indifferent_access
+ end
+
+ def path_hash(url)
+ path = url.sub(%r{^\w+://#{@request.host}}, "").split("?", 2)[0]
+ ActionController::Routing::Routes.recognize_path path
+ end
+
+ def query_hash(url)
+ query = url.split("?", 2)[1] || ""
+ QueryParameterParser.parse_query_parameters(query, @request)
+ end
+
+ def expected_url
+ case @expected
+ when Hash
+ return ActionController::UrlRewriter.new(@request, {}).rewrite(@expected)
+ when :back
+ return @request.env['HTTP_REFERER']
+ when %r{^\w+://.*}
+ return @expected
+ else
+ return "http://#{@request.host}" + (@expected.split('')[0] == '/' ? '' : '/') + @expected
+ end
+ end
+
+ def failure_message
+ if @redirected
+ return %Q{expected redirect to #{@expected.inspect}, got redirect to #{@actual.inspect}}
+ else
+ 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:
+ # response.should redirect_to(url)
+ # response.should redirect_to(:action => action_name)
+ # response.should redirect_to(:controller => controller_name, :action => action_name)
+ # response.should_not redirect_to(url)
+ # response.should_not redirect_to(:action => action_name)
+ # response.should_not redirect_to(:controller => controller_name, :action => action_name)
+ #
+ # Passes if the response is a redirect to the url, action or controller/action.
+ # Useful in controller specs (integration or isolation mode).
+ #
+ # == Examples
+ #
+ # response.should redirect_to("path/to/action")
+ # response.should redirect_to("http://test.host/path/to/action")
+ # response.should redirect_to(:action => 'list')
+ def redirect_to(opts)
+ RedirectTo.new(request, opts)
+ end
+ end
+
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,70 @@
+module Spec
+ module Rails
+ module Matchers
+
+ class RenderTemplate #:nodoc:
+
+ def initialize(expected, controller)
+ @controller = controller
+ @expected = expected
+ end
+
+ def matches?(response)
+ @actual = response.rendered_file
+ full_path(@actual) == full_path(@expected)
+ end
+
+ def failure_message
+ "expected #{@expected.inspect}, got #{@actual.inspect}"
+ end
+
+ def negative_failure_message
+ "expected not to render #{@expected.inspect}, but did"
+ end
+
+ def description
+ "render template #{@expected.inspect}"
+ end
+
+ private
+ def full_path(path)
+ return nil if path.nil?
+ path.include?('/') ? path : "#{@controller.class.to_s.underscore.gsub('_controller','')}/#{path}"
+ end
+
+ end
+
+ # :call-seq:
+ # response.should render_template(path)
+ # response.should_not render_template(path)
+ #
+ # Passes if the specified template is rendered by the response.
+ # Useful in controller specs (integration or isolation mode).
+ #
+ # <code>path</code> can include the controller path or not. It
+ # can also include an optional extension (no extension assumes .rhtml).
+ #
+ # Note that partials must be spelled with the preceding underscore.
+ #
+ # == Examples
+ #
+ # response.should render_template('list')
+ # response.should render_template('same_controller/list')
+ # response.should render_template('other_controller/list')
+ #
+ # #rjs
+ # response.should render_template('list.rjs')
+ # response.should render_template('same_controller/list.rjs')
+ # response.should render_template('other_controller/list.rjs')
+ #
+ # #partials
+ # response.should render_template('_a_partial')
+ # response.should render_template('same_controller/_a_partial')
+ # response.should render_template('other_controller/_a_partial')
+ def render_template(path)
+ RenderTemplate.new(path.to_s, @controller)
+ end
+
+ end
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,71 @@
+# WARNING - THIS IS PURELY EXPERIMENTAL AT THIS POINT
+# Courtesy of Brian Takita and Yurii Rashkovskii
+
+$:.unshift File.join(File.dirname(__FILE__), *%w[.. .. .. .. rspec lib])
+if defined?(ActiveRecord::Base)
+ require 'test_help'
+else
+ require 'action_controller/test_process'
+ require 'action_controller/integration'
+end
+require 'test/unit/testresult'
+require 'spec'
+require 'spec/rails'
+
+Test::Unit.run = true
+
+ActionController::Integration::Session.send(:include, Spec::Matchers)
+ActionController::Integration::Session.send(:include, Spec::Rails::Matchers)
+
+class RailsStory < ActionController::IntegrationTest
+ if defined?(ActiveRecord::Base)
+ self.use_transactional_fixtures = true
+ else
+ def self.fixture_table_names; []; end # Workaround for projects that don't use ActiveRecord
+ end
+
+ def initialize #:nodoc:
+ # TODO - eliminate this hack, which is here to stop
+ # Rails Stories from dumping the example summary.
+ Spec::Runner::Options.class_eval do
+ def examples_should_be_run?
+ false
+ end
+ end
+ @_result = Test::Unit::TestResult.new
+ end
+end
+
+class ActiveRecordSafetyListener
+ include Singleton
+ def scenario_started(*args)
+ if defined?(ActiveRecord::Base)
+ ActiveRecord::Base.send :increment_open_transactions unless Rails::VERSION::STRING == "1.1.6"
+ ActiveRecord::Base.connection.begin_db_transaction
+ end
+ end
+
+ def scenario_succeeded(*args)
+ if defined?(ActiveRecord::Base)
+ ActiveRecord::Base.connection.rollback_db_transaction
+ ActiveRecord::Base.send :decrement_open_transactions unless Rails::VERSION::STRING == "1.1.6"
+ end
+ end
+ alias :scenario_pending :scenario_succeeded
+ alias :scenario_failed :scenario_succeeded
+end
+
+class Spec::Story::Runner::ScenarioRunner
+ def initialize
+ @listeners = [ActiveRecordSafetyListener.instance]
+ end
+end
+
+class Spec::Story::GivenScenario
+ def perform(instance, name = nil)
+ scenario = Spec::Story::Runner::StoryRunner.scenario_from_current_story @name
+ runner = Spec::Story::Runner::ScenarioRunner.new
+ runner.instance_variable_set(:@listeners,[])
+ runner.run(scenario, instance)
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,23 @@
+module Spec
+ module Rails
+ module VERSION #:nodoc:
+ BUILD_TIME_UTC = 20080131122909
+ end
+ end
+end
+
+# 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::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
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,36 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require File.join(File.dirname(__FILE__), *%w[.. .. .. lib autotest rails_rspec])
+require File.join(File.dirname(__FILE__), *%w[.. .. .. .. rspec spec autotest_matchers])
+
+describe Autotest::RailsRspec, "file mapping" do
+ before(:each) do
+ @autotest = Autotest::RailsRspec.new
+ @autotest.hook :initialize
+ end
+
+ it "should map model example to model" do
+ @autotest.should map_specs(['spec/models/thing_spec.rb']).
+ to('app/models/thing.rb')
+ end
+
+ it "should map controller example to controller" do
+ @autotest.should map_specs(['spec/controllers/things_controller_spec.rb']).
+ to('app/controllers/things_controller.rb')
+ end
+
+ it "should map view.rhtml" do
+ @autotest.should map_specs(['spec/views/things/index.rhtml_spec.rb']).
+ to('app/views/things/index.rhtml')
+ end
+
+ it "should map view.rhtml with underscores in example filename" do
+ @autotest.should map_specs(['spec/views/things/index_rhtml_spec.rb']).
+ to('app/views/things/index.rhtml')
+ end
+
+ it "should map view.html.erb" do
+ @autotest.should map_specs(['spec/views/things/index.html.erb_spec.rb']).
+ to('app/views/things/index.html.erb')
+ end
+
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,8 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "autotest", "rails_rspec")
+
+describe Autotest::RailsRspec do
+ it "should provide the correct spec_command" do
+ Autotest::RailsRspec.new.spec_command.should == "script/spec"
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,55 @@
+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::Example::AssignsHashProxy.new(@object)
+ end
+
+ it "has [] accessor" do
+ @proxy['foo'] = 'bar'
+ @assigns['foo'].should == 'bar'
+ @proxy['foo'].should == 'bar'
+ end
+
+ it "works for 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
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,83 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ describe Configuration, :shared => true do
+ before(:each) { @config = Configuration.new }
+ end
+
+ describe Configuration, "#use_transactional_fixtures" do
+ it_should_behave_like "Spec::Example::Configuration"
+
+ it "should return Test::Unit::TestCase.use_transactional_fixtures" do
+ @config.use_transactional_fixtures.should == Test::Unit::TestCase.use_transactional_fixtures
+ end
+
+ it "should set Test::Unit::TestCase.use_transactional_fixtures to false" do
+ Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
+ example_group.should_receive(:use_transactional_fixtures=).with(false)
+ end
+ @config.use_transactional_fixtures = false
+ end
+
+ it "should set Test::Unit::TestCase.use_transactional_fixtures to true" do
+ Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
+ example_group.should_receive(:use_transactional_fixtures=).with(true)
+ end
+ @config.use_transactional_fixtures = true
+ end
+ end
+
+ describe Configuration, "#use_instantiated_fixtures" do
+ it_should_behave_like "Spec::Example::Configuration"
+
+ it "should return Test::Unit::TestCase.use_transactional_fixtures" do
+ @config.use_instantiated_fixtures.should == Test::Unit::TestCase.use_instantiated_fixtures
+ end
+
+ it "should set Test::Unit::TestCase.use_instantiated_fixtures to false" do
+ Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
+ example_group.should_receive(:use_instantiated_fixtures=).with(false)
+ end
+ @config.use_instantiated_fixtures = false
+ end
+
+ it "should set Test::Unit::TestCase.use_instantiated_fixtures to true" do
+ Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
+ example_group.should_receive(:use_instantiated_fixtures=).with(true)
+ end
+ @config.use_instantiated_fixtures = true
+ end
+ end
+
+ describe Configuration, "#fixture_path" do
+ it_should_behave_like "Spec::Example::Configuration"
+
+ it "should default to RAILS_ROOT + '/spec/fixtures'" do
+ @config.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
+ Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
+ example_group.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
+ end
+ end
+
+ it "should set fixture_path" do
+ @config.fixture_path = "/new/path"
+ @config.fixture_path.should == "/new/path"
+ Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
+ example_group.fixture_path.should == "/new/path"
+ end
+ end
+ end
+
+ describe Configuration, "#global_fixtures" do
+ it_should_behave_like "Spec::Example::Configuration"
+
+ it "should set fixtures on TestCase" do
+ Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
+ example_group.should_receive(:fixtures).with(:blah)
+ end
+ @config.global_fixtures = [:blah]
+ end
+ end
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,43 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require 'controller_spec_controller'
+
+describe "a controller spec running in isolation mode", :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", :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
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,187 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require 'controller_spec_controller'
+
+['integration', 'isolation'].each do |mode|
+ describe "A controller example running in #{mode} mode", :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 yield to render :update" do
+ template = stub("template")
+ controller.expect_render(:update).and_yield(template)
+ template.should_receive(:replace).with(:bottom, "replace_me", :partial => "non_existent_partial")
+ get 'action_with_render_update'
+ puts response.body
+ 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 generate params for custom routes" do
+ params_from(:get, '/custom_route').should == {:controller => "custom_route_spec", :action => "custom_route"}
+ end
+
+ it "should generate params for existing routes" do
+ params_from(:get, '/controller_spec/some_action').should == {:controller => "controller_spec", :action => "some_action"}
+ end
+
+ it "should expose instance vars through the assigns hash" do
+ get 'action_setting_the_assigns_hash'
+ assigns[:indirect_assigns_key].should == :indirect_assigns_key_value
+ 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", :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" do
+ example_group = describe "A controller spec"
+ # , :type => :controller do
+ # integrate_views if mode == 'integration'
+ it "a spec in a context without controller_name set should fail with a useful warning" do
+ pending("need a new way to deal with examples that should_raise")
+ # ,
+ # :should_raise => [
+ # Spec::Expectations::ExpectationNotMetError,
+ # /You have to declare the controller name in controller specs/
+ # ] do
+ end
+ end
+
+end
+
+describe ControllerSpecController, :type => :controller do
+ it "should not require naming the controller if describe is passed a type" do
+ end
+end
+
+module Spec
+ module Rails
+ module Example
+ describe ControllerExampleGroup do
+ it "should clear its name from the description" do
+ group = describe("foo", :type => :controller) do
+ $nested_group = describe("bar") do
+ end
+ end
+ group.description.to_s.should == "foo"
+ $nested_group.description.to_s.should == "foo bar"
+ end
+ end
+ end
+ end
+end
\ No newline at end of file
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,112 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ describe ExampleGroupFactory do
+ it "should return a ModelExampleGroup when given :type => :model" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :type => :model
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
+ end
+
+ it "should return a ModelExampleGroup when given :spec_path => '/blah/spec/models/'" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/models/blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
+ end
+
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\models\\' (windows format)" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '\\blah\\spec\\models\\blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
+ end
+
+ it "should return a RailsExampleGroup when given :spec_path => '/blah/spec/foo/' (anything other than controllers, views and helpers)" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/foo/blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::RailsExampleGroup
+ end
+
+ it "should return a RailsExampleGroup when given :spec_path => '\\blah\\spec\\foo\\' (windows format) (anything other than controllers, views and helpers)" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '\\blah\\spec\\foo\\blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::RailsExampleGroup
+ end
+
+ it "should return a ViewExampleGroup when given :type => :model" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :type => :view
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
+ end
+
+ it "should return a ViewExampleGroup when given :spec_path => '/blah/spec/views/'" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/views/blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
+ end
+
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\views\\' (windows format)" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '\\blah\\spec\\views\\blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
+ end
+
+ it "should return a HelperExampleGroup when given :type => :helper" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :type => :helper
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
+ end
+
+ it "should return a HelperExampleGroup when given :spec_path => '/blah/spec/helpers/'" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/helpers/blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
+ end
+
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\helpers\\' (windows format)" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '\\blah\\spec\\helpers\\blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
+ end
+
+ it "should return a ControllerExampleGroup when given :type => :controller" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :type => :controller
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
+ end
+
+ it "should return a ControllerExampleGroup when given :spec_path => '/blah/spec/controllers/'" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/controllers/blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
+ end
+
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\controllers\\' (windows format)" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '\\blah\\spec\\controllers\\blah.rb'
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
+ end
+
+ it "should favor the :type over the :spec_path" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller
+ ) {}
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
+ end
+ end
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,118 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+Spec::Runner.configuration.global_fixtures = :people
+
+describe ExplicitHelper, :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 Example
+ describe HelperExampleGroup, :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
+
+ it "should have access to named routes" do
+ rspec_on_rails_specs_url.should == "http://test.host/rspec_on_rails_specs"
+ rspec_on_rails_specs_path.should == "/rspec_on_rails_specs"
+ end
+
+ it "should fail if the helper method deson't exist" do
+ lambda { non_existant_helper_method }.should raise_error(NameError)
+ end
+ end
+
+
+ describe HelperExampleGroup, "#eval_erb", :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 HelperExampleGroup, ".fixtures", :type => :helper do
+ helper_name :explicit
+ fixtures :animals
+
+ it "should load fixtures" do
+ pig = animals(:pig)
+ pig.class.should == Animal
+ end
+
+ it "should load global fixtures" do
+ lachie = people(:lachie)
+ lachie.class.should == Person
+ end
+ end
+
+ describe HelperExampleGroup, "included modules", :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::NumberHelper,
+ ActionView::Helpers::PrototypeHelper,
+ ActionView::Helpers::ScriptaculousHelper,
+ ActionView::Helpers::TagHelper,
+ ActionView::Helpers::TextHelper,
+ ActionView::Helpers::UrlHelper
+ ]
+ helpers << ActionView::Helpers::PaginationHelper rescue nil #removed for 2.0
+ helpers << ActionView::Helpers::JavaScriptMacrosHelper rescue nil #removed for 2.0
+ helpers.each do |helper_module|
+ it "should include #{helper_module}" do
+ self.class.ancestors.should include(helper_module)
+ end
+ end
+ end
+
+ # TODO: BT - Helper Examples should proxy method_missing to a Rails View instance.
+ # When that is done, remove this method
+ describe HelperExampleGroup, "#protect_against_forgery?", :type => :helper do
+ it "should return false" do
+ protect_against_forgery?.should be_false
+ 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', :type => :helper do
+ it 'should not raise an error' do
+ lambda { flash['test'] }.should_not raise_error
+ end
+ end
+end
+
+module Spec
+ module Rails
+ module Example
+ describe HelperExampleGroup do
+ it "should clear its name from the description" do
+ group = describe("foo", :type => :helper) do
+ $nested_group = describe("bar") do
+ end
+ end
+ group.description.to_s.should == "foo"
+ $nested_group.description.to_s.should == "foo bar"
+ end
+ end
+ end
+ end
+end
\ No newline at end of file
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,64 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "IvarProxy setup", :shared => true do
+ before do
+ @object = Object.new
+ @proxy = Spec::Rails::Example::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
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,18 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Rails
+ module Example
+ describe ModelExampleGroup do
+ it "should clear its name from the description" do
+ group = describe("foo", :type => :model) do
+ $nested_group = describe("bar") do
+ end
+ end
+ group.description.to_s.should == "foo"
+ $nested_group.description.to_s.should == "foo bar"
+ end
+ end
+ end
+ end
+end
\ No newline at end of file
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,16 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "A shared view example_group", :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 example_group", :type => :view do
+ it_should_behave_like "A shared view example_group"
+
+ before(:each) do
+ render "view_spec/implicit_helper"
+ end
+end
+
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,33 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "assert_equal", :shared => true do
+ it "like assert_equal" do
+ assert_equal 1, 1
+ lambda {
+ assert_equal 1, 2
+ }.should raise_error(Test::Unit::AssertionFailedError)
+ end
+end
+
+describe "A model spec should be able to access 'test/unit' assertions", :type => :model do
+ it_should_behave_like "assert_equal"
+end
+
+describe "A view spec should be able to access 'test/unit' assertions", :type => :view do
+ it_should_behave_like "assert_equal"
+end
+
+describe "A helper spec should be able to access 'test/unit' assertions", :type => :helper do
+ it_should_behave_like "assert_equal"
+end
+
+describe "A controller spec with integrated views should be able to access 'test/unit' assertions", :type => :controller do
+ controller_name :controller_spec
+ integrate_views
+ it_should_behave_like "assert_equal"
+end
+
+describe "A controller spec should be able to access 'test/unit' assertions", :type => :controller do
+ controller_name :controller_spec
+ it_should_behave_like "assert_equal"
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,263 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "A template with an implicit helper", :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
+
+ it "should have access to named routes" do
+ rspec_on_rails_specs_url.should == "http://test.host/rspec_on_rails_specs"
+ rspec_on_rails_specs_path.should == "/rspec_on_rails_specs"
+ end
+end
+
+describe "A template requiring an explicit helper", :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", :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", :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", :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\:92/}.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\:109/}.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", :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", :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" 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", :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)", :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", :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", :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 ViewExampleGroupController", :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 Example
+ describe ViewExampleGroup do
+ it "should clear its name from the description" do
+ group = describe("foo", :type => :view) do
+ $nested_group = describe("bar") do
+ end
+ end
+ group.description.to_s.should == "foo"
+ $nested_group.description.to_s.should == "foo bar"
+ end
+
+ it "should clear ActionView::Base.base_view_path on teardown" do
+ ViewExampleGroup.class_eval do
+ alias_method(:ensure_that_base_view_path_is_not_set_across_example_groups_orig,
+ :ensure_that_base_view_path_is_not_set_across_example_groups)
+ define_method(:ensure_that_base_view_path_is_not_set_across_example_groups){
+ $base_view_path_cleared = true
+ ensure_that_base_view_path_is_not_set_across_example_groups_orig
+ }
+ end
+ describe("base_view_path_cleared flag", :type => :view) do
+ it { $base_view_path_cleared.should be_true }
+ end
+ end
+ end
+ end
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,54 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module ActionController
+ describe "Rescue", "#rescue_action in default mode" do
+ before(:each) do
+ @fixture = Object.new
+ @fixture.extend ActionController::Rescue
+ class << @fixture
+ public :rescue_action
+ end
+ end
+
+ it "should raise the passed in exception so examples fail fast" do
+ proc {@fixture.rescue_action(RuntimeError.new("Foobar"))}.should raise_error(RuntimeError, "Foobar")
+ end
+ end
+
+ class RescueOverriddenController < ActionController::Base
+ def rescue_action(error)
+ "successfully overridden"
+ end
+ end
+
+ describe "Rescue", "#rescue_action, when overridden" do
+ before(:each) do
+ @fixture = RescueOverriddenController.new
+ end
+
+ it "should do whatever the overridden method does" do
+ @fixture.rescue_action(RuntimeError.new("Foobar")).should == "successfully overridden"
+ end
+ end
+
+ class SearchController < ActionController::Base
+ end
+
+ describe "Rescue", "#rescue_action when told to use rails error handling" do
+ before(:each) do
+ @controller = SearchController.new
+ @controller.use_rails_error_handling!
+ class << @controller
+ public :rescue_action
+ end
+ end
+
+ it "should use Rails exception handling" do
+ exception = RuntimeError.new("The Error")
+ exception.stub!(:backtrace).and_return(caller)
+ @controller.should_receive(:rescue_action_locally).with(exception)
+
+ @controller.rescue_action(exception)
+ end
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,48 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec/mocks/errors'
+
+describe ActionView::Base, "with RSpec extensions:", :type => :view do
+
+ describe "expect_render" 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" do
+ template.expect_render(:partial => "name")
+ lambda {
+ template.verify_rendered
+ }.should raise_error
+ end
+
+ it "should return something (like a normal mock)" do
+ template.expect_render(:partial => "name").and_return("Little Johnny")
+ result = template.render :partial => "name"
+ result.should == "Little Johnny"
+ end
+ end
+
+ describe "stub_render" do
+ it "should not raise when stubbing and render has been received" do
+ template.stub_render(:partial => "name")
+ template.render :partial => "name"
+ end
+
+ it "should not raise when stubbing and render has NOT been received" do
+ template.stub_render(:partial => "name")
+ end
+
+ it "should not raise when stubbing and render has been received with different options" do
+ 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
+
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,14 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "A model" do
+ fixtures :things
+ it "should tell you its required fields" do
+ Thing.new.should have(1).error_on(:name)
+ end
+
+ it "should tell you how many records it has" do
+ Thing.should have(:no).records
+ Thing.create(:name => "THE THING")
+ Thing.should have(1).record
+ end
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,783 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+# assert_select plugins for Rails
+#
+# Copyright (c) 2006 Assaf Arkin, under Creative Commons Attribution and/or MIT License
+# Developed for http://co.mments.com
+# Code and documention: http://labnotes.org
+
+class AssertSelectController < ActionController::Base
+
+ def response=(content)
+ @content = content
+ end
+
+ #NOTE - this is commented because response is implemented in lib/spec/rails/context/controller
+ # def response(&block)
+ # @update = block
+ # end
+ #
+ def html()
+ render :text=>@content, :layout=>false, :content_type=>Mime::HTML
+ @content = nil
+ end
+
+ def rjs()
+ update = @update
+ render :update do |page|
+ update.call page
+ end
+ @update = nil
+ end
+
+ def xml()
+ render :text=>@content, :layout=>false, :content_type=>Mime::XML
+ @content = nil
+ end
+
+ def rescue_action(e)
+ raise e
+ end
+
+end
+
+class AssertSelectMailer < ActionMailer::Base
+
+ def test(html)
+ recipients "test <te...@test.host>"
+ from "test@test.host"
+ subject "Test e-mail"
+ part :content_type=>"text/html", :body=>html
+ end
+
+end
+
+module AssertSelectSpecHelpers
+ def render_html(html)
+ @controller.response = html
+ get :html
+ end
+
+ def render_rjs(&block)
+ clear_response
+ @controller.response &block
+ get :rjs
+ end
+
+ def render_xml(xml)
+ @controller.response = xml
+ 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
+ render_html("")
+ end
+end
+
+unless defined?(SpecFailed)
+ SpecFailed = Spec::Expectations::ExpectationNotMetError
+end
+
+describe "should have_tag", :type => :controller do
+ include AssertSelectSpecHelpers
+ controller_name :assert_select
+ integrate_views
+
+ it "should find specific numbers of elements" do
+ render_html %Q{<div id="1"></div><div id="2"></div>}
+ response.should have_tag( "div" )
+ response.should have_tag("div", 2)
+ lambda { response.should_not have_tag("div") }.should raise_error(SpecFailed, "should not have tag(\"div\"), but did")
+
+ lambda { response.should have_tag("div", 3) }.should raise_error(SpecFailed)
+ lambda { response.should have_tag("p") }.should raise_error(SpecFailed)
+ end
+
+ it "should expect to find elements when using true" do
+ render_html %Q{<div id="1"></div><div id="2"></div>}
+ response.should have_tag( "div", true )
+ lambda { response.should have_tag( "p", true )}.should raise_error(SpecFailed)
+ end
+
+ it "should expect to not find elements when using false" do
+ render_html %Q{<div id="1"></div><div id="2"></div>}
+ response.should have_tag( "p", false )
+ lambda { response.should have_tag( "div", false )}.should raise_error(SpecFailed)
+ end
+
+
+ it "should match submitted text using text or regexp" do
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
+ response.should have_tag("div", "foo")
+ response.should have_tag("div", /(foo|bar)/)
+ response.should have_tag("div", :text=>"foo")
+ response.should have_tag("div", :text=>/(foo|bar)/)
+
+ lambda { response.should have_tag("div", "bar") }.should raise_error(SpecFailed)
+ lambda { response.should have_tag("div", :text=>"bar") }.should raise_error(SpecFailed)
+ lambda { response.should have_tag("p", :text=>"foo") }.should raise_error(SpecFailed)
+
+ lambda { response.should have_tag("div", /foobar/) }.should raise_error(SpecFailed)
+ lambda { response.should have_tag("div", :text=>/foobar/) }.should raise_error(SpecFailed)
+ lambda { response.should have_tag("p", :text=>/foo/) }.should raise_error(SpecFailed)
+ end
+
+ it "should use submitted message" do
+ render_html %Q{nothing here}
+ lambda {
+ response.should have_tag("div", {}, "custom message")
+ }.should raise_error(SpecFailed, /custom message/)
+ end
+
+ it "should match submitted html" do
+ render_html %Q{<p>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</p>}
+ text = "\"This is not a big problem,\" he said."
+ html = "<em>\"This is <strong>not</strong> a big problem,\"</em> he said."
+ response.should have_tag("p", text)
+ lambda { response.should have_tag("p", html) }.should raise_error(SpecFailed)
+ response.should have_tag("p", :html=>html)
+ lambda { response.should have_tag("p", :html=>text) }.should raise_error(SpecFailed)
+
+ # # No stripping for pre.
+ render_html %Q{<pre>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</pre>}
+ text = "\n\"This is not a big problem,\" he said.\n"
+ html = "\n<em>\"This is <strong>not</strong> a big problem,\"</em> he said.\n"
+ response.should have_tag("pre", text)
+ lambda { response.should have_tag("pre", html) }.should raise_error(SpecFailed)
+ response.should have_tag("pre", :html=>html)
+ lambda { response.should have_tag("pre", :html=>text) }.should raise_error(SpecFailed)
+ end
+
+ it "should match number of instances" do
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
+ response.should have_tag("div", 2)
+ lambda { response.should have_tag("div", 3) }.should raise_error(SpecFailed)
+ response.should have_tag("div", 1..2)
+ lambda { response.should have_tag("div", 3..4) }.should raise_error(SpecFailed)
+ response.should have_tag("div", :count=>2)
+ lambda { response.should have_tag("div", :count=>3) }.should raise_error(SpecFailed)
+ response.should have_tag("div", :minimum=>1)
+ response.should have_tag("div", :minimum=>2)
+ lambda { response.should have_tag("div", :minimum=>3) }.should raise_error(SpecFailed)
+ response.should have_tag("div", :maximum=>2)
+ response.should have_tag("div", :maximum=>3)
+ lambda { response.should have_tag("div", :maximum=>1) }.should raise_error(SpecFailed)
+ response.should have_tag("div", :minimum=>1, :maximum=>2)
+ lambda { response.should have_tag("div", :minimum=>3, :maximum=>4) }.should raise_error(SpecFailed)
+ end
+
+ it "substitution values" do
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div><span id="3"></span>}
+ response.should have_tag("div#?", /\d+/) do |elements| #using do/end
+ elements.size.should == 2
+ end
+ response.should have_tag("div#?", /\d+/) { |elements| #using {}
+ elements.size.should == 2
+ }
+ lambda {
+ response.should have_tag("div#?", /\d+/) do |elements|
+ elements.size.should == 3
+ end
+ }.should raise_error(SpecFailed, "expected: 3,\n got: 2 (using ==)")
+
+ lambda {
+ response.should have_tag("div#?", /\d+/) { |elements|
+ elements.size.should == 3
+ }
+ }.should raise_error(SpecFailed, "expected: 3,\n got: 2 (using ==)")
+
+ response.should have_tag("div#?", /\d+/) do |elements|
+ elements.size.should == 2
+ with_tag("#1")
+ with_tag("#2")
+ without_tag("#3")
+ end
+ end
+
+ #added for RSpec
+ it "nested tags in form" do
+ render_html %Q{
+ <form action="test">
+ <input type="text" name="email">
+ </form>
+ <form action="other">
+ <input type="text" name="other_input">
+ </form>
+ }
+ response.should have_tag("form[action=test]") { |form|
+ with_tag("input[type=text][name=email]")
+ }
+ response.should have_tag("form[action=test]") { |form|
+ with_tag("input[type=text][name=email]")
+ }
+
+ lambda {
+ response.should have_tag("form[action=test]") { |form|
+ with_tag("input[type=text][name=other_input]")
+ }
+ }.should raise_error(SpecFailed)
+
+ lambda {
+ response.should have_tag("form[action=test]") {
+ with_tag("input[type=text][name=other_input]")
+ }
+ }.should raise_error(SpecFailed)
+ end
+
+ 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">
+ </form>
+ }
+ begin
+ response.should have_tag("form[action=test]") {
+ @expected_error_line = __LINE__; assert false
+ }
+ rescue => e
+ 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)
+ BEATLES = [
+ ["John", "Guitar"],
+ ["George", "Guitar"],
+ ["Paul", "Bass"],
+ ["Ringo", "Drums"]
+ ]
+ end
+
+ render_html %Q{
+ <div id="beatles">
+ <div class="beatle">
+ <h2>John</h2><p>Guitar</p>
+ </div>
+ <div class="beatle">
+ <h2>George</h2><p>Guitar</p>
+ </div>
+ <div class="beatle">
+ <h2>Paul</h2><p>Bass</p>
+ </div>
+ <div class="beatle">
+ <h2>Ringo</h2><p>Drums</p>
+ </div>
+ </div>
+ }
+ response.should have_tag("div#beatles>div[class=\"beatle\"]", 4)
+
+ response.should have_tag("div#beatles>div.beatle") {
+ BEATLES.each { |name, instrument|
+ with_tag("div.beatle>h2", name)
+ with_tag("div.beatle>p", instrument)
+ without_tag("div.beatle>span")
+ }
+ }
+ end
+
+ it "assert_select_text_match" do
+ render_html %Q{<div id="1"><span>foo</span></div><div id="2"><span>bar</span></div>}
+ response.should have_tag("div") do |divs|
+ with_tag("div", "foo")
+ with_tag("div", "bar")
+ with_tag("div", /\w*/)
+ with_tag("div", /\w*/, :count=>2)
+ without_tag("div", :text=>"foo", :count=>2)
+ with_tag("div", :html=>"<span>bar</span>")
+ with_tag("div", :html=>"<span>bar</span>")
+ with_tag("div", :html=>/\w*/)
+ with_tag("div", :html=>/\w*/, :count=>2)
+ without_tag("div", :html=>"<span>foo</span>", :count=>2)
+ end
+ end
+
+
+ it "assert_select_from_rjs with one item" do
+ render_rjs do |page|
+ page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
+ end
+ response.should have_tag("div") { |elements|
+ elements.size.should == 2
+ with_tag("#1")
+ with_tag("#2")
+ }
+
+ lambda {
+ response.should have_tag("div") { |elements|
+ elements.size.should == 2
+ with_tag("#1")
+ with_tag("#3")
+ }
+ }.should raise_error(SpecFailed)
+
+ lambda {
+ response.should have_tag("div") { |elements|
+ elements.size.should == 2
+ with_tag("#1")
+ without_tag("#2")
+ }
+ }.should raise_error(SpecFailed, "should not have tag(\"#2\"), but did")
+
+ lambda {
+ response.should have_tag("div") { |elements|
+ elements.size.should == 3
+ with_tag("#1")
+ with_tag("#2")
+ }
+ }.should raise_error(SpecFailed)
+
+
+ response.should have_tag("div#?", /\d+/) { |elements|
+ with_tag("#1")
+ with_tag("#2")
+ }
+ end
+
+ it "assert_select_from_rjs with multiple items" do
+ render_rjs do |page|
+ page.replace_html "test", "<div id=\"1\">foo</div>"
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
+ end
+ response.should have_tag("div")
+ response.should have_tag("div") { |elements|
+ elements.size.should == 2
+ with_tag("#1")
+ with_tag("#2")
+ }
+
+ lambda {
+ response.should have_tag("div") { |elements|
+ with_tag("#3")
+ }
+ }.should raise_error(SpecFailed)
+ end
+end
+
+describe "css_select", :type => :controller do
+ include AssertSelectSpecHelpers
+ controller_name :assert_select
+ integrate_views
+
+ it "can select tags from html" do
+ render_html %Q{<div id="1"></div><div id="2"></div>}
+ css_select("div").size.should == 2
+ css_select("p").size.should == 0
+ end
+
+
+ it "can select nested tags from html" do
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
+ response.should have_tag("div#?", /\d+/) { |elements|
+ css_select(elements[0], "div").should have(1).element
+ css_select(elements[1], "div").should have(1).element
+ }
+ response.should have_tag("div") {
+ css_select("div").should have(2).elements
+ css_select("div").each { |element|
+ # Testing as a group is one thing
+ css_select("#1,#2").should have(2).elements
+ # Testing individually is another
+ css_select("#1").should have(1).element
+ css_select("#2").should have(1).element
+ }
+ }
+ end
+
+ it "can select nested tags from rjs (one result)" do
+ render_rjs do |page|
+ page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
+ end
+ css_select("div").should have(2).elements
+ css_select("#1").should have(1).element
+ css_select("#2").should have(1).element
+ end
+
+ it "can select nested tags from rjs (two results)" do
+ render_rjs do |page|
+ page.replace_html "test", "<div id=\"1\">foo</div>"
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
+ end
+ css_select("div").should have(2).elements
+ css_select("#1").should have(1).element
+ css_select("#2").should have(1).element
+ end
+
+end
+
+describe "have_rjs behaviour_type", :type => :controller do
+ include AssertSelectSpecHelpers
+ controller_name :assert_select
+ integrate_views
+
+ before(:each) do
+ render_rjs do |page|
+ page.replace "test1", "<div id=\"1\">foo</div>"
+ page.replace_html "test2", "<div id=\"2\">bar</div><div id=\"3\">none</div>"
+ page.insert_html :top, "test3", "<div id=\"4\">loopy</div>"
+ page.hide "test4"
+ page["test5"].hide
+ end
+ end
+
+ it "should pass if any rjs exists" do
+ response.should have_rjs
+ end
+
+ it "should fail if no rjs exists" do
+ render_rjs do |page|
+ end
+ lambda do
+ response.should have_rjs
+ end.should raise_error(SpecFailed)
+ end
+
+ it "should find all rjs from multiple statements" do
+ response.should have_rjs do
+ with_tag("#1")
+ with_tag("#2")
+ with_tag("#3")
+ # with_tag("#4")
+ # with_tag("#5")
+ end
+ end
+
+ it "should find by id" do
+ response.should have_rjs("test1") { |rjs|
+ rjs.size.should == 1
+ with_tag("div", 1)
+ with_tag("div#1", "foo")
+ }
+
+ lambda do
+ response.should have_rjs("test1") { |rjs|
+ rjs.size.should == 1
+ without_tag("div#1", "foo")
+ }
+ end.should raise_error(SpecFailed, "should not have tag(\"div#1\", \"foo\"), but did")
+
+ response.should have_rjs("test2") { |rjs|
+ rjs.size.should == 2
+ with_tag("div", 2)
+ with_tag("div#2", "bar")
+ with_tag("div#3", "none")
+ }
+ # response.should have_rjs("test4")
+ # response.should have_rjs("test5")
+ end
+
+ # specify "should find rjs using :hide" do
+ # response.should have_rjs(:hide)
+ # response.should have_rjs(:hide, "test4")
+ # response.should have_rjs(:hide, "test5")
+ # lambda do
+ # response.should have_rjs(:hide, "test3")
+ # end.should raise_error(SpecFailed)
+ # end
+
+ it "should find rjs using :replace" do
+ response.should have_rjs(:replace) { |rjs|
+ with_tag("div", 1)
+ with_tag("div#1", "foo")
+ }
+ response.should have_rjs(:replace, "test1") { |rjs|
+ with_tag("div", 1)
+ with_tag("div#1", "foo")
+ }
+ lambda {
+ response.should have_rjs(:replace, "test2")
+ }.should raise_error(SpecFailed)
+
+ lambda {
+ response.should have_rjs(:replace, "test3")
+ }.should raise_error(SpecFailed)
+ end
+
+ it "should find rjs using :replace_html" do
+ response.should have_rjs(:replace_html) { |rjs|
+ with_tag("div", 2)
+ with_tag("div#2", "bar")
+ with_tag("div#3", "none")
+ }
+
+ response.should have_rjs(:replace_html, "test2") { |rjs|
+ with_tag("div", 2)
+ with_tag("div#2", "bar")
+ with_tag("div#3", "none")
+ }
+
+ lambda {
+ response.should have_rjs(:replace_html, "test1")
+ }.should raise_error(SpecFailed)
+
+ lambda {
+ response.should have_rjs(:replace_html, "test3")
+ }.should raise_error(SpecFailed)
+ end
+
+ it "should find rjs using :insert_html (non-positioned)" do
+ response.should have_rjs(:insert_html) { |rjs|
+ with_tag("div", 1)
+ with_tag("div#4", "loopy")
+ }
+
+ response.should have_rjs(:insert_html, "test3") { |rjs|
+ with_tag("div", 1)
+ with_tag("div#4", "loopy")
+ }
+
+ lambda {
+ response.should have_rjs(:insert_html, "test1")
+ }.should raise_error(SpecFailed)
+
+ lambda {
+ response.should have_rjs(:insert_html, "test2")
+ }.should raise_error(SpecFailed)
+ end
+
+ it "should find rjs using :insert (positioned)" do
+ render_rjs do |page|
+ page.insert_html :top, "test1", "<div id=\"1\">foo</div>"
+ page.insert_html :bottom, "test2", "<div id=\"2\">bar</div>"
+ page.insert_html :before, "test3", "<div id=\"3\">none</div>"
+ page.insert_html :after, "test4", "<div id=\"4\">loopy</div>"
+ end
+ response.should have_rjs(:insert, :top) do
+ with_tag("div", 1)
+ with_tag("#1")
+ end
+ response.should have_rjs(:insert, :top, "test1") do
+ with_tag("div", 1)
+ with_tag("#1")
+ end
+ lambda {
+ response.should have_rjs(:insert, :top, "test2")
+ }.should raise_error(SpecFailed)
+ response.should have_rjs(:insert, :bottom) {|rjs|
+ with_tag("div", 1)
+ with_tag("#2")
+ }
+ response.should have_rjs(:insert, :bottom, "test2") {|rjs|
+ with_tag("div", 1)
+ with_tag("#2")
+ }
+ response.should have_rjs(:insert, :before) {|rjs|
+ with_tag("div", 1)
+ with_tag("#3")
+ }
+ response.should have_rjs(:insert, :before, "test3") {|rjs|
+ with_tag("div", 1)
+ with_tag("#3")
+ }
+ response.should have_rjs(:insert, :after) {|rjs|
+ with_tag("div", 1)
+ with_tag("#4")
+ }
+ response.should have_rjs(:insert, :after, "test4") {|rjs|
+ with_tag("div", 1)
+ with_tag("#4")
+ }
+ end
+end
+
+describe "send_email behaviour_type", :type => :controller do
+ include AssertSelectSpecHelpers
+ controller_name :assert_select
+ integrate_views
+
+ before(:each) do
+ ActionMailer::Base.delivery_method = :test
+ ActionMailer::Base.perform_deliveries = true
+ ActionMailer::Base.deliveries = []
+ end
+
+ after(:each) do
+ ActionMailer::Base.deliveries.clear
+ end
+
+ it "should fail with nothing sent" do
+ response.should_not send_email
+ lambda {
+ response.should send_email{}
+ }.should raise_error(SpecFailed, /No e-mail in delivery list./)
+ end
+
+ it "should pass otherwise" do
+ AssertSelectMailer.deliver_test "<div><p>foo</p><p>bar</p></div>"
+ response.should send_email
+ lambda {
+ response.should_not send_email
+ }.should raise_error(SpecFailed)
+ response.should send_email{}
+ response.should send_email {
+ with_tag("div:root") {
+ with_tag("p:first-child", "foo")
+ with_tag("p:last-child", "bar")
+ }
+ }
+
+ lambda {
+ response.should_not send_email
+ }.should raise_error(SpecFailed, "should not send email, but did")
+ end
+
+end
+
+# describe "An rjs call to :visual_effect, a 'should have_rjs' spec with",
+# :type => :view do
+#
+# before do
+# render 'rjs_spec/visual_effect'
+# end
+#
+# it "should pass with the correct element name" do
+# response.should have_rjs(:effect, :fade, 'mydiv')
+# end
+#
+# it "should fail the wrong element name" do
+# lambda {
+# response.should have_rjs(:effect, :fade, 'wrongname')
+# }.should raise_error(SpecFailed)
+# end
+#
+# it "should fail with the correct element but the wrong command" do
+# lambda {
+# response.should have_rjs(:effect, :puff, 'mydiv')
+# }.should raise_error(SpecFailed)
+# end
+#
+# end
+#
+# describe "An rjs call to :visual_effect for a toggle, a 'should have_rjs' spec with",
+# :type => :view do
+#
+# before do
+# render 'rjs_spec/visual_toggle_effect'
+# end
+#
+# it "should pass with the correct element name" do
+# response.should have_rjs(:effect, :toggle_blind, 'mydiv')
+# end
+#
+# it "should fail with the wrong element name" do
+# lambda {
+# response.should have_rjs(:effect, :toggle_blind, 'wrongname')
+# }.should raise_error(SpecFailed)
+# end
+#
+# it "should fail the correct element but the wrong command" do
+# lambda {
+# response.should have_rjs(:effect, :puff, 'mydiv')
+# }.should raise_error(SpecFailed)
+# end
+#
+# end
+
+describe "string.should have_tag", :type => :helper do
+ include AssertSelectSpecHelpers
+
+ it "should find root element" do
+ "<p>a paragraph</p>".should have_tag("p", "a paragraph")
+ end
+
+ it "should not find non-existent element" do
+ lambda do
+ "<p>a paragraph</p>".should have_tag("p", "wrong text")
+ end.should raise_error(SpecFailed)
+ end
+
+ it "should find child element" do
+ "<div><p>a paragraph</p></div>".should have_tag("p", "a paragraph")
+ end
+
+ it "should find nested element" do
+ "<div><p>a paragraph</p></div>".should have_tag("div") do
+ with_tag("p", "a paragraph")
+ end
+ end
+
+ it "should not find wrong nested element" do
+ lambda do
+ "<div><p>a paragraph</p></div>".should have_tag("div") do
+ with_tag("p", "wrong text")
+ end
+ end.should raise_error(SpecFailed)
+ end
+end
+
+describe "have_tag", :type => :controller do
+ include AssertSelectSpecHelpers
+ controller_name :assert_select
+ integrate_views
+
+ it "should work exactly the same as assert_select" do
+ render_html %Q{
+ <div id="wrapper">foo
+ <div class="piece">
+ <h3>Text</h3>
+ </div>
+ <div class="piece">
+ <h3>Another</h3>
+ </div>
+ </div>
+ }
+
+ assert_select "#wrapper .piece h3", :text => "Text"
+ assert_select "#wrapper .piece h3", :text => "Another"
+
+ response.should have_tag("#wrapper .piece h3", :text => "Text")
+ response.should have_tag("#wrapper .piece h3", :text => "Another")
+ end
+end
+
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,37 @@
+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", :type => :controller do
+ controller_name :description_generation_spec
+
+ after(:each) do
+ Spec::Matchers.clear_generated_description
+ end
+
+ it "should generate description for render_template" do
+ get 'render_action'
+ response.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")
+ 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")
+ Spec::Matchers.generated_description.should == "should redirect to \"http://test.host/description_generation_spec/render_action\""
+ end
+
+end
Added: ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb
URL: http://svn.apache.org/viewvc/ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb?rev=652957&view=auto
==============================================================================
--- ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb (added)
+++ ode/sandbox/singleshot/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb Fri May 2 17:14:01 2008
@@ -0,0 +1,13 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe "error_on" do
+ it "should provide a message including the name of what the error is on" do
+ have(1).error_on(:whatever).description.should == "should have 1 error on :whatever"
+ end
+end
+
+describe "errors_on" do
+ it "should provide a message including the name of what the error is on" do
+ have(2).errors_on(:whatever).description.should == "should have 2 errors on :whatever"
+ end
+end