diff options
author | francis <francis> | 2008-01-23 01:56:35 +0000 |
---|---|---|
committer | francis <francis> | 2008-01-23 01:56:35 +0000 |
commit | 8bd6667c7885870af45522315f501a2b87340b1a (patch) | |
tree | f0cf687df6555e26e23d78d564df8338b6c10994 /vendor/plugins/rspec_on_rails/spec | |
parent | f906a3ab0b3f1ed0f18e5b605787cfa7c084b19a (diff) |
And add the new files in new rspec_on_rails
Diffstat (limited to 'vendor/plugins/rspec_on_rails/spec')
16 files changed, 1146 insertions, 0 deletions
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb new file mode 100644 index 000000000..400fb829d --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb new file mode 100644 index 000000000..91a1b265c --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb new file mode 100644 index 000000000..204db15d6 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb new file mode 100644 index 000000000..3cc861d83 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb @@ -0,0 +1,179 @@ +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 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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb new file mode 100644 index 000000000..0803c2f29 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb new file mode 100644 index 000000000..50defecc5 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb new file mode 100644 index 000000000..af6729333 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb new file mode 100644 index 000000000..938744dbb --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb new file mode 100644 index 000000000..ef19817d8 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb @@ -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 + diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb new file mode 100644 index 000000000..b7a838691 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb @@ -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 diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb new file mode 100644 index 000000000..17e47eee8 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb @@ -0,0 +1,249 @@ +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 + end + end + end +end
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb new file mode 100644 index 000000000..93a1ef059 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb @@ -0,0 +1,62 @@ +require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper') + +describe "have_text" do + + describe "where target is a Regexp" do + it 'should should match submitted text using a regexp' do + string = 'foo' + string.should have_text(/fo*/) + end + end + + describe "where target is a String" do + it 'should match submitted text using a string' do + string = 'foo' + string.should have_text('foo') + end + end + +end + +describe "have_text", + :type => :controller do + ['isolation','integration'].each do |mode| + if mode == 'integration' + integrate_views + end + + describe "where target is a response (in #{mode} mode)" do + controller_name :render_spec + + 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 + + it "should pass using should_not with incorrect text" do + post 'text_action' + response.should_not have_text("the accordian guy") + end + end + end +end + diff --git a/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb new file mode 100644 index 000000000..7cd1d4e81 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb @@ -0,0 +1,7 @@ +require File.dirname(__FILE__) + '/../spec_helper' + +describe "A sample spec" do + it "should pass" do + true.should === true + end +end
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb new file mode 100644 index 000000000..957bd1089 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb @@ -0,0 +1,89 @@ +require File.dirname(__FILE__) + '/../spec_helper' + +describe "script/spec_server file", :shared => true do + attr_accessor :tmbundle_install_directory + + after do + system "kill -9 #{@pid}" + end + + it "runs a spec" do + dir = File.dirname(__FILE__) + output = "" + Timeout.timeout(10) do + loop do + output = `#{RAILS_ROOT}/script/spec #{dir}/sample_spec.rb --drb 2>&1` + break unless output.include?("No server is running") + end + end + + unless $?.exitstatus == 0 + flunk "command 'script/spec spec/sample_spec' failed\n#{output}" + end + end + + def start_spec_server + create_spec_server_pid_file + start_spec_server_process + end + + def create_spec_server_pid_file + current_dir = File.dirname(__FILE__) + pid_dir = "#{Dir.tmpdir}/#{Time.now.to_i}" + @spec_server_pid_file = "#{pid_dir}/spec_server.pid" + FileUtils.mkdir_p pid_dir + system "touch #{@spec_server_pid_file}" + @rspec_path = File.expand_path("#{current_dir}/../../../rspec/lib") + end + + def start_spec_server_process + dir = File.dirname(__FILE__) + spec_server_cmd = %Q|export HOME=#{Dir.tmpdir}; | + spec_server_cmd << %Q|ruby -e 'system("echo " + Process.pid.to_s + " > #{@spec_server_pid_file}"); | + spec_server_cmd << %Q|$LOAD_PATH.unshift("#{@rspec_path}"); require "spec"; | + spec_server_cmd << %Q|load "#{RAILS_ROOT}/script/spec_server"' &| + system spec_server_cmd + + file_content = "" + Timeout.timeout(5) do + loop do + file_content = File.read(@spec_server_pid_file) + break unless file_content.blank? + end + end + @pid = Integer(File.read(@spec_server_pid_file)) + end +end + +describe "script/spec_server file without TextMate bundle" do + it_should_behave_like "script/spec_server file" + before do + start_spec_server + end +end + +describe "script/spec_server file with TextMate bundle" do + it_should_behave_like "script/spec_server file" + before do + dir = File.dirname(__FILE__) + @tmbundle_install_directory = File.expand_path("#{Dir.tmpdir}/Library/Application Support/TextMate/Bundles") + @bundle_name = "RSpec.tmbundle" + FileUtils.mkdir_p(tmbundle_install_directory) + bundle_dir = File.expand_path("#{dir}/../../../../../../#{@bundle_name}") + File.directory?(bundle_dir).should be_true + unless system(%Q|ln -s #{bundle_dir} "#{tmbundle_install_directory}"|) + raise "Creating link to Textmate Bundle" + end + start_spec_server + end + + after do + bundle_file_to_remove = "#{tmbundle_install_directory}/#{@bundle_name}" + if bundle_file_to_remove == "/" + raise "bundle file path resolved to '/' - could not call rm" + end + unless system(%Q|rm "#{bundle_file_to_remove}"|) + raise "Removing Textmate bundle link failed" + end + end +end diff --git a/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb new file mode 100644 index 000000000..ea258c7d8 --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb @@ -0,0 +1,11 @@ +require File.dirname(__FILE__) + '/../spec_helper' + +describe "script/spec file" do + it "should run a spec" do + dir = File.dirname(__FILE__) + output = `#{RAILS_ROOT}/script/spec #{dir}/sample_spec.rb` + unless $?.exitstatus == 0 + flunk "command 'script/spec spec/sample_spec' failed\n#{output}" + end + end +end
\ No newline at end of file diff --git a/vendor/plugins/rspec_on_rails/spec/rails_suite.rb b/vendor/plugins/rspec_on_rails/spec/rails_suite.rb new file mode 100644 index 000000000..15effae1c --- /dev/null +++ b/vendor/plugins/rspec_on_rails/spec/rails_suite.rb @@ -0,0 +1,7 @@ +dir = File.dirname(__FILE__) +Dir["#{dir}/**/*_example.rb"].each do |file| + require file +end +Dir["#{dir}/**/*_spec.rb"].each do |file| + require file +end |