2003-09-04 12:18:59 -04:00
|
|
|
require 'test/unit'
|
2011-12-13 09:50:12 -05:00
|
|
|
require 'tempfile'
|
2008-05-14 08:52:17 -04:00
|
|
|
require_relative 'envutil'
|
2003-09-04 12:18:59 -04:00
|
|
|
|
|
|
|
class TestException < Test::Unit::TestCase
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_exception_rescued
|
2003-09-04 12:18:59 -04:00
|
|
|
begin
|
|
|
|
raise "this must be handled"
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_exception_retry
|
2012-08-06 09:06:16 -04:00
|
|
|
bad = true
|
2003-09-04 12:18:59 -04:00
|
|
|
begin
|
|
|
|
raise "this must be handled no.2"
|
|
|
|
rescue
|
2012-08-06 09:06:16 -04:00
|
|
|
if bad
|
|
|
|
bad = false
|
2003-09-04 12:18:59 -04:00
|
|
|
retry
|
|
|
|
assert(false)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
assert(true)
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_exception_in_rescue
|
2012-08-06 09:06:16 -04:00
|
|
|
string = "this must be handled no.3"
|
2013-10-09 04:43:12 -04:00
|
|
|
assert_raise_with_message(RuntimeError, string) do
|
2003-09-04 12:18:59 -04:00
|
|
|
begin
|
|
|
|
raise "exception in rescue clause"
|
2003-09-05 11:15:43 -04:00
|
|
|
rescue
|
2012-08-06 09:06:16 -04:00
|
|
|
raise string
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|
|
|
|
assert(false)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_exception_in_ensure
|
2012-08-06 09:06:16 -04:00
|
|
|
string = "exception in ensure clause"
|
2013-10-09 04:43:12 -04:00
|
|
|
assert_raise_with_message(RuntimeError, string) do
|
2003-09-04 12:18:59 -04:00
|
|
|
begin
|
|
|
|
raise "this must be handled no.4"
|
2003-09-05 11:15:43 -04:00
|
|
|
ensure
|
|
|
|
assert_instance_of(RuntimeError, $!)
|
|
|
|
assert_equal("this must be handled no.4", $!.message)
|
2003-09-04 12:18:59 -04:00
|
|
|
raise "exception in ensure clause"
|
|
|
|
end
|
|
|
|
assert(false)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_exception_ensure
|
2012-08-06 09:06:16 -04:00
|
|
|
bad = true
|
2003-09-04 12:18:59 -04:00
|
|
|
begin
|
|
|
|
begin
|
|
|
|
raise "this must be handled no.5"
|
|
|
|
ensure
|
2012-08-06 09:06:16 -04:00
|
|
|
bad = false
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|
|
|
|
rescue
|
|
|
|
end
|
2012-08-06 09:06:16 -04:00
|
|
|
assert(!bad)
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_exception_ensure_2 # just duplication?
|
2012-08-06 09:06:16 -04:00
|
|
|
bad = true
|
2003-09-04 12:18:59 -04:00
|
|
|
begin
|
|
|
|
begin
|
|
|
|
raise "this must be handled no.6"
|
|
|
|
ensure
|
2012-08-06 09:06:16 -04:00
|
|
|
bad = false
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|
|
|
|
rescue
|
|
|
|
end
|
2012-08-06 09:06:16 -04:00
|
|
|
assert(!bad)
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_break_ensure
|
2012-08-06 09:06:16 -04:00
|
|
|
bad = true
|
2003-09-04 12:18:59 -04:00
|
|
|
while true
|
|
|
|
begin
|
|
|
|
break
|
|
|
|
ensure
|
2012-08-06 09:06:16 -04:00
|
|
|
bad = false
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|
|
|
|
end
|
2012-08-06 09:06:16 -04:00
|
|
|
assert(!bad)
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_catch_throw
|
2003-09-04 12:18:59 -04:00
|
|
|
assert(catch(:foo) {
|
2012-03-16 04:38:20 -04:00
|
|
|
loop do
|
|
|
|
loop do
|
|
|
|
throw :foo, true
|
|
|
|
break
|
|
|
|
end
|
|
|
|
break
|
|
|
|
assert(false) # should no reach here
|
|
|
|
end
|
|
|
|
false
|
|
|
|
})
|
2012-10-19 09:22:03 -04:00
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2012-10-19 09:22:03 -04:00
|
|
|
def test_catch_throw_in_require
|
|
|
|
bug7185 = '[ruby-dev:46234]'
|
* test/csv/test_features.rb, test/logger/test_logger.rb
test/mkmf/test_have_macro.rb, test/net/http/test_http.rb,
test/openssl/test_config.rb, test/psych/test_encoding.rb,
test/psych/test_exception.rb, test/psych/test_psych.rb,
test/psych/test_tainted.rb, test/readline/test_readline.rb,
test/rexml/test_contrib.rb, test/ruby/test_autoload.rb,
test/ruby/test_beginendblock.rb, test/ruby/test_exception.rb,
test/ruby/test_file.rb, test/ruby/test_io.rb,
test/ruby/test_marshal.rb, test/ruby/test_process.rb,
test/ruby/test_require.rb, test/ruby/test_rubyoptions.rb,
test/syslog/test_syslog_logger.rb, test/webrick/test_httpauth.rb,
test/zlib/test_zlib.rb: Use Tempfile.create.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-04-20 19:03:52 -04:00
|
|
|
Tempfile.create(["dep", ".rb"]) {|t|
|
|
|
|
t.puts("throw :extdep, 42")
|
|
|
|
t.close
|
|
|
|
assert_equal(42, catch(:extdep) {require t.path}, bug7185)
|
|
|
|
}
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|
2003-10-04 14:06:19 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_else_no_exception
|
2003-10-04 14:06:19 -04:00
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-10-04 14:06:19 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_else_raised
|
2003-10-04 14:06:19 -04:00
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
raise
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
else
|
|
|
|
assert(false)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-10-04 14:06:19 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_else_nested_no_exception
|
2003-10-04 14:06:19 -04:00
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-10-04 14:06:19 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_else_nested_rescued
|
2003-10-04 14:06:19 -04:00
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
raise
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
else
|
|
|
|
assert(false)
|
|
|
|
end
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-10-04 14:06:19 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_else_nested_unrescued
|
2003-10-04 14:06:19 -04:00
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
|
|
|
assert(true)
|
|
|
|
raise
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
else
|
|
|
|
assert(false)
|
|
|
|
end
|
2012-08-06 09:06:37 -04:00
|
|
|
end
|
2003-10-04 14:06:19 -04:00
|
|
|
|
2012-08-06 09:06:37 -04:00
|
|
|
def test_else_nested_rescued_reraise
|
2003-10-04 14:06:19 -04:00
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
raise
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
else
|
|
|
|
assert(false)
|
|
|
|
end
|
|
|
|
assert(true)
|
|
|
|
raise
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
else
|
|
|
|
assert(false)
|
|
|
|
end
|
|
|
|
end
|
2008-05-14 08:52:17 -04:00
|
|
|
|
|
|
|
def test_raise_with_wrong_number_of_arguments
|
|
|
|
assert_raise(TypeError) { raise nil }
|
|
|
|
assert_raise(TypeError) { raise 1, 1 }
|
|
|
|
assert_raise(ArgumentError) { raise 1, 1, 1, 1 }
|
|
|
|
end
|
|
|
|
|
2014-01-30 01:16:15 -05:00
|
|
|
def test_type_error_message_encoding
|
|
|
|
c = eval("Module.new do break class C\u{4032}; self; end; end")
|
|
|
|
o = c.new
|
|
|
|
assert_raise_with_message(TypeError, /C\u{4032}/) do
|
|
|
|
""[o]
|
|
|
|
end
|
|
|
|
c.class_eval {def to_int; self; end}
|
|
|
|
assert_raise_with_message(TypeError, /C\u{4032}/) do
|
|
|
|
""[o]
|
|
|
|
end
|
|
|
|
c.class_eval {def to_a; self; end}
|
|
|
|
assert_raise_with_message(TypeError, /C\u{4032}/) do
|
|
|
|
[*o]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2008-05-14 08:52:17 -04:00
|
|
|
def test_errat
|
2008-07-15 11:26:04 -04:00
|
|
|
assert_in_out_err([], "p $@", %w(nil), [])
|
2008-05-14 08:52:17 -04:00
|
|
|
|
2008-07-15 11:26:04 -04:00
|
|
|
assert_in_out_err([], "$@ = 1", [], /\$! not set \(ArgumentError\)$/)
|
2008-05-14 08:52:17 -04:00
|
|
|
|
2008-07-15 11:26:04 -04:00
|
|
|
assert_in_out_err([], <<-INPUT, [], /backtrace must be Array of String \(TypeError\)$/)
|
|
|
|
begin
|
|
|
|
raise
|
|
|
|
rescue
|
|
|
|
$@ = 1
|
|
|
|
end
|
|
|
|
INPUT
|
2008-05-14 08:52:17 -04:00
|
|
|
|
2008-07-15 11:26:04 -04:00
|
|
|
assert_in_out_err([], <<-INPUT, [], /^foo: unhandled exception$/)
|
|
|
|
begin
|
|
|
|
raise
|
|
|
|
rescue
|
|
|
|
$@ = 'foo'
|
|
|
|
raise
|
|
|
|
end
|
|
|
|
INPUT
|
2008-05-14 08:52:17 -04:00
|
|
|
|
2008-07-15 11:26:04 -04:00
|
|
|
assert_in_out_err([], <<-INPUT, [], /^foo: unhandled exception\s+from bar\s+from baz$/)
|
|
|
|
begin
|
|
|
|
raise
|
|
|
|
rescue
|
|
|
|
$@ = %w(foo bar baz)
|
|
|
|
raise
|
|
|
|
end
|
|
|
|
INPUT
|
2008-05-14 08:52:17 -04:00
|
|
|
end
|
2009-07-16 05:28:12 -04:00
|
|
|
|
2010-01-27 09:25:19 -05:00
|
|
|
def test_thread_signal_location
|
2013-04-19 06:41:57 -04:00
|
|
|
_, stderr, _ = EnvUtil.invoke_ruby("--disable-gems -d", <<-RUBY, false, true)
|
2010-01-05 05:34:00 -05:00
|
|
|
Thread.start do
|
|
|
|
begin
|
|
|
|
Process.kill(:INT, $$)
|
|
|
|
ensure
|
|
|
|
raise "in ensure"
|
|
|
|
end
|
|
|
|
end.join
|
|
|
|
RUBY
|
|
|
|
assert_not_match(/:0/, stderr, "[ruby-dev:39116]")
|
|
|
|
end
|
2010-01-22 10:03:32 -05:00
|
|
|
|
|
|
|
def test_errinfo
|
|
|
|
begin
|
|
|
|
raise "foo"
|
|
|
|
assert(false)
|
|
|
|
rescue => e
|
|
|
|
assert_equal(e, $!)
|
|
|
|
1.times { assert_equal(e, $!) }
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal(nil, $!)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_inspect
|
|
|
|
assert_equal("#<Exception: Exception>", Exception.new.inspect)
|
|
|
|
|
|
|
|
e = Class.new(Exception)
|
|
|
|
e.class_eval do
|
|
|
|
def to_s; ""; end
|
|
|
|
end
|
|
|
|
assert_equal(e.inspect, e.new.inspect)
|
|
|
|
end
|
|
|
|
|
2013-10-28 00:11:20 -04:00
|
|
|
def test_to_s
|
|
|
|
e = StandardError.new("foo")
|
|
|
|
assert_equal("foo", e.to_s)
|
|
|
|
|
|
|
|
def (s = Object.new).to_s
|
|
|
|
"bar"
|
|
|
|
end
|
|
|
|
e = StandardError.new(s)
|
|
|
|
assert_equal("bar", e.to_s)
|
|
|
|
end
|
|
|
|
|
2010-01-22 10:03:32 -05:00
|
|
|
def test_set_backtrace
|
|
|
|
e = Exception.new
|
|
|
|
|
|
|
|
e.set_backtrace("foo")
|
|
|
|
assert_equal(["foo"], e.backtrace)
|
|
|
|
|
|
|
|
e.set_backtrace(%w(foo bar baz))
|
|
|
|
assert_equal(%w(foo bar baz), e.backtrace)
|
|
|
|
|
|
|
|
assert_raise(TypeError) { e.set_backtrace(1) }
|
|
|
|
assert_raise(TypeError) { e.set_backtrace([1]) }
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_exit_success_p
|
|
|
|
begin
|
|
|
|
exit
|
|
|
|
rescue SystemExit => e
|
|
|
|
end
|
2011-09-11 23:42:39 -04:00
|
|
|
assert_send([e, :success?], "success by default")
|
|
|
|
|
|
|
|
begin
|
|
|
|
exit(true)
|
|
|
|
rescue SystemExit => e
|
|
|
|
end
|
|
|
|
assert_send([e, :success?], "true means success")
|
|
|
|
|
|
|
|
begin
|
|
|
|
exit(false)
|
|
|
|
rescue SystemExit => e
|
|
|
|
end
|
|
|
|
assert_not_send([e, :success?], "false means failure")
|
2010-01-22 10:03:32 -05:00
|
|
|
|
|
|
|
begin
|
|
|
|
abort
|
|
|
|
rescue SystemExit => e
|
|
|
|
end
|
2011-09-11 23:42:39 -04:00
|
|
|
assert_not_send([e, :success?], "abort means failure")
|
2010-01-22 10:03:32 -05:00
|
|
|
end
|
2010-05-04 05:51:27 -04:00
|
|
|
|
|
|
|
def test_nomethoderror
|
|
|
|
bug3237 = '[ruby-core:29948]'
|
|
|
|
str = "\u2600"
|
|
|
|
id = :"\u2604"
|
2013-10-09 04:43:12 -04:00
|
|
|
msg = "undefined method `#{id}' for #{str.inspect}:String"
|
|
|
|
assert_raise_with_message(NoMethodError, msg, bug3237) do
|
|
|
|
str.__send__(id)
|
|
|
|
end
|
2010-05-04 05:51:27 -04:00
|
|
|
end
|
2010-10-11 01:15:03 -04:00
|
|
|
|
|
|
|
def test_errno
|
|
|
|
assert_equal(Encoding.find("locale"), Errno::EINVAL.new.message.encoding)
|
|
|
|
end
|
2011-12-07 04:56:01 -05:00
|
|
|
|
|
|
|
def test_too_many_args_in_eval
|
|
|
|
bug5720 = '[ruby-core:41520]'
|
|
|
|
arg_string = (0...140000).to_a.join(", ")
|
|
|
|
assert_raise(SystemStackError, bug5720) {eval "raise(#{arg_string})"}
|
|
|
|
end
|
2011-12-08 08:50:10 -05:00
|
|
|
|
|
|
|
def test_systemexit_new
|
|
|
|
e0 = SystemExit.new
|
|
|
|
assert_equal(0, e0.status)
|
|
|
|
assert_equal("SystemExit", e0.message)
|
|
|
|
ei = SystemExit.new(3)
|
|
|
|
assert_equal(3, ei.status)
|
|
|
|
assert_equal("SystemExit", ei.message)
|
|
|
|
es = SystemExit.new("msg")
|
|
|
|
assert_equal(0, es.status)
|
|
|
|
assert_equal("msg", es.message)
|
|
|
|
eis = SystemExit.new(7, "msg")
|
|
|
|
assert_equal(7, eis.status)
|
|
|
|
assert_equal("msg", eis.message)
|
2011-12-10 20:48:21 -05:00
|
|
|
|
|
|
|
bug5728 = '[ruby-dev:44951]'
|
|
|
|
et = SystemExit.new(true)
|
|
|
|
assert_equal(true, et.success?, bug5728)
|
|
|
|
assert_equal("SystemExit", et.message, bug5728)
|
|
|
|
ef = SystemExit.new(false)
|
|
|
|
assert_equal(false, ef.success?, bug5728)
|
|
|
|
assert_equal("SystemExit", ef.message, bug5728)
|
|
|
|
ets = SystemExit.new(true, "msg")
|
|
|
|
assert_equal(true, ets.success?, bug5728)
|
|
|
|
assert_equal("msg", ets.message, bug5728)
|
|
|
|
efs = SystemExit.new(false, "msg")
|
|
|
|
assert_equal(false, efs.success?, bug5728)
|
|
|
|
assert_equal("msg", efs.message, bug5728)
|
2011-12-08 08:50:10 -05:00
|
|
|
end
|
2011-12-13 09:50:12 -05:00
|
|
|
|
|
|
|
def test_exception_in_name_error_to_str
|
|
|
|
bug5575 = '[ruby-core:41612]'
|
* test/csv/test_features.rb, test/logger/test_logger.rb
test/mkmf/test_have_macro.rb, test/net/http/test_http.rb,
test/openssl/test_config.rb, test/psych/test_encoding.rb,
test/psych/test_exception.rb, test/psych/test_psych.rb,
test/psych/test_tainted.rb, test/readline/test_readline.rb,
test/rexml/test_contrib.rb, test/ruby/test_autoload.rb,
test/ruby/test_beginendblock.rb, test/ruby/test_exception.rb,
test/ruby/test_file.rb, test/ruby/test_io.rb,
test/ruby/test_marshal.rb, test/ruby/test_process.rb,
test/ruby/test_require.rb, test/ruby/test_rubyoptions.rb,
test/syslog/test_syslog_logger.rb, test/webrick/test_httpauth.rb,
test/zlib/test_zlib.rb: Use Tempfile.create.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-04-20 19:03:52 -04:00
|
|
|
Tempfile.create(["test_exception_in_name_error_to_str", ".rb"]) do |t|
|
2012-03-16 04:38:18 -04:00
|
|
|
t.puts <<-EOC
|
2011-12-13 09:50:12 -05:00
|
|
|
begin
|
|
|
|
BasicObject.new.inspect
|
|
|
|
rescue
|
|
|
|
$!.inspect
|
|
|
|
end
|
|
|
|
EOC
|
* test/csv/test_features.rb, test/logger/test_logger.rb
test/mkmf/test_have_macro.rb, test/net/http/test_http.rb,
test/openssl/test_config.rb, test/psych/test_encoding.rb,
test/psych/test_exception.rb, test/psych/test_psych.rb,
test/psych/test_tainted.rb, test/readline/test_readline.rb,
test/rexml/test_contrib.rb, test/ruby/test_autoload.rb,
test/ruby/test_beginendblock.rb, test/ruby/test_exception.rb,
test/ruby/test_file.rb, test/ruby/test_io.rb,
test/ruby/test_marshal.rb, test/ruby/test_process.rb,
test/ruby/test_require.rb, test/ruby/test_rubyoptions.rb,
test/syslog/test_syslog_logger.rb, test/webrick/test_httpauth.rb,
test/zlib/test_zlib.rb: Use Tempfile.create.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-04-20 19:03:52 -04:00
|
|
|
t.close
|
|
|
|
assert_nothing_raised(NameError, bug5575) do
|
|
|
|
load(t.path)
|
|
|
|
end
|
2012-03-16 04:38:18 -04:00
|
|
|
end
|
2011-12-13 09:50:12 -05:00
|
|
|
end
|
2012-01-13 22:00:24 -05:00
|
|
|
|
|
|
|
def test_equal
|
|
|
|
bug5865 = '[ruby-core:41979]'
|
|
|
|
assert_equal(RuntimeError.new("a"), RuntimeError.new("a"), bug5865)
|
|
|
|
assert_not_equal(RuntimeError.new("a"), StandardError.new("a"), bug5865)
|
|
|
|
end
|
2012-01-14 04:36:18 -05:00
|
|
|
|
|
|
|
def test_exception_in_exception_equal
|
|
|
|
bug5865 = '[ruby-core:41979]'
|
* test/csv/test_features.rb, test/logger/test_logger.rb
test/mkmf/test_have_macro.rb, test/net/http/test_http.rb,
test/openssl/test_config.rb, test/psych/test_encoding.rb,
test/psych/test_exception.rb, test/psych/test_psych.rb,
test/psych/test_tainted.rb, test/readline/test_readline.rb,
test/rexml/test_contrib.rb, test/ruby/test_autoload.rb,
test/ruby/test_beginendblock.rb, test/ruby/test_exception.rb,
test/ruby/test_file.rb, test/ruby/test_io.rb,
test/ruby/test_marshal.rb, test/ruby/test_process.rb,
test/ruby/test_require.rb, test/ruby/test_rubyoptions.rb,
test/syslog/test_syslog_logger.rb, test/webrick/test_httpauth.rb,
test/zlib/test_zlib.rb: Use Tempfile.create.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-04-20 19:03:52 -04:00
|
|
|
Tempfile.create(["test_exception_in_exception_equal", ".rb"]) do |t|
|
2012-03-16 04:38:18 -04:00
|
|
|
t.puts <<-EOC
|
2012-01-14 04:36:18 -05:00
|
|
|
o = Object.new
|
|
|
|
def o.exception(arg)
|
|
|
|
end
|
2012-03-16 04:38:22 -04:00
|
|
|
_ = RuntimeError.new("a") == o
|
* test/csv/test_features.rb, test/logger/test_logger.rb
test/mkmf/test_have_macro.rb, test/net/http/test_http.rb,
test/openssl/test_config.rb, test/psych/test_encoding.rb,
test/psych/test_exception.rb, test/psych/test_psych.rb,
test/psych/test_tainted.rb, test/readline/test_readline.rb,
test/rexml/test_contrib.rb, test/ruby/test_autoload.rb,
test/ruby/test_beginendblock.rb, test/ruby/test_exception.rb,
test/ruby/test_file.rb, test/ruby/test_io.rb,
test/ruby/test_marshal.rb, test/ruby/test_process.rb,
test/ruby/test_require.rb, test/ruby/test_rubyoptions.rb,
test/syslog/test_syslog_logger.rb, test/webrick/test_httpauth.rb,
test/zlib/test_zlib.rb: Use Tempfile.create.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-04-20 19:03:52 -04:00
|
|
|
EOC
|
|
|
|
t.close
|
|
|
|
assert_nothing_raised(ArgumentError, bug5865) do
|
|
|
|
load(t.path)
|
|
|
|
end
|
2012-01-14 04:36:18 -05:00
|
|
|
end
|
|
|
|
end
|
2012-08-08 03:52:19 -04:00
|
|
|
|
|
|
|
Bug4438 = '[ruby-core:35364]'
|
|
|
|
|
|
|
|
def test_rescue_single_argument
|
|
|
|
assert_raise(TypeError, Bug4438) do
|
|
|
|
begin
|
|
|
|
raise
|
|
|
|
rescue 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_rescue_splat_argument
|
|
|
|
assert_raise(TypeError, Bug4438) do
|
|
|
|
begin
|
|
|
|
raise
|
|
|
|
rescue *Array(1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2012-10-02 13:25:10 -04:00
|
|
|
|
|
|
|
def test_to_s_taintness_propagation
|
|
|
|
for exc in [Exception, NameError]
|
|
|
|
m = "abcdefg"
|
|
|
|
e = exc.new(m)
|
|
|
|
e.taint
|
|
|
|
s = e.to_s
|
|
|
|
assert_equal(false, m.tainted?,
|
|
|
|
"#{exc}#to_s should not propagate taintness")
|
|
|
|
assert_equal(false, s.tainted?,
|
|
|
|
"#{exc}#to_s should not propagate taintness")
|
|
|
|
end
|
2012-11-20 07:34:37 -05:00
|
|
|
|
2012-10-02 13:25:10 -04:00
|
|
|
o = Object.new
|
|
|
|
def o.to_str
|
|
|
|
"foo"
|
|
|
|
end
|
|
|
|
o.taint
|
|
|
|
e = NameError.new(o)
|
|
|
|
s = e.to_s
|
|
|
|
assert_equal(false, s.tainted?)
|
|
|
|
end
|
2013-08-06 04:33:05 -04:00
|
|
|
|
|
|
|
def m;
|
|
|
|
m &->{return 0};
|
|
|
|
42;
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_stackoverflow
|
|
|
|
assert_raise(SystemStackError){m}
|
|
|
|
end
|
2013-11-10 08:16:33 -05:00
|
|
|
|
2013-11-18 08:47:56 -05:00
|
|
|
def test_machine_stackoverflow
|
|
|
|
bug9109 = '[ruby-dev:47804] [Bug #9109]'
|
|
|
|
assert_separately([], <<-SRC)
|
2013-11-20 04:01:42 -05:00
|
|
|
assert_raise(SystemStackError, #{bug9109.dump}) {
|
|
|
|
h = {a: ->{h[:a].call}}
|
|
|
|
h[:a].call
|
|
|
|
}
|
2013-11-18 08:47:56 -05:00
|
|
|
SRC
|
2013-12-10 09:02:16 -05:00
|
|
|
rescue SystemStackError
|
2013-11-18 08:47:56 -05:00
|
|
|
end
|
|
|
|
|
2014-01-27 07:53:48 -05:00
|
|
|
def test_machine_stackoverflow_by_define_method
|
|
|
|
bug9454 = '[ruby-core:60113] [Bug #9454]'
|
|
|
|
assert_separately([], <<-SRC)
|
|
|
|
assert_raise(SystemStackError, #{bug9454.dump}) {
|
|
|
|
define_method(:foo) {self.foo}
|
|
|
|
self.foo
|
|
|
|
}
|
|
|
|
SRC
|
2014-01-29 21:45:40 -05:00
|
|
|
rescue SystemStackError
|
2014-01-27 07:53:48 -05:00
|
|
|
end
|
|
|
|
|
2013-11-10 08:16:33 -05:00
|
|
|
def test_cause
|
|
|
|
msg = "[Feature #8257]"
|
2013-11-15 09:08:49 -05:00
|
|
|
cause = nil
|
2013-11-10 08:16:33 -05:00
|
|
|
e = assert_raise(StandardError) {
|
|
|
|
begin
|
|
|
|
raise msg
|
|
|
|
rescue => e
|
2013-11-15 09:08:49 -05:00
|
|
|
cause = e.cause
|
2013-11-10 08:16:33 -05:00
|
|
|
raise StandardError
|
|
|
|
end
|
|
|
|
}
|
2013-11-15 09:08:49 -05:00
|
|
|
assert_nil(cause, msg)
|
2013-11-10 08:16:33 -05:00
|
|
|
cause = e.cause
|
|
|
|
assert_instance_of(RuntimeError, cause, msg)
|
|
|
|
assert_equal(msg, cause.message, msg)
|
|
|
|
end
|
2013-11-15 09:08:49 -05:00
|
|
|
|
|
|
|
def test_cause_reraised
|
|
|
|
msg = "[Feature #8257]"
|
|
|
|
cause = nil
|
|
|
|
e = assert_raise(RuntimeError) {
|
|
|
|
begin
|
|
|
|
raise msg
|
|
|
|
rescue => e
|
|
|
|
raise e
|
|
|
|
end
|
|
|
|
}
|
|
|
|
assert_not_same(e, e.cause, "#{msg}: should not be recursive")
|
|
|
|
end
|
2013-12-31 09:49:16 -05:00
|
|
|
|
|
|
|
def test_raise_with_cause
|
|
|
|
msg = "[Feature #8257]"
|
|
|
|
cause = ArgumentError.new("foobar")
|
|
|
|
e = assert_raise(RuntimeError) {raise msg, cause: cause}
|
|
|
|
assert_same(cause, e.cause)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_cause_with_no_arguments
|
|
|
|
cause = ArgumentError.new("foobar")
|
|
|
|
assert_raise_with_message(ArgumentError, /with no arguments/) do
|
|
|
|
raise cause: cause
|
|
|
|
end
|
|
|
|
end
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|