diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-08 10:07:19 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-08 10:07:19 -0700 |
commit | 3df92d981bf1e7b65f3ad3b7132802fc18c95a04 (patch) | |
tree | e77e613f35a609c8d3df3218093c88bc7814b3fb /activesupport | |
parent | ce71606abad632c0f94f3e0d576b313a15b9d6af (diff) | |
download | rails-3df92d981bf1e7b65f3ad3b7132802fc18c95a04.tar.gz rails-3df92d981bf1e7b65f3ad3b7132802fc18c95a04.tar.bz2 rails-3df92d981bf1e7b65f3ad3b7132802fc18c95a04.zip |
adding test to demonstrate inconsistencies in the AS::Callbacks api
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/test/callbacks_test.rb | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/activesupport/test/callbacks_test.rb b/activesupport/test/callbacks_test.rb index f71e780c42..00663ae282 100644 --- a/activesupport/test/callbacks_test.rb +++ b/activesupport/test/callbacks_test.rb @@ -801,4 +801,45 @@ module CallbacksTest assert_equal ["two", "one", "three", "yielded"], model.record end end + + class AddCallbackTypeTest < ActiveSupport::TestCase + def build_class(callback, n = 10) + Class.new { + include ActiveSupport::Callbacks + define_callbacks :foo + n.times { set_callback :foo, callback } + } + end + + def test_class + calls = [] + callback = Class.new { + define_singleton_method(:before) { |o| calls << o } + } + build_class(callback).new.run_callbacks :foo + assert_equal 10, calls.length + end + + def test_lambda + calls = [] + build_class(->(o) { calls << o }).new.run_callbacks :foo + assert_equal 10, calls.length + end + + def test_symbol + calls = [] + klass = build_class(:bar) + klass.class_eval { define_method(:bar) { calls << klass } } + klass.new.run_callbacks :foo + assert_equal 1, calls.length + end + + def test_string + calls = [] + klass = build_class("bar") + klass.class_eval { define_method(:bar) { calls << klass } } + klass.new.run_callbacks :foo + assert_equal 1, calls.length + end + end end |