summaryrefslogtreecommitdiff
path: root/lib/test/unit/assertions.rb
blob: 97cc2700b4a93e46dd9c47e6306ffdef7a0f30de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
############################################################
# This file is imported from a different project.
# DO NOT make modifications in this repo.
# File a patch instead and assign it to Ryan Davis
############################################################

require 'mini/test'

module Test; end
module Test::Unit # patch up bastards that that extend improperly.
  if defined? Assertions then
    warn "ARGH! someone defined Test::Unit::Assertions rather than requiring"
    CRAP_ASSERTIONS = Assertions
    remove_const :Assertions

    # this will break on junit and rubinius... *sigh*
    ObjectSpace.each_object(Module) do |offender|
      offender.send :include, ::Mini::Assertions if offender < CRAP_ASSERTIONS
    end rescue nil

    Test::Unit::TestCase.send :include, CRAP_ASSERTIONS
  end

  Assertions = ::Mini::Assertions

  module Assertions
    def self.included mod
      mod.send :include, Test::Unit::CRAP_ASSERTIONS
    end if defined? Test::Unit::CRAP_ASSERTIONS
  end
end

module Test::Unit
  module Assertions
    def assert_nothing_raised(*exp)
      msg = (Module === exp.last) ? "" : exp.pop
      noexc = exp.select {|e| not (Module === e and Exception >= e)}
      unless noexc.empty?
        noexc = *noexc if noexc.size == 1
        raise TypeError, "Should expect a class of exception, #{noexc.inspect}"
      end
      self._assertions += 1
      begin
        yield
      rescue Exception => e
        exp.include?(e.class) or raise
        raise(Mini::Assertion, exception_details(e, "#{msg}#{msg.empty? ? '' : ' '}Exception raised:"))
      end
    end

    def build_message(user_message, template_message, *args)
      user_message ||= ''
      user_message += ' ' unless user_message.empty?
      msg = template_message.split(/<\?>/).zip(args.map { |o| o.inspect })
      user_message + msg.join
    end

    alias assert_nothing_thrown assert_nothing_raised
    alias assert_raise          assert_raises
    alias assert_not_equal      refute_equal
    alias assert_no_match       refute_match
    alias assert_not_nil        refute_nil
    alias assert_not_same       refute_same

    private
    def _wrap_assertion
      yield
    end
  end
end