Class: RSpec::Mocks::ArgumentListMatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/mocks/argument_list_matcher.rb

Overview

Wrapper for matching arguments against a list of expected values. Used by the with method on a MessageExpectation:

object.should_receive(:message).with(:a, 'b', 3)
object.message(:a, 'b', 3)

Values passed to with can be literal values or argument matchers that match against the real objects .e.g.

object.should_receive(:message).with(hash_including(:a => 'b'))

Can also be used directly to match the contents of any Array. This enables 3rd party mocking libs to take advantage of rspec's argument matching without using the rest of rspec-mocks.

require 'rspec/mocks/argument_list_matcher'
include RSpec::Mocks::ArgumentMatchers
arg_list_matcher = RSpec::Mocks::ArgumentListMatcher.new(123, hash_including(:a => 'b'))
arg_list_matcher.args_match?(123, :a => 'b')

See Also:

Instance Method Summary (collapse)

Constructor Details

- (ArgumentListMatcher) initialize(*expected_args)

Initializes an ArgumentListMatcher with a collection of literal values and/or argument matchers, or a block that handles the evaluation for you.

Parameters:

  • *expected_args (Array)

    a list of expected literals and/or argument matchers

  • block (Block)

    a block with arity matching the expected

See Also:

41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/rspec/mocks/argument_list_matcher.rb', line 41
def initialize(*expected_args, &block)
  @expected_args = expected_args
  @block = expected_args.empty? ? block : nil
  @match_any_args = false
  @matchers = nil
  case expected_args.first
  when ArgumentMatchers::AnyArgsMatcher
    @match_any_args = true
  when ArgumentMatchers::NoArgsMatcher
    @matchers = []
  else
    @matchers = expected_args.collect {|arg| matcher_for(arg)}
  end
end

Instance Method Details

- (Boolean) args_match?(*args)

Matches each element in the expected_args against the element in the same position of the arguments passed to new.

Parameters:

  • *args (Array)

Returns:

  • (Boolean)

See Also:

64
65
66
# File 'lib/rspec/mocks/argument_list_matcher.rb', line 64
def args_match?(*args)
  match_any_args? || block_passes?(*args) || matchers_match?(*args)
end