diff options
-rw-r--r-- | test/ruby/envutil.rb | 13 | ||||
-rw-r--r-- | test/ruby/test_class.rb | 50 | ||||
-rw-r--r-- | test/ruby/test_module.rb | 28 |
3 files changed, 71 insertions, 20 deletions
diff --git a/test/ruby/envutil.rb b/test/ruby/envutil.rb index 3aeb54f935..2fc6143176 100644 --- a/test/ruby/envutil.rb +++ b/test/ruby/envutil.rb @@ -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 diff --git a/test/ruby/test_class.rb b/test/ruby/test_class.rb index 382dbb9cc3..7e072c27b7 100644 --- a/test/ruby/test_class.rb +++ b/test/ruby/test_class.rb @@ -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 diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index 0588f46831..8829a3dcf1 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -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 |