Created
February 12, 2009 23:35
-
-
Save trotter/62943 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Spec | |
module Mocks | |
module ArgumentMatchers | |
class ArrayIncludingMatcher | |
# We'll allow an array of arguments to be passed in, so that you can do | |
# things like obj.should_receive(:blah).with(array_including('a', 'b')) | |
def initialize(*expected) | |
@expected = expected | |
end | |
# actual is the array (hopefully) passed to the method by the user. | |
# We'll check that it includes all the expected values, and return false | |
# if it doesn't or if we blow up because #include? is not defined. | |
def ==(actual) | |
@expected.each do |expected| | |
return false unless actual.include?(expected) | |
end | |
true | |
rescue NoMethodError => ex | |
return false | |
end | |
def description | |
"array_including(#{@expected.join(', ')})" | |
end | |
end | |
class ArrayNotIncludingMatcher | |
def initialize(*expected) | |
@expected = expected | |
end | |
def ==(actual) | |
@expected.each do |expected| | |
return false if actual.include?(expected) | |
end | |
true | |
rescue NoMethodError => ex | |
return false | |
end | |
def description | |
"array_not_including(#{@expected.join(', ')})" | |
end | |
end | |
# array_including is a helpful wrapper that allows us to actually type | |
# #with(array_including(...)) instead of ArrayIncludingMatcher.new(...) | |
def array_including(*args) | |
ArrayIncludingMatcher.new(*args) | |
end | |
def array_not_including(*args) | |
ArrayNotIncludingMatcher.new(*args) | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment