mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Update to ruby/spec@b6b7752
This commit is contained in:
parent
64d8c0815e
commit
b3fa158d1c
35 changed files with 652 additions and 56 deletions
|
@ -87,6 +87,31 @@ describe "Module#refine" do
|
|||
inner_self.public_instance_methods.should include(:blah)
|
||||
end
|
||||
|
||||
it "applies refinements to the module" do
|
||||
refinement = Module.new do
|
||||
refine(Enumerable) do
|
||||
def foo?
|
||||
self.any? ? "yes" : "no"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
foo = Class.new do
|
||||
using refinement
|
||||
|
||||
def initialize(items)
|
||||
@items = items
|
||||
end
|
||||
|
||||
def result
|
||||
@items.foo?
|
||||
end
|
||||
end
|
||||
|
||||
foo.new([]).result.should == "no"
|
||||
foo.new([1]).result.should == "yes"
|
||||
end
|
||||
|
||||
it "raises ArgumentError if not given a block" do
|
||||
-> do
|
||||
Module.new do
|
||||
|
@ -196,8 +221,10 @@ describe "Module#refine" do
|
|||
# * The included modules of C
|
||||
describe "method lookup" do
|
||||
it "looks in the object singleton class first" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo; "foo from refinement"; end
|
||||
end
|
||||
end
|
||||
|
@ -206,7 +233,7 @@ describe "Module#refine" do
|
|||
Module.new do
|
||||
using refinement
|
||||
|
||||
obj = ModuleSpecs::ClassWithFoo.new
|
||||
obj = refined_class.new
|
||||
class << obj
|
||||
def foo; "foo from singleton class"; end
|
||||
end
|
||||
|
@ -216,9 +243,66 @@ describe "Module#refine" do
|
|||
result.should == "foo from singleton class"
|
||||
end
|
||||
|
||||
it "looks in prepended modules from the refinement first" do
|
||||
it "looks in the included modules for builtin methods" do
|
||||
result = ruby_exe(<<-RUBY)
|
||||
a = Module.new do
|
||||
def /(other) quo(other) end
|
||||
end
|
||||
|
||||
refinement = Module.new do
|
||||
refine Integer do
|
||||
include a
|
||||
end
|
||||
end
|
||||
|
||||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = 1 / 2
|
||||
end
|
||||
|
||||
print result.class
|
||||
RUBY
|
||||
|
||||
result.should == 'Rational'
|
||||
end
|
||||
|
||||
it "looks in later included modules of the refined module first" do
|
||||
a = Module.new do
|
||||
def foo
|
||||
"foo from A"
|
||||
end
|
||||
end
|
||||
|
||||
include_me_later = Module.new do
|
||||
def foo
|
||||
"foo from IncludeMeLater"
|
||||
end
|
||||
end
|
||||
|
||||
c = Class.new do
|
||||
include a
|
||||
end
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine c do; end
|
||||
end
|
||||
|
||||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
c.include include_me_later
|
||||
result = c.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo from IncludeMeLater"
|
||||
end
|
||||
|
||||
it "looks in prepended modules from the refinement first" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine refined_class do
|
||||
include ModuleSpecs::IncludedModule
|
||||
prepend ModuleSpecs::PrependedModule
|
||||
|
||||
|
@ -229,15 +313,17 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.foo
|
||||
result = refined_class.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo from prepended module"
|
||||
end
|
||||
|
||||
it "looks in refinement then" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine(ModuleSpecs::ClassWithFoo) do
|
||||
refine(refined_class) do
|
||||
include ModuleSpecs::IncludedModule
|
||||
|
||||
def foo; "foo from refinement"; end
|
||||
|
@ -247,15 +333,17 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.foo
|
||||
result = refined_class.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo from refinement"
|
||||
end
|
||||
|
||||
it "looks in included modules from the refinement then" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
include ModuleSpecs::IncludedModule
|
||||
end
|
||||
end
|
||||
|
@ -263,21 +351,23 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.foo
|
||||
result = refined_class.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo from included module"
|
||||
end
|
||||
|
||||
it "looks in the class then" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine(ModuleSpecs::ClassWithFoo) { }
|
||||
refine(refined_class) { }
|
||||
end
|
||||
|
||||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.foo
|
||||
result = refined_class.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo"
|
||||
|
@ -287,12 +377,14 @@ describe "Module#refine" do
|
|||
|
||||
# methods in a subclass have priority over refinements in a superclass
|
||||
it "does not override methods in subclasses" do
|
||||
subclass = Class.new(ModuleSpecs::ClassWithFoo) do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
subclass = Class.new(refined_class) do
|
||||
def foo; "foo from subclass"; end
|
||||
end
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo; "foo from refinement"; end
|
||||
end
|
||||
end
|
||||
|
@ -308,8 +400,10 @@ describe "Module#refine" do
|
|||
|
||||
context "for methods accessed indirectly" do
|
||||
it "is honored by Kernel#send" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo; "foo from refinement"; end
|
||||
end
|
||||
end
|
||||
|
@ -317,15 +411,17 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.send :foo
|
||||
result = refined_class.new.send :foo
|
||||
end
|
||||
|
||||
result.should == "foo from refinement"
|
||||
end
|
||||
|
||||
it "is honored by BasicObject#__send__" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo; "foo from refinement"; end
|
||||
end
|
||||
end
|
||||
|
@ -333,7 +429,7 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.__send__ :foo
|
||||
result = refined_class.new.__send__ :foo
|
||||
end
|
||||
|
||||
result.should == "foo from refinement"
|
||||
|
@ -359,8 +455,10 @@ describe "Module#refine" do
|
|||
|
||||
ruby_version_is "" ... "2.6" do
|
||||
it "is not honored by Kernel#public_send" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo; "foo from refinement"; end
|
||||
end
|
||||
end
|
||||
|
@ -368,7 +466,7 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.public_send :foo
|
||||
result = refined_class.new.public_send :foo
|
||||
end
|
||||
|
||||
result.should == "foo"
|
||||
|
@ -377,8 +475,10 @@ describe "Module#refine" do
|
|||
|
||||
ruby_version_is "2.6" do
|
||||
it "is honored by Kernel#public_send" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo; "foo from refinement"; end
|
||||
end
|
||||
end
|
||||
|
@ -386,7 +486,7 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.public_send :foo
|
||||
result = refined_class.new.public_send :foo
|
||||
end
|
||||
|
||||
result.should == "foo from refinement"
|
||||
|
@ -590,8 +690,10 @@ describe "Module#refine" do
|
|||
|
||||
context "when super is called in a refinement" do
|
||||
it "looks in the included to refinery module" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
include ModuleSpecs::IncludedModule
|
||||
|
||||
def foo
|
||||
|
@ -603,15 +705,17 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.foo
|
||||
result = refined_class.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo from included module"
|
||||
end
|
||||
|
||||
it "looks in the refined class" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo
|
||||
super
|
||||
end
|
||||
|
@ -621,7 +725,7 @@ describe "Module#refine" do
|
|||
result = nil
|
||||
Module.new do
|
||||
using refinement
|
||||
result = ModuleSpecs::ClassWithFoo.new.foo
|
||||
result = refined_class.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo"
|
||||
|
@ -631,8 +735,10 @@ describe "Module#refine" do
|
|||
# class even if there is another refinement which has been activated
|
||||
# in the same context.
|
||||
it "looks in the refined class even if there is another active refinement" do
|
||||
refined_class = ModuleSpecs.build_refined_class
|
||||
|
||||
refinement = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo
|
||||
"foo from refinement"
|
||||
end
|
||||
|
@ -640,7 +746,7 @@ describe "Module#refine" do
|
|||
end
|
||||
|
||||
refinement_with_super = Module.new do
|
||||
refine ModuleSpecs::ClassWithFoo do
|
||||
refine refined_class do
|
||||
def foo
|
||||
super
|
||||
end
|
||||
|
@ -651,7 +757,7 @@ describe "Module#refine" do
|
|||
Module.new do
|
||||
using refinement
|
||||
using refinement_with_super
|
||||
result = ModuleSpecs::ClassWithFoo.new.foo
|
||||
result = refined_class.new.foo
|
||||
end
|
||||
|
||||
result.should == "foo"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue