spec/spec/matchers/have_spec.rb in rspec-1.3.0 vs spec/spec/matchers/have_spec.rb in rspec-1.3.1.rc
- old
+ new
@@ -1,16 +1,18 @@
require 'spec_helper'
-share_as :HaveSpecHelper do
+describe "have matcher" do
+
def create_collection_owner_with(n)
owner = Spec::Expectations::Helper::CollectionOwner.new
(1..n).each do |number|
owner.add_to_collection_with_length_method(number)
owner.add_to_collection_with_size_method(number)
end
owner
end
+
before(:each) do
if defined?(::ActiveSupport::Inflector)
@active_support_was_defined = true
else
@active_support_was_defined = false
@@ -21,375 +23,358 @@
end
end
end
end
end
-end
+ describe "should have(n).items" do
+ it "should pass if target has a collection of items with n members" do
+ owner = create_collection_owner_with(3)
+ owner.should have(3).items_in_collection_with_length_method
+ owner.should have(3).items_in_collection_with_size_method
+ end
-describe "should have(n).items" do
- include HaveSpecHelper
+ it "should convert :no to 0" do
+ owner = create_collection_owner_with(0)
+ owner.should have(:no).items_in_collection_with_length_method
+ owner.should have(:no).items_in_collection_with_size_method
+ end
- it "should pass if target has a collection of items with n members" do
- owner = create_collection_owner_with(3)
- owner.should have(3).items_in_collection_with_length_method
- owner.should have(3).items_in_collection_with_size_method
+ it "should fail if target has a collection of items with < n members" do
+ owner = create_collection_owner_with(3)
+ lambda {
+ owner.should have(4).items_in_collection_with_length_method
+ }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
+ lambda {
+ owner.should have(4).items_in_collection_with_size_method
+ }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
+ end
+
+ it "should fail if target has a collection of items with > n members" do
+ owner = create_collection_owner_with(3)
+ lambda {
+ owner.should have(2).items_in_collection_with_length_method
+ }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
+ lambda {
+ owner.should have(2).items_in_collection_with_size_method
+ }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
+ end
end
- it "should convert :no to 0" do
- owner = create_collection_owner_with(0)
- owner.should have(:no).items_in_collection_with_length_method
- owner.should have(:no).items_in_collection_with_size_method
- end
-
- it "should fail if target has a collection of items with < n members" do
- owner = create_collection_owner_with(3)
- lambda {
- owner.should have(4).items_in_collection_with_length_method
- }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
- lambda {
- owner.should have(4).items_in_collection_with_size_method
- }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
- end
-
- it "should fail if target has a collection of items with > n members" do
- owner = create_collection_owner_with(3)
- lambda {
- owner.should have(2).items_in_collection_with_length_method
- }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
- lambda {
- owner.should have(2).items_in_collection_with_size_method
- }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
- end
-end
-
-describe 'should have(1).item when ActiveSupport::Inflector is defined' do
- include HaveSpecHelper
-
- it 'should pluralize the collection name' do
- owner = create_collection_owner_with(1)
- owner.should have(1).item
- end
-
- after(:each) do
- unless @active_support_was_defined
- Object.__send__ :remove_const, :ActiveSupport
+ describe 'should have(1).item when ActiveSupport::Inflector is defined' do
+ it 'should pluralize the collection name' do
+ owner = create_collection_owner_with(1)
+ owner.should have(1).item
end
+
+ after(:each) do
+ unless @active_support_was_defined
+ Object.__send__ :remove_const, :ActiveSupport
+ end
+ end
end
-end
-describe 'should have(1).item when Inflector is defined' do
- include HaveSpecHelper
-
- before(:each) do
- if defined?(Inflector)
- @inflector_was_defined = true
- else
- @inflector_was_defined = false
- class ::Inflector
- def self.pluralize(string)
- string.to_s + 's'
+ describe 'should have(1).item when Inflector is defined' do
+ before(:each) do
+ if defined?(Inflector)
+ @inflector_was_defined = true
+ else
+ @inflector_was_defined = false
+ class ::Inflector
+ def self.pluralize(string)
+ string.to_s + 's'
+ end
end
end
end
- end
-
- it 'should pluralize the collection name' do
- owner = create_collection_owner_with(1)
- owner.should have(1).item
- end
-
- after(:each) do
- unless @inflector_was_defined
- Object.__send__ :remove_const, :Inflector
+
+ it 'should pluralize the collection name' do
+ owner = create_collection_owner_with(1)
+ owner.should have(1).item
end
- end
-end
-describe "should have(n).items where result responds to items but returns something other than a collection" do
- it "should provide a meaningful error" do
- owner = Class.new do
- def items
- Object.new
+ after(:each) do
+ unless @inflector_was_defined
+ Object.__send__ :remove_const, :Inflector
end
- end.new
- lambda do
- owner.should have(3).items
- end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
+ end
end
-end
-describe "should_not have(n).items" do
- include HaveSpecHelper
-
- it "should pass if target has a collection of items with < n members" do
- owner = create_collection_owner_with(3)
- owner.should_not have(4).items_in_collection_with_length_method
- owner.should_not have(4).items_in_collection_with_size_method
+ describe "should have(n).items where result responds to items but returns something other than a collection" do
+ it "should provide a meaningful error" do
+ owner = Class.new do
+ def items
+ Object.new
+ end
+ end.new
+ lambda do
+ owner.should have(3).items
+ end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
+ end
end
-
- it "should pass if target has a collection of items with > n members" do
- owner = create_collection_owner_with(3)
- owner.should_not have(2).items_in_collection_with_length_method
- owner.should_not have(2).items_in_collection_with_size_method
- end
- it "should fail if target has a collection of items with n members" do
- owner = create_collection_owner_with(3)
- lambda {
- owner.should_not have(3).items_in_collection_with_length_method
- }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
- lambda {
- owner.should_not have(3).items_in_collection_with_size_method
- }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
- end
-end
+ describe "should_not have(n).items" do
+ it "should pass if target has a collection of items with < n members" do
+ owner = create_collection_owner_with(3)
+ owner.should_not have(4).items_in_collection_with_length_method
+ owner.should_not have(4).items_in_collection_with_size_method
+ end
+
+ it "should pass if target has a collection of items with > n members" do
+ owner = create_collection_owner_with(3)
+ owner.should_not have(2).items_in_collection_with_length_method
+ owner.should_not have(2).items_in_collection_with_size_method
+ end
-describe "should have_exactly(n).items" do
- include HaveSpecHelper
-
- it "should pass if target has a collection of items with n members" do
- owner = create_collection_owner_with(3)
- owner.should have_exactly(3).items_in_collection_with_length_method
- owner.should have_exactly(3).items_in_collection_with_size_method
+ it "should fail if target has a collection of items with n members" do
+ owner = create_collection_owner_with(3)
+ lambda {
+ owner.should_not have(3).items_in_collection_with_length_method
+ }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
+ lambda {
+ owner.should_not have(3).items_in_collection_with_size_method
+ }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
+ end
end
- it "should convert :no to 0" do
- owner = create_collection_owner_with(0)
- owner.should have_exactly(:no).items_in_collection_with_length_method
- owner.should have_exactly(:no).items_in_collection_with_size_method
- end
+ describe "should have_exactly(n).items" do
+ it "should pass if target has a collection of items with n members" do
+ owner = create_collection_owner_with(3)
+ owner.should have_exactly(3).items_in_collection_with_length_method
+ owner.should have_exactly(3).items_in_collection_with_size_method
+ end
- it "should fail if target has a collection of items with < n members" do
- owner = create_collection_owner_with(3)
- lambda {
- owner.should have_exactly(4).items_in_collection_with_length_method
- }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
- lambda {
- owner.should have_exactly(4).items_in_collection_with_size_method
- }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
- end
-
- it "should fail if target has a collection of items with > n members" do
- owner = create_collection_owner_with(3)
- lambda {
- owner.should have_exactly(2).items_in_collection_with_length_method
- }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
- lambda {
- owner.should have_exactly(2).items_in_collection_with_size_method
- }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
- end
-end
+ it "should convert :no to 0" do
+ owner = create_collection_owner_with(0)
+ owner.should have_exactly(:no).items_in_collection_with_length_method
+ owner.should have_exactly(:no).items_in_collection_with_size_method
+ end
-describe "should have_at_least(n).items" do
- include HaveSpecHelper
-
- it "should pass if target has a collection of items with n members" do
- owner = create_collection_owner_with(3)
- owner.should have_at_least(3).items_in_collection_with_length_method
- owner.should have_at_least(3).items_in_collection_with_size_method
+ it "should fail if target has a collection of items with < n members" do
+ owner = create_collection_owner_with(3)
+ lambda {
+ owner.should have_exactly(4).items_in_collection_with_length_method
+ }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
+ lambda {
+ owner.should have_exactly(4).items_in_collection_with_size_method
+ }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
+ end
+
+ it "should fail if target has a collection of items with > n members" do
+ owner = create_collection_owner_with(3)
+ lambda {
+ owner.should have_exactly(2).items_in_collection_with_length_method
+ }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
+ lambda {
+ owner.should have_exactly(2).items_in_collection_with_size_method
+ }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
+ end
end
-
- it "should pass if target has a collection of items with > n members" do
- owner = create_collection_owner_with(3)
- owner.should have_at_least(2).items_in_collection_with_length_method
- owner.should have_at_least(2).items_in_collection_with_size_method
- end
- it "should fail if target has a collection of items with < n members" do
- owner = create_collection_owner_with(3)
- lambda {
- owner.should have_at_least(4).items_in_collection_with_length_method
- }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
- lambda {
- owner.should have_at_least(4).items_in_collection_with_size_method
- }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
- end
-
- it "should provide educational negative failure messages" do
- #given
- owner = create_collection_owner_with(3)
- length_matcher = have_at_least(3).items_in_collection_with_length_method
- size_matcher = have_at_least(3).items_in_collection_with_size_method
+ describe "should have_at_least(n).items" do
+ it "should pass if target has a collection of items with n members" do
+ owner = create_collection_owner_with(3)
+ owner.should have_at_least(3).items_in_collection_with_length_method
+ owner.should have_at_least(3).items_in_collection_with_size_method
+ end
- #when
- length_matcher.matches?(owner)
- size_matcher.matches?(owner)
+ it "should pass if target has a collection of items with > n members" do
+ owner = create_collection_owner_with(3)
+ owner.should have_at_least(2).items_in_collection_with_length_method
+ owner.should have_at_least(2).items_in_collection_with_size_method
+ end
+
+ it "should fail if target has a collection of items with < n members" do
+ owner = create_collection_owner_with(3)
+ lambda {
+ owner.should have_at_least(4).items_in_collection_with_length_method
+ }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
+ lambda {
+ owner.should have_at_least(4).items_in_collection_with_size_method
+ }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
+ end
- #then
- length_matcher.failure_message_for_should_not.should == <<-EOF
+ it "should provide educational negative failure messages" do
+ #given
+ owner = create_collection_owner_with(3)
+ length_matcher = have_at_least(3).items_in_collection_with_length_method
+ size_matcher = have_at_least(3).items_in_collection_with_size_method
+
+ #when
+ length_matcher.matches?(owner)
+ size_matcher.matches?(owner)
+
+ #then
+ length_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_least(3).items_in_collection_with_length_method
We recommend that you use this instead:
should have_at_most(2).items_in_collection_with_length_method
EOF
- size_matcher.failure_message_for_should_not.should == <<-EOF
+ size_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_least(3).items_in_collection_with_size_method
We recommend that you use this instead:
should have_at_most(2).items_in_collection_with_size_method
EOF
+ end
end
-end
-describe "should have_at_most(n).items" do
- include HaveSpecHelper
+ describe "should have_at_most(n).items" do
+ it "should pass if target has a collection of items with n members" do
+ owner = create_collection_owner_with(3)
+ owner.should have_at_most(3).items_in_collection_with_length_method
+ owner.should have_at_most(3).items_in_collection_with_size_method
+ end
- it "should pass if target has a collection of items with n members" do
- owner = create_collection_owner_with(3)
- owner.should have_at_most(3).items_in_collection_with_length_method
- owner.should have_at_most(3).items_in_collection_with_size_method
- end
-
- it "should fail if target has a collection of items with > n members" do
- owner = create_collection_owner_with(3)
- lambda {
- owner.should have_at_most(2).items_in_collection_with_length_method
- }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
- lambda {
- owner.should have_at_most(2).items_in_collection_with_size_method
- }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
- end
-
- it "should pass if target has a collection of items with < n members" do
- owner = create_collection_owner_with(3)
- owner.should have_at_most(4).items_in_collection_with_length_method
- owner.should have_at_most(4).items_in_collection_with_size_method
- end
-
- it "should provide educational negative failure messages" do
- #given
- owner = create_collection_owner_with(3)
- length_matcher = have_at_most(3).items_in_collection_with_length_method
- size_matcher = have_at_most(3).items_in_collection_with_size_method
+ it "should fail if target has a collection of items with > n members" do
+ owner = create_collection_owner_with(3)
+ lambda {
+ owner.should have_at_most(2).items_in_collection_with_length_method
+ }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
+ lambda {
+ owner.should have_at_most(2).items_in_collection_with_size_method
+ }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
+ end
- #when
- length_matcher.matches?(owner)
- size_matcher.matches?(owner)
-
- #then
- length_matcher.failure_message_for_should_not.should == <<-EOF
+ it "should pass if target has a collection of items with < n members" do
+ owner = create_collection_owner_with(3)
+ owner.should have_at_most(4).items_in_collection_with_length_method
+ owner.should have_at_most(4).items_in_collection_with_size_method
+ end
+
+ it "should provide educational negative failure messages" do
+ #given
+ owner = create_collection_owner_with(3)
+ length_matcher = have_at_most(3).items_in_collection_with_length_method
+ size_matcher = have_at_most(3).items_in_collection_with_size_method
+
+ #when
+ length_matcher.matches?(owner)
+ size_matcher.matches?(owner)
+
+ #then
+ length_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_most(3).items_in_collection_with_length_method
We recommend that you use this instead:
should have_at_least(4).items_in_collection_with_length_method
EOF
-
- size_matcher.failure_message_for_should_not.should == <<-EOF
+
+ size_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_most(3).items_in_collection_with_size_method
We recommend that you use this instead:
should have_at_least(4).items_in_collection_with_size_method
EOF
+ end
end
-end
-describe "have(n).items(args, block)" do
- it "should pass args to target" do
- target = mock("target")
- target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
- target.should have(3).items("arg1","arg2")
- end
+ describe "have(n).items(args, block)" do
+ it "should pass args to target" do
+ target = mock("target")
+ target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
+ target.should have(3).items("arg1","arg2")
+ end
- it "should pass block to target" do
- target = mock("target")
- block = lambda { 5 }
- target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
- target.should have(3).items("arg1","arg2", block)
+ it "should pass block to target" do
+ target = mock("target")
+ block = lambda { 5 }
+ target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
+ target.should have(3).items("arg1","arg2", block)
+ end
end
-end
-describe "have(n).items where target IS a collection" do
- it "should reference the number of items IN the collection" do
- [1,2,3].should have(3).items
- end
+ describe "have(n).items where target IS a collection" do
+ it "should reference the number of items IN the collection" do
+ [1,2,3].should have(3).items
+ end
- it "should fail when the number of items IN the collection is not as expected" do
- lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
+ it "should fail when the number of items IN the collection is not as expected" do
+ lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
+ end
end
-end
-describe "have(n).characters where target IS a String" do
- it "should pass if the length is correct" do
- "this string".should have(11).characters
- end
+ describe "have(n).characters where target IS a String" do
+ it "should pass if the length is correct" do
+ "this string".should have(11).characters
+ end
- it "should fail if the length is incorrect" do
- lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
+ it "should fail if the length is incorrect" do
+ lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
+ end
end
-end
-describe "have(n).things on an object which is not a collection nor contains one" do
- it "should fail" do
- lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
+ describe "have(n).things on an object which is not a collection nor contains one" do
+ it "should fail" do
+ lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
+ end
end
-end
-describe Spec::Matchers::Have, "for a collection owner that implements #send" do
- include HaveSpecHelper
-
- before(:each) do
- @collection = Object.new
- def @collection.floozles; [1,2] end
- def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
- end
-
- it "should work in the straightforward case" do
- lambda {
- @collection.should have(2).floozles
- }.should_not raise_error
- end
+ describe Spec::Matchers::Have, "for a collection owner that implements #send" do
+ before(:each) do
+ @collection = Object.new
+ def @collection.floozles; [1,2] end
+ def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ end
+
+ it "should work in the straightforward case" do
+ lambda {
+ @collection.should have(2).floozles
+ }.should_not raise_error
+ end
- it "should work when doing automatic pluralization" do
- lambda {
- @collection.should have_at_least(1).floozle
- }.should_not raise_error
- end
+ it "should work when doing automatic pluralization" do
+ lambda {
+ @collection.should have_at_least(1).floozle
+ }.should_not raise_error
+ end
- it "should blow up when the owner doesn't respond to that method" do
- lambda {
- @collection.should have(99).problems
- }.should raise_error(NoMethodError, /problems/)
+ it "should blow up when the owner doesn't respond to that method" do
+ lambda {
+ @collection.should have(99).problems
+ }.should raise_error(NoMethodError, /problems/)
+ end
end
-end
-module Spec
- module Matchers
- describe Have do
- treats_method_missing_as_private :noop => false
-
- describe "respond_to?" do
- before :each do
- @have = Have.new(:foo)
- @a_method_which_have_defines = Have.instance_methods.first
- @a_method_which_object_defines = Object.instance_methods.first
- end
+ module Spec
+ module Matchers
+ describe Have do
+ treats_method_missing_as_private :noop => false
- it "should be true for a method which Have defines" do
- @have.should respond_to(@a_method_which_have_defines)
- end
-
- it "should be true for a method that it's superclass (Object) defines" do
- @have.should respond_to(@a_method_which_object_defines)
- end
-
- it "should be false for a method which neither Object nor nor Have defines" do
- @have.should_not respond_to(:foo_bar_baz)
- end
-
- it "should be false if the owner doesn't respond to the method" do
- have = Have.new(99)
- have.should_not respond_to(:problems)
- end
-
- it "should be true if the owner responds to the method" do
- have = Have.new(:a_symbol)
- have.should respond_to(:to_sym)
+ describe "respond_to?" do
+ before :each do
+ @have = Have.new(:foo)
+ @a_method_which_have_defines = Have.instance_methods.first
+ @a_method_which_object_defines = Object.instance_methods.first
+ end
+
+ it "should be true for a method which Have defines" do
+ @have.should respond_to(@a_method_which_have_defines)
+ end
+
+ it "should be true for a method that it's superclass (Object) defines" do
+ @have.should respond_to(@a_method_which_object_defines)
+ end
+
+ it "should be false for a method which neither Object nor nor Have defines" do
+ @have.should_not respond_to(:foo_bar_baz)
+ end
+
+ it "should be false if the owner doesn't respond to the method" do
+ have = Have.new(99)
+ have.should_not respond_to(:problems)
+ end
+
+ it "should be true if the owner responds to the method" do
+ have = Have.new(:a_symbol)
+ have.should respond_to(:to_sym)
+ end
end
end
end
end
end