2012-03-23 14:47:27 -04:00
|
|
|
require 'abstract_unit'
|
|
|
|
|
|
|
|
module ActiveSupport
|
|
|
|
module Notifications
|
|
|
|
class EventedTest < ActiveSupport::TestCase
|
|
|
|
class Listener
|
|
|
|
attr_reader :events
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
@events = []
|
|
|
|
end
|
|
|
|
|
|
|
|
def start(name, id, payload)
|
|
|
|
@events << [:start, name, id, payload]
|
|
|
|
end
|
|
|
|
|
|
|
|
def finish(name, id, payload)
|
|
|
|
@events << [:finish, name, id, payload]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-08-11 20:39:20 -04:00
|
|
|
class ListenerWithTimedSupport < Listener
|
|
|
|
def call(name, start, finish, id, payload)
|
|
|
|
@events << [:call, name, start, finish, id, payload]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-03-23 14:47:27 -04:00
|
|
|
def test_evented_listener
|
|
|
|
notifier = Fanout.new
|
|
|
|
listener = Listener.new
|
|
|
|
notifier.subscribe 'hi', listener
|
|
|
|
notifier.start 'hi', 1, {}
|
|
|
|
notifier.start 'hi', 2, {}
|
|
|
|
notifier.finish 'hi', 2, {}
|
|
|
|
notifier.finish 'hi', 1, {}
|
|
|
|
|
|
|
|
assert_equal 4, listener.events.length
|
|
|
|
assert_equal [
|
|
|
|
[:start, 'hi', 1, {}],
|
|
|
|
[:start, 'hi', 2, {}],
|
|
|
|
[:finish, 'hi', 2, {}],
|
|
|
|
[:finish, 'hi', 1, {}],
|
|
|
|
], listener.events
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_evented_listener_no_events
|
|
|
|
notifier = Fanout.new
|
|
|
|
listener = Listener.new
|
|
|
|
notifier.subscribe 'hi', listener
|
|
|
|
notifier.start 'world', 1, {}
|
|
|
|
assert_equal 0, listener.events.length
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_listen_to_everything
|
|
|
|
notifier = Fanout.new
|
|
|
|
listener = Listener.new
|
|
|
|
notifier.subscribe nil, listener
|
|
|
|
notifier.start 'hello', 1, {}
|
|
|
|
notifier.start 'world', 1, {}
|
|
|
|
notifier.finish 'world', 1, {}
|
|
|
|
notifier.finish 'hello', 1, {}
|
|
|
|
|
|
|
|
assert_equal 4, listener.events.length
|
|
|
|
assert_equal [
|
|
|
|
[:start, 'hello', 1, {}],
|
|
|
|
[:start, 'world', 1, {}],
|
|
|
|
[:finish, 'world', 1, {}],
|
|
|
|
[:finish, 'hello', 1, {}],
|
|
|
|
], listener.events
|
|
|
|
end
|
2012-08-11 20:39:20 -04:00
|
|
|
|
|
|
|
def test_evented_listener_priority
|
|
|
|
notifier = Fanout.new
|
|
|
|
listener = ListenerWithTimedSupport.new
|
|
|
|
notifier.subscribe 'hi', listener
|
|
|
|
|
|
|
|
notifier.start 'hi', 1, {}
|
|
|
|
notifier.finish 'hi', 1, {}
|
|
|
|
|
|
|
|
assert_equal [
|
|
|
|
[:start, 'hi', 1, {}],
|
|
|
|
[:finish, 'hi', 1, {}]
|
|
|
|
], listener.events
|
|
|
|
end
|
2012-03-23 14:47:27 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|