mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
332d1e52e6
`IO#reopen` internally uses dup syscall but some platforms don't support the syscall. re-assigning `$stderr` is enough to capture the interpreter's errors and warnings.
314 lines
3.4 KiB
Ruby
314 lines
3.4 KiB
Ruby
assert_equal %q{ok}, %q{
|
|
def m
|
|
:ng1
|
|
mm{
|
|
yield
|
|
}
|
|
:ng2
|
|
end
|
|
|
|
def mm
|
|
:ng3
|
|
yield
|
|
:ng4
|
|
end
|
|
|
|
m{
|
|
break :ok
|
|
}
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
3.times{
|
|
break :ok
|
|
}
|
|
}
|
|
assert_equal %q{}, %q{
|
|
catch(:foo){
|
|
throw :foo
|
|
}
|
|
}
|
|
assert_equal %q{false}, %q{
|
|
catch(:foo){
|
|
throw :foo, false
|
|
}
|
|
}
|
|
assert_equal %q{}, %q{
|
|
catch(:foo){
|
|
throw :foo, nil
|
|
}
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
catch(:foo){
|
|
throw :foo, :ok
|
|
}
|
|
}
|
|
assert_equal %q{}, %q{
|
|
catch(:foo){
|
|
1.times{
|
|
throw :foo
|
|
}
|
|
}
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
catch(:foo){
|
|
1.times{
|
|
throw :foo, :ok
|
|
}
|
|
}
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
catch(:foo){
|
|
catch(:bar){
|
|
throw :foo, :ok
|
|
}
|
|
:ng
|
|
}
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
catch(:foo){
|
|
catch(:bar){
|
|
1.times{
|
|
throw :foo, :ok
|
|
}
|
|
}
|
|
:ng
|
|
}
|
|
}
|
|
assert_equal %q{2}, %q{
|
|
module Enumerable
|
|
def all_?
|
|
self.each{|e|
|
|
unless yield(e)
|
|
return false
|
|
end
|
|
}
|
|
true
|
|
end
|
|
end
|
|
|
|
xxx = 0
|
|
[1,2].each{|bi|
|
|
[3,4].each{|bj|
|
|
[true, nil, true].all_?{|be| be}
|
|
break
|
|
}
|
|
xxx += 1
|
|
}
|
|
xxx
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
def m
|
|
yield
|
|
end
|
|
|
|
m{
|
|
begin
|
|
ensure
|
|
break :ok
|
|
end
|
|
}
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
def m
|
|
yield
|
|
:ok
|
|
end
|
|
i=0
|
|
m{
|
|
if i>10
|
|
i*i
|
|
else
|
|
i+=1
|
|
next
|
|
end
|
|
}
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
def m
|
|
yield
|
|
end
|
|
|
|
m{
|
|
next :ok
|
|
}
|
|
}
|
|
assert_equal %q{131}, %q{
|
|
def m
|
|
yield + 10
|
|
end
|
|
i=0
|
|
m{
|
|
if i>10
|
|
i*i
|
|
else
|
|
i+=1
|
|
redo
|
|
end
|
|
}
|
|
}
|
|
assert_match %r{Invalid retry}, %q{
|
|
$stderr = STDOUT
|
|
begin
|
|
eval %q{
|
|
1.times{
|
|
retry
|
|
}
|
|
}
|
|
rescue SyntaxError => e
|
|
e.message
|
|
end
|
|
}
|
|
assert_equal %q{3}, %q{
|
|
def m
|
|
return 3
|
|
end
|
|
m
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
def m
|
|
:ng1
|
|
mm{
|
|
return :ok
|
|
}
|
|
:ng2
|
|
end
|
|
|
|
def mm
|
|
:ng3
|
|
yield
|
|
:ng4
|
|
end
|
|
m
|
|
}
|
|
assert_equal %q{100}, %q{
|
|
$i = 0
|
|
def m
|
|
begin
|
|
iter{
|
|
return
|
|
}
|
|
ensure
|
|
$i = 100
|
|
end
|
|
end
|
|
|
|
def iter
|
|
yield
|
|
end
|
|
m
|
|
$i
|
|
}
|
|
assert_equal %q{ok}, %q{
|
|
def m
|
|
begin
|
|
raise
|
|
rescue
|
|
return :ok
|
|
end
|
|
:ng
|
|
end
|
|
m
|
|
}
|
|
assert_equal %q{1}, %q{
|
|
def m
|
|
begin
|
|
raise
|
|
rescue
|
|
return 1
|
|
end
|
|
end
|
|
|
|
m
|
|
}
|
|
assert_equal %q{1}, %q{
|
|
def m
|
|
begin
|
|
#
|
|
ensure
|
|
return 1
|
|
end
|
|
end
|
|
|
|
m
|
|
}
|
|
assert_equal 'ok', %q{
|
|
begin
|
|
catch {|t| throw t, :ok }
|
|
rescue ArgumentError
|
|
:ng
|
|
end
|
|
}, '[ruby-dev:31609]'
|
|
|
|
assert_equal "1", %q{
|
|
catch do |t|
|
|
begin
|
|
throw t, 1
|
|
2
|
|
ensure
|
|
3
|
|
end
|
|
end
|
|
}, "[ruby-dev:31698]"
|
|
|
|
assert_normal_exit %q{
|
|
f = 0
|
|
1.times do
|
|
begin
|
|
f += 1
|
|
ensure
|
|
redo unless f > 2
|
|
end
|
|
end
|
|
}
|
|
|
|
assert_normal_exit %q{
|
|
-> do
|
|
1.times do
|
|
begin
|
|
raise
|
|
rescue
|
|
return
|
|
end
|
|
end
|
|
end.call
|
|
}
|
|
|
|
assert_normal_exit %q{
|
|
while true
|
|
begin
|
|
raise
|
|
next
|
|
rescue
|
|
end
|
|
break
|
|
end
|
|
}, '[ruby-core:28172]'
|
|
|
|
assert_equal "true", %q{
|
|
class Object
|
|
def return_eigenclass
|
|
class << self
|
|
return self
|
|
end
|
|
end
|
|
end
|
|
s = "foo"
|
|
s.return_eigenclass == class << s; self; end
|
|
}, '[ruby-core:21379]'
|
|
|
|
assert_match %r{Invalid yield}, %q{
|
|
$stderr = STDOUT
|
|
begin
|
|
eval %q{
|
|
class Object
|
|
def yield_eigenclass
|
|
class << self
|
|
yield self
|
|
end
|
|
end
|
|
end
|
|
}
|
|
rescue SyntaxError => e
|
|
e.message
|
|
end
|
|
}
|