class Spec::Mocks::ArgumentExpectation
def check_args(args)
def check_args(args) return true if @expected_params.nil? return true if @expected_params == args return constraints_match?(args) end
def constraints_match?(args)
def constraints_match?(args) return false if args.length != @expected_params.length @expected_params.each_index { |i| return false unless @expected_params[i].matches?(args[i]) } return true end
def convert_constraint(constraint)
def convert_constraint(constraint) if [:anything, :numeric, :boolean, :string].include?(constraint) case constraint when :anything instead = "anything()" when :boolean instead = "boolean()" when :numeric instead = "an_instance_of(Numeric)" when :string instead = "an_instance_of(String)" end warn_deprecated(constraint.inspect, instead) return @@constraint_classes[constraint].new(constraint) end return MatcherConstraint.new(constraint) if is_matcher?(constraint) return RegexpArgConstraint.new(constraint) if constraint.is_a?(Regexp) return LiteralArgConstraint.new(constraint) end
def initialize(args)
def initialize(args) @args = args if [:any_args] == args @expected_params = nil warn_deprecated(:any_args.inspect, "any_args()") elsif args.length == 1 && args[0].is_a?(AnyArgsConstraint) then @expected_params = nil elsif [:no_args] == args @expected_params = [] warn_deprecated(:no_args.inspect, "no_args()") elsif args.length == 1 && args[0].is_a?(NoArgsConstraint) then @expected_params = [] else @expected_params = process_arg_constraints(args) end end
def is_matcher?(obj)
def is_matcher?(obj) return obj.respond_to?(:matches?) && obj.respond_to?(:description) end
def process_arg_constraints(constraints)
def process_arg_constraints(constraints) constraints.collect do |constraint| convert_constraint(constraint) end end
def warn_deprecated(deprecated_method, instead)
def warn_deprecated(deprecated_method, instead) Kernel.warn "The #{deprecated_method} constraint is deprecated. Use #{instead} instead." end