aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/notifications_test.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2018-07-26 12:15:41 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2018-07-26 12:15:41 -0700
commit4cdedb571cc842ae9883a9b9754471ae3e82f698 (patch)
tree41297a56515e72657c6a679b468d2fcf0a642595 /activesupport/test/notifications_test.rb
parent5e0c423881985abfcbeffa602ee0d15467e24bf7 (diff)
downloadrails-4cdedb571cc842ae9883a9b9754471ae3e82f698.tar.gz
rails-4cdedb571cc842ae9883a9b9754471ae3e82f698.tar.bz2
rails-4cdedb571cc842ae9883a9b9754471ae3e82f698.zip
Always subscribe to event objects via `AS::Notifications.subscribe`
We don't need to have a special subscribe method for objects. The regular `subscribe` method is more expensive than a specialized method, but `subscribe` should not be called frequently. If that turns out to be a hotspot, we can introduce a specialized method. :)
Diffstat (limited to 'activesupport/test/notifications_test.rb')
-rw-r--r--activesupport/test/notifications_test.rb25
1 files changed, 16 insertions, 9 deletions
diff --git a/activesupport/test/notifications_test.rb b/activesupport/test/notifications_test.rb
index 119062d5bf..62817a839a 100644
--- a/activesupport/test/notifications_test.rb
+++ b/activesupport/test/notifications_test.rb
@@ -29,7 +29,7 @@ module Notifications
class SubscribeEventObjects < TestCase
def test_subscribe_events
events = []
- @notifier.subscribe_event do |event|
+ @notifier.subscribe do |event|
events << event
end
@@ -42,16 +42,23 @@ module Notifications
assert_operator event.duration, :>, 0
end
- def test_subscribe_via_subscribe_method
- events = []
- @notifier.subscribe do |event|
- events << event
+ def test_subscribe_via_top_level_api
+ old_notifier = ActiveSupport::Notifications.notifier
+ ActiveSupport::Notifications.notifier = ActiveSupport::Notifications::Fanout.new
+
+ event = nil
+ ActiveSupport::Notifications.subscribe("foo") do |e|
+ event = e
end
- ActiveSupport::Notifications.instrument("foo")
- event = events.first
- assert event, "should have an event"
- assert_operator event.allocations, :>, 0
+ ActiveSupport::Notifications.instrument("foo") do
+ 100.times { Object.new } # allocate at least 100 objects
+ end
+
+ assert event
+ assert_operator event.allocations, :>=, 100
+ ensure
+ ActiveSupport::Notifications.notifier = old_notifier
end
end