diff options
author | Benoit Daloze <eregontp@gmail.com> | 2024-02-12 10:56:33 +0100 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2024-02-12 10:56:33 +0100 |
commit | b19d2409be0b7bac65e6e54cfb3bedc61419ec01 (patch) | |
tree | 9046a7aea28aa043053acc473646b40828ec3736 /spec/ruby/core/module | |
parent | 90a746d246d51d105d7f3e0d1c2ddf7994dd2d4b (diff) |
Update to ruby/spec@ce834ad
Diffstat (limited to 'spec/ruby/core/module')
-rw-r--r-- | spec/ruby/core/module/prepend_spec.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/spec/ruby/core/module/prepend_spec.rb b/spec/ruby/core/module/prepend_spec.rb index f80cfbcca1..c90fa9700e 100644 --- a/spec/ruby/core/module/prepend_spec.rb +++ b/spec/ruby/core/module/prepend_spec.rb @@ -737,6 +737,39 @@ describe "Module#prepend" do klass.ancestors.take(4).should == [klass, submod, mod, Object] end + # https://bugs.ruby-lang.org/issues/17423 + describe "when module already exists in ancestor chain" do + ruby_version_is ""..."3.1" do + it "does not modify the ancestor chain" do + m = Module.new do; end + a = Module.new do; end + b = Class.new do; end + + b.include(a) + a.prepend(m) + b.ancestors.take(4).should == [b, m, a, Object] + + b.prepend(m) + b.ancestors.take(4).should == [b, m, a, Object] + end + end + + ruby_version_is "3.1" do + it "modifies the ancestor chain" do + m = Module.new do; end + a = Module.new do; end + b = Class.new do; end + + b.include(a) + a.prepend(m) + b.ancestors.take(4).should == [b, m, a, Object] + + b.prepend(m) + b.ancestors.take(5).should == [m, b, m, a, Object] + end + end + end + describe "called on a module" do describe "included into a class" it "does not obscure the module's methods from reflective access" do |