1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

check_funcall_missing() should call respond_to_missing?(name, priv=true)

* Improve spec rather than constrain implementation.
* Coercion ignores visibility in Ruby.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
eregon 2017-09-20 22:02:10 +00:00
parent 2dd35a7453
commit 5193ad1319
2 changed files with 21 additions and 7 deletions

View file

@ -111,18 +111,34 @@ describe "Array#flatten" do
lambda { [@obj].flatten }.should raise_error(TypeError)
end
ruby_version_is ""..."2.5" do
it "calls respond_to_missing?(:to_ary, false) to try coercing" do
def @obj.respond_to_missing?(*args) ScratchPad << args; false end
[@obj].flatten.should == [@obj]
ScratchPad.recorded.should == [[:to_ary, false]]
end
end
ruby_version_is "2.5" do
it "calls respond_to_missing?(:to_ary, true) to try coercing" do
def @obj.respond_to_missing?(*args) ScratchPad << args; false end
[@obj].flatten.should == [@obj]
ScratchPad.recorded.should == [[:to_ary, true]]
end
end
it "does not call #to_ary if not defined when #respond_to_missing? returns false" do
def @obj.respond_to_missing?(*args) ScratchPad << args; false end
def @obj.respond_to_missing?(name, priv) ScratchPad << name; false end
[@obj].flatten.should == [@obj]
ScratchPad.recorded.should == [[:to_ary, false]]
ScratchPad.recorded.should == [:to_ary]
end
it "calls #to_ary if not defined when #respond_to_missing? returns true" do
def @obj.respond_to_missing?(*args) ScratchPad << args; true end
def @obj.respond_to_missing?(name, priv) ScratchPad << name; true end
lambda { [@obj].flatten }.should raise_error(NoMethodError)
ScratchPad.recorded.should == [[:to_ary, false]]
ScratchPad.recorded.should == [:to_ary]
end
it "calls #method_missing if defined" do