aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-05-08 10:07:19 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-05-08 10:07:19 -0700
commit3df92d981bf1e7b65f3ad3b7132802fc18c95a04 (patch)
treee77e613f35a609c8d3df3218093c88bc7814b3fb
parentce71606abad632c0f94f3e0d576b313a15b9d6af (diff)
downloadrails-3df92d981bf1e7b65f3ad3b7132802fc18c95a04.tar.gz
rails-3df92d981bf1e7b65f3ad3b7132802fc18c95a04.tar.bz2
rails-3df92d981bf1e7b65f3ad3b7132802fc18c95a04.zip
adding test to demonstrate inconsistencies in the AS::Callbacks api
-rw-r--r--activesupport/test/callbacks_test.rb41
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