Sha256: 4682c5f6e96e1234e10b982a192822fbb19a47d76d1d5cd5feda2a6d76e20b03

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

module Mocktail
  class RecordsDemonstration
    extend T::Sig

    def record(demonstration, demo_config)
      cabinet = Mocktail.cabinet
      prior_call_count = Mocktail.cabinet.calls.dup.size

      begin
        cabinet.demonstration_in_progress = true
        ValidatesArguments.optional(demo_config.ignore_arity) do
          demonstration.call(Mocktail.matchers)
        end
      ensure
        cabinet.demonstration_in_progress = false
      end

      if prior_call_count + 1 == cabinet.calls.size
        cabinet.calls.pop
      elsif prior_call_count == cabinet.calls.size
        raise MissingDemonstrationError.new <<~MSG.tr("\n", " ")
          `stubs` & `verify` expect an invocation of a mocked method by a passed
          block, but no invocation occurred.
        MSG
      else
        raise AmbiguousDemonstrationError.new <<~MSG.tr("\n", " ")
          `stubs` & `verify` expect exactly one invocation of a mocked method,
          but #{cabinet.calls.size - prior_call_count} were detected. As a
          result, Mocktail doesn't know which invocation to stub or verify.
        MSG
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mocktail-2.0.0 lib/mocktail/records_demonstration.rb