1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* test/ruby/test_beginendblock.rb: add tests for nested BEGIN/END.

* test/ruby/beginmainend.rb: add tests for nested BEGIN/END.

* test/ruby/endblockwarn.rb: new file added to test of END-in-method warning.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4716 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nahi 2003-10-07 06:27:11 +00:00
parent 0a5f6fd37d
commit cd8d08b532
5 changed files with 119 additions and 19 deletions

View file

@ -1,3 +1,12 @@
Tue Oct 7 15:23:09 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
* test/ruby/test_beginendblock.rb: add tests for nested BEGIN/END.
* test/ruby/beginmainend.rb: add tests for nested BEGIN/END.
* test/ruby/endblockwarn.rb: new file added to test of END-in-method
warning.
Tue Oct 7 12:23:47 2003 Tanaka Akira <akr@m17n.org>
* ext/fcntl/fcntl.c (Init_fcntl): define Fcntl::O_ACCMODE.

View file

@ -1,25 +1,31 @@
errout = ARGV.shift
BEGIN {
puts "begin1"
puts "b1"
local_begin1 = "local_begin1"
$global_begin1 = "global_begin1"
ConstBegin1 = "ConstBegin1"
}
BEGIN {
puts "begin2"
puts "b2"
BEGIN {
puts "b2-1"
}
}
# for scope check
raise if defined?(local_begin1)
raise unless defined?($global_begin1)
raise unless defined?(::ConstBegin1)
local_for_end2 = "end2"
$global_for_end1 = "end1"
local_for_end2 = "e2"
$global_for_end1 = "e1"
puts "main"
END {
puts local_for_end2
puts local_for_end2 # e2
}
END {
@ -29,27 +35,51 @@ END {
eval <<EOE
BEGIN {
puts "innerbegin1"
puts "b3"
BEGIN {
puts "b3-1"
}
}
BEGIN {
puts "innerbegin2"
puts "b4"
}
END {
puts "innerend2"
puts "e3"
}
END {
puts "innerend1"
puts "e4"
END {
puts "e4-1"
END {
puts "e4-1-1"
}
}
END {
puts "e4-2"
}
}
EOE
END {
exit
puts "should not be dumped"
END {
puts "not reached"
}
}
END {
puts $global_for_end1
puts $global_for_end1 # e1
END {
puts "e1-1"
}
}

26
test/ruby/endblockwarn.rb Normal file
View file

@ -0,0 +1,26 @@
BEGIN {
if errout = ARGV.shift
dir = File.dirname(File.expand_path(__FILE__))
basename = File.basename(__FILE__)
require "#{dir}/envutil"
STDERR.reopen(File.open(errout, "w"))
STDERR.sync = true
Dir.chdir(dir)
cmd = "\"#{EnvUtil.rubybin}\" \"#{basename}\""
exec(cmd)
exit!("must not reach here")
end
}
def end1
END {}
end
end1
eval <<EOE
def end2
END {}
end
EOE

View file

@ -1,27 +1,57 @@
require 'test/unit'
require 'tempfile'
require "#{File.dirname(File.expand_path(__FILE__))}/envutil"
class TestBeginEndBlock < Test::Unit::TestCase
DIR = File.dirname(File.expand_path(__FILE__))
def q(content)
"\"#{content}\""
end
def test_beginendblock
ruby = EnvUtil.rubybin
io = IO.popen("\"#{ruby}\" \"#{DIR}/beginmainend.rb\"")
assert_equal(%w(begin1 begin2 main innerbegin1 innerbegin2 end1 innerend1 innerend2 end2).join("\n") << "\n", io.read)
target = File.join(DIR, 'beginmainend.rb')
io = IO.popen("#{q(ruby)} #{q(target)}")
assert_equal(%w(b1 b2-1 b2 main b3-1 b3 b4 e1 e4 e3 e2 e4-2 e4-1 e1-1 e4-1-1), io.read.split)
io.close
end
def test_begininmethod
assert_raises(SyntaxError) do
eval("def foo; BEGIN {}; end")
end
assert_raises(SyntaxError) do
eval('eval("def foo; BEGIN {}; end")')
end
end
def test_endinmethod
verbose, $VERBOSE = $VERBOSE, nil
assert_nothing_raised(SyntaxError) do
eval("def foo; END {}; end")
end
ensure
$VERBOSE = verbose
def test_endblockwarn
ruby = EnvUtil.rubybin
# Use Tempfile to create temporary file path.
launcher = Tempfile.new(self.class.name)
errout = Tempfile.new(self.class.name)
launcher << <<EOF
errout = ARGV.shift
STDERR.reopen(File.open(errout, "w"))
STDERR.sync = true
Dir.chdir(#{q(DIR)})
cmd = "\\"#{ruby}\\" \\"endblockwarn.rb\\""
exec(cmd)
exit!("must not reach here")
EOF
launcher.close
launcherpath = launcher.path
errout.close
erroutpath = errout.path
system("#{q(ruby)} #{q(launcherpath)} #{q(erroutpath)}")
expected = <<EOW
endblockwarn.rb:16: warning: END in method; use at_exit
(eval):2: warning: END in method; use at_exit
EOW
assert_equal(expected, File.read(erroutpath))
# expecting Tempfile to unlink launcher and errout file.
end
end

View file

@ -13,6 +13,9 @@ class TestFloat < Test::Unit::TestCase
assert_equal(3, 2.6.round)
assert_equal(-2, (-2.4).truncate)
assert((13.4 % 1 - 0.4).abs < 0.0001)
end
def test_nan
nan = 0.0/0
def nan.test(v)
extend Test::Unit::Assertions
@ -36,7 +39,9 @@ class TestFloat < Test::Unit::TestCase
nan.test(-0.001);
nan.test(1.0/0);
nan.test(-1.0/0);
end
def test_precision
#s = "3.7517675036461267e+17"
#assert(s == sprintf("%.16e", s.to_f))
f = 3.7517675036461267e+17