Sha256: b79111dd2e6e45d3c67db362bcc46aec3625e9de3047c7f0e55232b68aeb6384

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

require 'mocha/parameters_matcher'
require 'mocha/raised_exception'
require 'mocha/return_values'
require 'mocha/thrown_object'
require 'mocha/yield_parameters'
require 'mocha/configuration'
require 'mocha/deprecation'

module Mocha
  class Invocation
    attr_reader :method_name

    def initialize(mock, method_name, *arguments, &block)
      @mock = mock
      @method_name = method_name
      @arguments = arguments
      @block = block
      @yields = []
      @result = nil
    end

    def call(yield_parameters = YieldParameters.new, return_values = ReturnValues.new)
      yield_parameters.next_invocation.each do |yield_args|
        @yields << ParametersMatcher.new(yield_args)
        if @block
          @block.call(*yield_args)
        else
          raise LocalJumpError unless Mocha.configuration.reinstate_undocumented_behaviour_from_v1_9?
          yield_args_description = ParametersMatcher.new(yield_args).mocha_inspect
          Deprecation.warning([
            "Stubbed method was instructed to yield #{yield_args_description}, but no block was given by invocation: #{call_description}.",
            'This will raise a LocalJumpError in the future.'
          ].join(' '))
        end
      end
      return_values.next(self)
    end

    def returned(value)
      @result = value
    end

    def raised(exception)
      @result = RaisedException.new(exception)
    end

    def threw(tag, value)
      @result = ThrownObject.new(tag, value)
    end

    def arguments
      @arguments.dup
    end

    def call_description
      "#{@mock.mocha_inspect}.#{@method_name}#{ParametersMatcher.new(@arguments).mocha_inspect}"
    end

    def short_call_description
      "#{@method_name}(#{@arguments.join(', ')})"
    end

    def result_description
      desc = "# => #{@result.mocha_inspect}"
      desc << " after yielding #{@yields.map(&:mocha_inspect).join(', then ')}" if @yields.any?
      desc
    end

    def full_description
      "\n  - #{call_description} #{result_description}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mocha-1.10.2 lib/mocha/invocation.rb