Fix up Rubinius specific library specs.
[rbx.git] / test / bfts / test_exception.rb
blobbeba424f440212c9b33e2d574b2157e8a49824c1
1 require 'rubicon_testcase'
3 class TestException < Test::Unit::TestCase
5   MSG = "duck"
7   def test_s_exception
8     e = Exception.exception
9     assert_equal(Exception, e.class)
11     e = Exception.exception(MSG)
12     assert_equal(MSG, e.message)
13   end
15   def test_backtrace
16     assert_nil(Exception.exception.backtrace)
17     begin
18       line=__LINE__; file=__FILE__; raise MSG
19     rescue RuntimeError => detail
20       assert_equal(RuntimeError, detail.class)
21       assert_equal(MSG, detail.message)
22       expected = "#{file}:#{line}:in `test_backtrace'"
23       assert_equal(expected, detail.backtrace[0])
24     end
25   end
27   def test_exception
28     e = IOError.new
29     assert_equal(IOError, e.class)
30     assert_equal(IOError, e.exception.class)
31     assert_equal(e,       e.exception)
33     e = IOError.new
34     e1 = e.exception(MSG)
35     assert_equal(IOError, e1.class)
36     assert_equal(MSG,     e1.message)
37   end
39   def test_message
40     e = IOError.new(MSG)
41     assert_equal(MSG, e.message)
42   end
44   def test_set_backtrace
45     e = IOError.new
46     a = %w( here there everywhere )
47     assert_equal(a, e.set_backtrace(a))
48     assert_equal(a, e.backtrace)
49   end
51   # FIX: this is retardedly complex
52   # exercise bug in Exception#set_backtrace, see [ruby-talk:96273].
53   class Problem # helper class for #test_set_backtrace2
54     STACK = %w(a:0:A b:1:B c:2:C)
55     def self.mk_problem
56       raise IOError, "got nuked"
57     rescue IOError => e
58       error = IOError.new("got nuked")
59       error.set_backtrace(STACK)
60       raise error
61     end
62     def self.mk_exception
63       begin
64         self.mk_problem
65         raise "should not happen"
66       rescue IOError => e
67         return e
68       end
69     end
70   end
71   def test_set_backtrace2
72     e = Problem.mk_exception
73     assert_equal("got nuked", e.message)
74     # this is how set_backtrace is suppose to work
75     assert_equal(Problem::STACK, e.backtrace)
76   end
77 end