Sha256: 823269f346249e70cb93878329bfdd5f92f23f3dd8707cb88fa5b4b594ec0940

Contents?: true

Size: 982 Bytes

Versions: 3

Compression:

Stored size: 982 Bytes

Contents

module BaconExpect; module Matcher
  class RaiseError
    def initialize(error_class = Exception, message = "")
      @error_class = error_class.is_a?(Class) ? error_class : Exception
      @error_message = (error_class.is_a?(String) || error_class.is_a?(Regexp)) ? error_class : message
    end

    def matches?(value, &block)
      begin
        block.call
        false
      rescue Exception => e
        @rescued_exception = e
        exception_matches(e)
      end
    end

    def exception_matches(e)
      e.is_a?(@error_class) && (
        (@error_message.is_a?(String) && e.message.include?(@error_message)) ||
            (@error_message.is_a?(Regexp) && @error_message.match(e.message))
      )
    end

    def fail!(subject)
      message = "Block expected to raise exception of type #{@error_class}"
      message += " but was #{@rescued_exception.class} #{@rescued_exception}" if @rescued_exception
      raise FailedExpectation.new(message)
    end
  end
end; end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bacon-expect-1.0.2 lib/bacon-expect/matchers/raise_error.rb
bacon-expect-1.0.1 lib/bacon-expect/matchers/raise_error.rb
bacon-expect-0.1 lib/bacon-expect/matchers/raise_error.rb