class Spec::Matchers::RaiseError

:nodoc:

def actual_error

def actual_error
  @actual_error.nil? ? " but nothing was raised" : ", got #{@actual_error.inspect}"
end

def description

def description
  "raise #{expected_error}"
end

def expected_error

def expected_error
  case @expected_message
  when nil
    @expected_error
  when Regexp
    "#{@expected_error} with message matching #{@expected_message.inspect}"
  else
    "#{@expected_error} with #{@expected_message.inspect}"
  end
end

def failure_message

def failure_message
  return "expected #{expected_error}#{actual_error}" if @raised_other || !@raised_expected_error
end

def initialize(error_or_message=Exception, message=nil)

:nodoc:
def initialize(error_or_message=Exception, message=nil)
  if String === error_or_message
    @expected_error = Exception
    @expected_message = error_or_message
  else
    @expected_error = error_or_message
    @expected_message = message
  end
end

def matches?(proc)

def matches?(proc)
  @raised_expected_error = false
  @raised_other = false
  begin
    proc.call
  rescue @expected_error => @actual_error
    if @expected_message.nil?
      @raised_expected_error = true
    else
      case @expected_message
      when Regexp
        if @expected_message =~ @actual_error.message
          @raised_expected_error = true
        else
          @raised_other = true
        end
      else
        if @expected_message == @actual_error.message
          @raised_expected_error = true
        else
          @raised_other = true
        end
      end
    end
  rescue => @actual_error
    @raised_other = true
  ensure
    return @raised_expected_error
  end
end

def negative_failure_message

def negative_failure_message
  "expected no #{expected_error}#{actual_error}"
end