diff options
author | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-09-23 11:46:33 +0000 |
---|---|---|
committer | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-09-23 11:46:33 +0000 |
commit | b166d4bc7c9710e1b6184659d2f51710228998f6 (patch) | |
tree | 97d7228c670ed87e3c39b77f7d96b97503bd170d /test | |
parent | f32fba70c5984f990503bdc5b3aac245117de4d6 (diff) | |
download | ruby-b166d4bc7c9710e1b6184659d2f51710228998f6.tar.gz |
* eval.c (rb_mod_refine): refine modules as well.
[ruby-core:76199] [Feature #12534]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56213 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_refinement.rb | 61 |
1 files changed, 54 insertions, 7 deletions
diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb index c3c2dbc61f..4f7918e810 100644 --- a/test/ruby/test_refinement.rb +++ b/test/ruby/test_refinement.rb @@ -345,17 +345,64 @@ class TestRefinement < Test::Unit::TestCase assert_equal([:c, :m1, :m2], x) end - def test_refine_module - m1 = Module.new - assert_raise(TypeError) do - Module.new { - refine m1 do + module RefineModule + module M + def foo + "M#foo" + end + + def bar + "M#bar" + end + + def baz + "M#baz" + end + end + + class C + include M + + def baz + "#{super} C#baz" + end + end + + module M2 + refine M do def foo - :m2 + "M@M2#foo" end + + def bar + "#{super} M@M2#bar" end - } + + def baz + "#{super} M@M2#baz" + end + end end + + using M2 + + def self.call_foo + C.new.foo + end + + def self.call_bar + C.new.bar + end + + def self.call_baz + C.new.baz + end + end + + def test_refine_module + assert_equal("M@M2#foo", RefineModule.call_foo) + assert_equal("M#bar M@M2#bar", RefineModule.call_bar) + assert_equal("M#baz C#baz", RefineModule.call_baz) end def test_refine_neither_class_nor_module |