summaryrefslogtreecommitdiff
path: root/spec/ruby/core/module
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2024-02-12 10:56:33 +0100
committerBenoit Daloze <eregontp@gmail.com>2024-02-12 10:56:33 +0100
commitb19d2409be0b7bac65e6e54cfb3bedc61419ec01 (patch)
tree9046a7aea28aa043053acc473646b40828ec3736 /spec/ruby/core/module
parent90a746d246d51d105d7f3e0d1c2ddf7994dd2d4b (diff)
Update to ruby/spec@ce834ad
Diffstat (limited to 'spec/ruby/core/module')
-rw-r--r--spec/ruby/core/module/prepend_spec.rb33
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