2008-06-18 02:57:57 -04:00
|
|
|
module Spec
|
|
|
|
|
module Mocks
|
|
|
|
|
|
|
|
|
|
class ArgumentExpectation
|
|
|
|
|
attr_reader :args
|
|
|
|
|
|
|
|
|
|
def initialize(args, &block)
|
|
|
|
|
@args = args
|
|
|
|
|
@constraints_block = block
|
|
|
|
|
|
2008-11-29 12:00:06 -05:00
|
|
|
if ArgumentConstraints::AnyArgsConstraint === args.first
|
|
|
|
|
@match_any_args = true
|
|
|
|
|
elsif ArgumentConstraints::NoArgsConstraint === args.first
|
|
|
|
|
@constraints = []
|
|
|
|
|
else
|
|
|
|
|
@constraints = args.collect {|arg| constraint_for(arg)}
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2008-11-29 12:00:06 -05:00
|
|
|
def constraint_for(arg)
|
|
|
|
|
return ArgumentConstraints::MatcherConstraint.new(arg) if is_matcher?(arg)
|
|
|
|
|
return ArgumentConstraints::RegexpConstraint.new(arg) if arg.is_a?(Regexp)
|
|
|
|
|
return ArgumentConstraints::EqualityProxy.new(arg)
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
|
|
|
|
|
2008-11-29 12:00:06 -05:00
|
|
|
def is_matcher?(obj)
|
|
|
|
|
return obj.respond_to?(:matches?) && obj.respond_to?(:description)
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
|
|
|
|
|
2008-11-29 12:00:06 -05:00
|
|
|
def args_match?(given_args)
|
|
|
|
|
match_any_args? || constraints_block_matches?(given_args) || constraints_match?(given_args)
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
|
|
|
|
|
2008-11-29 12:00:06 -05:00
|
|
|
def constraints_block_matches?(given_args)
|
|
|
|
|
@constraints_block ? @constraints_block.call(*given_args) : nil
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
|
|
|
|
|
2008-11-29 12:00:06 -05:00
|
|
|
def constraints_match?(given_args)
|
|
|
|
|
@constraints == given_args
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
|
|
|
|
|
2008-11-29 12:00:06 -05:00
|
|
|
def match_any_args?
|
|
|
|
|
@match_any_args
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
2008-11-29 12:00:06 -05:00
|
|
|
|
2008-06-18 02:57:57 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|