Sha256: 7b02b95197de8f0897503181045cca7c6213e110ba943d5715b678bcfbdfd032

Contents?: true

Size: 1.25 KB

Versions: 6

Compression:

Stored size: 1.25 KB

Contents

class RaiseExceptionMatcher
  def initialize(exception, message, &block)
    @exception = exception
    @message = message
    @block = block
  end

  def matches?(proc)
    @result = proc.call
    return false
  rescue Object => @actual
    return false unless @actual.instance_of? @exception
    if @message then
      case @message
      when String then
        return false if @message != @actual.message
      when Regexp then
        return false if @message !~ @actual.message
      end
    end

    @block[@actual] if @block

    return true
  end

  def failure_message
    message = ["Expected #{@exception}#{%[ (#{@message})] if @message}"]

    if @actual then
      message << "but got #{@actual.class}#{%[ (#{@actual.message})] if @actual.message}"
    else
      message << "but no exception was raised (#@result was returned)"
    end

    message
  end

  def negative_failure_message
    message = ["Expected to not get #{@exception}#{%[ (#{@message})] if @message}", ""]
    message[1] = "but got #{@actual.class}#{%[ (#{@actual.message})] if @actual.message}" unless @actual.class == @exception
    message
  end
end

class Object
  def raise_exception(exception=Exception, message=nil, &block)
    RaiseExceptionMatcher.new(exception, message, &block)
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mspec-1.9.1 lib/mspec/matchers/raise_exception.rb
mspec-1.9.0 lib/mspec/matchers/raise_exception.rb
mspec-1.8.0 lib/mspec/matchers/raise_exception.rb
mspec-1.7.0 lib/mspec/matchers/raise_exception.rb
mspec-1.6.0 lib/mspec/matchers/raise_exception.rb
mspec-1.5.21 lib/mspec/matchers/raise_exception.rb