aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2017-04-09 20:07:12 +0930
committerMatthew Draper <matthew@trebex.net>2017-04-09 20:07:12 +0930
commitd928126725c5bc0019f0777e725e6c36f28dcb3e (patch)
tree13aa29336b5e872436494faa89550c613575eb97 /activesupport/test
parent071882e8ef6835cec7eb4e6ff965b99f4563b7aa (diff)
downloadrails-d928126725c5bc0019f0777e725e6c36f28dcb3e.tar.gz
rails-d928126725c5bc0019f0777e725e6c36f28dcb3e.tar.bz2
rails-d928126725c5bc0019f0777e725e6c36f28dcb3e.zip
delegate_missing_to should fall back to super
Diffstat (limited to 'activesupport/test')
-rw-r--r--activesupport/test/core_ext/module_test.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/activesupport/test/core_ext/module_test.rb b/activesupport/test/core_ext/module_test.rb
index 6d649f747c..085fd6592d 100644
--- a/activesupport/test/core_ext/module_test.rb
+++ b/activesupport/test/core_ext/module_test.rb
@@ -70,7 +70,23 @@ Product = Struct.new(:name) do
end
end
+module ExtraMissing
+ def method_missing(sym, *args)
+ if sym == :extra_missing
+ 42
+ else
+ super
+ end
+ end
+
+ def respond_to_missing?(sym, priv = false)
+ sym == :extra_missing || super
+ end
+end
+
DecoratedTester = Struct.new(:client) do
+ include ExtraMissing
+
delegate_missing_to :client
end
@@ -366,6 +382,12 @@ class ModuleTest < ActiveSupport::TestCase
assert_not DecoratedTester.new(@david).respond_to?(:my_fake_method, true)
end
+ def test_delegate_to_missing_respects_superclass_missing
+ assert_equal 42, DecoratedTester.new(@david).extra_missing
+
+ assert_respond_to DecoratedTester.new(@david), :extra_missing
+ end
+
def test_delegate_with_case
event = Event.new(Tester.new)
assert_equal 1, event.foo