From e6fb96e691aae4d004fa9a492048365876f68d64 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 29 Sep 2009 06:26:46 +0000 Subject: * 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 --- test/ruby/envutil.rb | 13 +++++++++++++ test/ruby/test_class.rb | 50 +++++++++++++++++++++++++++++------------------- test/ruby/test_module.rb | 28 +++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 20 deletions(-) (limited to 'test/ruby') 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 -- cgit v1.2.3