diff options
Diffstat (limited to 'spec/ruby')
-rw-r--r-- | spec/ruby/core/class/fixtures/callback_order.rb | 21 | ||||
-rw-r--r-- | spec/ruby/core/class/inherited_spec.rb | 13 | ||||
-rw-r--r-- | spec/ruby/optional/capi/class_spec.rb | 11 | ||||
-rw-r--r-- | spec/ruby/optional/capi/fixtures/class.rb | 10 |
4 files changed, 55 insertions, 0 deletions
diff --git a/spec/ruby/core/class/fixtures/callback_order.rb b/spec/ruby/core/class/fixtures/callback_order.rb new file mode 100644 index 0000000000..e82e0e6c19 --- /dev/null +++ b/spec/ruby/core/class/fixtures/callback_order.rb @@ -0,0 +1,21 @@ +module CoreClassSpecs + module Callbacks + class Base + def self.inherited(subclass) + subclass.const_set(:INHERITED_NAME, subclass.name) + ORDER << [:inherited, subclass, eval("defined?(#{subclass.name})")] + super + end + end + + ORDER = [] + + def self.const_added(const_name) + ORDER << [:const_added, const_name, eval("defined?(#{const_name})")] + super + end + + class Child < Base + end + end +end diff --git a/spec/ruby/core/class/inherited_spec.rb b/spec/ruby/core/class/inherited_spec.rb index 8ef8bb8c35..3868ba4089 100644 --- a/spec/ruby/core/class/inherited_spec.rb +++ b/spec/ruby/core/class/inherited_spec.rb @@ -1,5 +1,6 @@ require_relative '../../spec_helper' require_relative 'fixtures/classes' +require_relative 'fixtures/callback_order' describe "Class.inherited" do @@ -98,4 +99,16 @@ describe "Class.inherited" do -> { Class.new(top) }.should_not raise_error end + it "is invoked after the class is named when using class definition syntax" do + CoreClassSpecs::Callbacks::Child::INHERITED_NAME.should == "CoreClassSpecs::Callbacks::Child" + end + + ruby_version_is "3.5" do # https://bugs.ruby-lang.org/issues/21143 + it "is invoked before `const_added`" do + CoreClassSpecs::Callbacks::ORDER.should == [ + [:inherited, CoreClassSpecs::Callbacks::Child, nil], + [:const_added, :Child, "constant"], + ] + end + end end diff --git a/spec/ruby/optional/capi/class_spec.rb b/spec/ruby/optional/capi/class_spec.rb index a231245ebe..6d53b62b75 100644 --- a/spec/ruby/optional/capi/class_spec.rb +++ b/spec/ruby/optional/capi/class_spec.rb @@ -383,6 +383,17 @@ describe "C-API Class function" do CApiClassSpecs.const_get(cls.name) }.should raise_error(NameError, /wrong constant name/) end + + ruby_version_is "3.5" do + it "calls .inherited before .const_added" do + ScratchPad.record([]) + @s.rb_define_class_id_under(CApiClassSpecs::Callbacks, :Subclass, CApiClassSpecs::Callbacks) + ScratchPad.recorded.should == [ + [:inherited, "CApiClassSpecs::Callbacks::Subclass"], + [:const_added, :Subclass], + ] + end + end end describe "rb_define_class_id_under" do diff --git a/spec/ruby/optional/capi/fixtures/class.rb b/spec/ruby/optional/capi/fixtures/class.rb index b463e3b4c3..a738f2fd0f 100644 --- a/spec/ruby/optional/capi/fixtures/class.rb +++ b/spec/ruby/optional/capi/fixtures/class.rb @@ -101,4 +101,14 @@ class CApiClassSpecs module M end end + + class Callbacks + def self.inherited(child) + ScratchPad << [:inherited, child.name] + end + + def self.const_added(const_name) + ScratchPad << [:const_added, const_name] + end + end end |