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

* test/ruby/test_{class,module}.rb (test_method_redefinition): refined.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25150 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2009-09-29 06:26:46 +00:00
parent f5654b4dfc
commit e6fb96e691
3 changed files with 71 additions and 20 deletions

View file

@ -65,6 +65,19 @@ module EnvUtil
stderr.close unless !stderr || stderr.closed?
end
module_function :rubyexec
def verbose_warning
class << (stderr = "")
alias write <<
end
stderr, $stderr, verbose, $VERBOSE = $stderr, stderr, $VERBOSE, true
yield stderr
ensure
stderr, $stderr, $VERBOSE = $stderr, stderr, verbose
return stderr
end
module_function :verbose_warning
end
module Test

View file

@ -98,46 +98,56 @@ class TestClass < Test::Unit::TestCase
assert_equal(nil, BasicObject.superclass)
end
def verbose_warning
class << (stderr = "")
alias write <<
end
stderr, $stderr, verbose, $VERBOSE = $stderr, stderr, $VERBOSE, true
yield
ensure
stderr, $stderr, $VERBOSE = $stderr, stderr, verbose
return stderr
end
def test_module_function
c = Class.new
assert_raise(TypeError) do
Module.instance_method(:module_function).bind(c).call(:foo)
end
end
stderr = verbose_warning do
Module.new do
def test_method_redefinition
stderr = EnvUtil.verbose_warning do
Class.new do
def foo; end
def foo; end
end
end
assert_match(/method redefined; discarding old foo/, stderr)
stderr = verbose_warning do
Module.new do
stderr = EnvUtil.verbose_warning do
Class.new do
def foo; end
alias bar foo
def foo; end
end
end
assert_equal("", stderr)
stderr = EnvUtil.verbose_warning do
Class.new do
def foo; end
alias bar foo
alias bar foo
end
end
assert_equal("", stderr)
stderr = verbose_warning do
Module.new do
module_function
stderr = EnvUtil.verbose_warning do
Class.new do
define_method(:foo) do end
def foo; end
module_function :foo
end
end
assert_equal("", stderr, '[ruby-dev:39397]')
assert_match(/method redefined; discarding old foo/, stderr)
stderr = EnvUtil.verbose_warning do
Class.new do
define_method(:foo) do end
alias bar foo
alias barf oo
end
end
assert_equal("", stderr)
end
def test_check_inheritable

View file

@ -786,4 +786,32 @@ class TestModule < Test::Unit::TestCase
assert_equal [:f, :g, :a, :a=], memo.shift
assert_equal mod.instance_method(:a=), memo.shift
end
def test_method_redefinition
stderr = EnvUtil.verbose_warning do
Module.new do
def foo; end
def foo; end
end
end
assert_match(/method redefined; discarding old foo/, stderr)
stderr = EnvUtil.verbose_warning do
Module.new do
def foo; end
alias bar foo
alias bar foo
end
end
assert_equal("", stderr)
stderr = EnvUtil.verbose_warning do
Module.new do
module_function
def foo; end
module_function :foo
end
end
assert_equal("", stderr, '[ruby-dev:39397]')
end
end