2003-09-04 12:18:59 -04:00
|
|
|
require 'test/unit'
|
2008-05-14 08:52:17 -04:00
|
|
|
require_relative 'envutil'
|
2003-09-04 12:18:59 -04:00
|
|
|
|
|
|
|
class TestException < Test::Unit::TestCase
|
2008-05-14 08:52:17 -04:00
|
|
|
def ruby(*r, &b)
|
|
|
|
EnvUtil.rubyexec(*r, &b)
|
|
|
|
end
|
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
def test_exception
|
|
|
|
begin
|
|
|
|
raise "this must be handled"
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
$bad = true
|
|
|
|
begin
|
|
|
|
raise "this must be handled no.2"
|
|
|
|
rescue
|
|
|
|
if $bad
|
|
|
|
$bad = false
|
|
|
|
retry
|
|
|
|
assert(false)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
assert(true)
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
# exception in rescue clause
|
|
|
|
$string = "this must be handled no.3"
|
2003-09-05 11:15:43 -04:00
|
|
|
e = assert_raises(RuntimeError) do
|
2003-09-04 12:18:59 -04:00
|
|
|
begin
|
|
|
|
raise "exception in rescue clause"
|
2003-09-05 11:15:43 -04:00
|
|
|
rescue
|
2003-09-04 12:18:59 -04:00
|
|
|
raise $string
|
|
|
|
end
|
|
|
|
assert(false)
|
|
|
|
end
|
2003-09-05 11:15:43 -04:00
|
|
|
assert_equal($string, e.message)
|
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
# exception in ensure clause
|
2003-09-05 11:15:43 -04:00
|
|
|
$string = "exception in ensure clause"
|
|
|
|
e = assert_raises(RuntimeError) 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
|
2003-09-05 11:15:43 -04:00
|
|
|
assert_equal($string, e.message)
|
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
$bad = true
|
|
|
|
begin
|
|
|
|
begin
|
|
|
|
raise "this must be handled no.5"
|
|
|
|
ensure
|
|
|
|
$bad = false
|
|
|
|
end
|
|
|
|
rescue
|
|
|
|
end
|
|
|
|
assert(!$bad)
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
$bad = true
|
|
|
|
begin
|
|
|
|
begin
|
|
|
|
raise "this must be handled no.6"
|
|
|
|
ensure
|
|
|
|
$bad = false
|
|
|
|
end
|
|
|
|
rescue
|
|
|
|
end
|
|
|
|
assert(!$bad)
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
$bad = true
|
|
|
|
while true
|
|
|
|
begin
|
|
|
|
break
|
|
|
|
ensure
|
|
|
|
$bad = false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
assert(!$bad)
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
assert(catch(:foo) {
|
|
|
|
loop do
|
|
|
|
loop do
|
|
|
|
throw :foo, true
|
|
|
|
break
|
|
|
|
end
|
|
|
|
break
|
|
|
|
assert(false) # should no reach here
|
|
|
|
end
|
|
|
|
false
|
|
|
|
})
|
2003-09-05 11:15:43 -04:00
|
|
|
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|
2003-10-04 14:06:19 -04:00
|
|
|
|
|
|
|
def test_else
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
|
|
|
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
raise
|
|
|
|
assert(false)
|
|
|
|
rescue
|
|
|
|
assert(true)
|
|
|
|
else
|
|
|
|
assert(false)
|
|
|
|
end
|
|
|
|
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
begin
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
|
|
|
assert(true)
|
|
|
|
rescue
|
|
|
|
assert(false)
|
|
|
|
else
|
|
|
|
assert(true)
|
|
|
|
end
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
def test_errat
|
|
|
|
ruby do |w, r, e|
|
|
|
|
w.puts "p $@"
|
|
|
|
w.close
|
|
|
|
assert_equal("nil", r.read.chomp)
|
|
|
|
assert_equal("", e.read.chomp)
|
|
|
|
end
|
|
|
|
|
|
|
|
ruby do |w, r, e|
|
|
|
|
w.puts "$@ = 1"
|
|
|
|
w.close
|
|
|
|
assert_equal("", r.read.chomp)
|
|
|
|
assert_match(/\$! not set \(ArgumentError\)$/, e.read.chomp)
|
|
|
|
end
|
|
|
|
|
|
|
|
ruby do |w, r, e|
|
|
|
|
w.puts "begin"
|
|
|
|
w.puts " raise"
|
|
|
|
w.puts "rescue"
|
|
|
|
w.puts " $@ = 1"
|
|
|
|
w.puts "end"
|
|
|
|
w.close
|
|
|
|
assert_equal("", r.read.chomp)
|
|
|
|
assert_match(/backtrace must be Array of String \(TypeError\)$/, e.read.chomp)
|
|
|
|
end
|
|
|
|
|
|
|
|
ruby do |w, r, e|
|
|
|
|
w.puts "begin"
|
|
|
|
w.puts " raise"
|
|
|
|
w.puts "rescue"
|
|
|
|
w.puts " $@ = 'foo'"
|
|
|
|
w.puts " raise"
|
|
|
|
w.puts "end"
|
|
|
|
w.close
|
|
|
|
assert_equal("", r.read.chomp)
|
|
|
|
assert_match(/^foo: unhandled exception$/, e.read.chomp)
|
|
|
|
end
|
|
|
|
|
|
|
|
ruby do |w, r, e|
|
|
|
|
w.puts "begin"
|
|
|
|
w.puts " raise"
|
|
|
|
w.puts "rescue"
|
|
|
|
w.puts " $@ = %w(foo bar baz)"
|
|
|
|
w.puts " raise"
|
|
|
|
w.puts "end"
|
|
|
|
w.close
|
|
|
|
assert_equal("", r.read.chomp)
|
|
|
|
assert_match(/^foo: unhandled exception\s+from bar\s+from baz$/, e.read.chomp)
|
|
|
|
end
|
|
|
|
end
|
2003-09-04 12:18:59 -04:00
|
|
|
end
|