blob: 3975e5208be2b34979f649e7e69f28ded96ade40 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
require_relative "../../../spec_helper"
require 'delegate'
describe "DelegateClass#respond_to_missing?" do
it "is used for respond_to? behavior of late-bound delegated methods" do
# From jruby/jruby#3151:
# DelegateClass subtracts Delegate's public API from the target class's instance_methods
# to determine which methods to eagerly delegate. If respond_to_missing? shows up in
# instance_methods, it will get delegated and skip the delegate-aware implementation
# in Delegate. Any methods that must be delegated through method_missing, like methods
# defined after the DelegateClass is created, will fail to dispatch properly.
cls = Class.new
dcls = DelegateClass(cls)
cdcls = Class.new(dcls)
cdcls_obj = cdcls.new(cls.new)
cdcls_obj.respond_to?(:foo).should == false
cls.class_eval { def foo; end }
cdcls_obj.respond_to?(:foo).should == true
end
end
|