def test_simple
n1 = Notifier.new
n2 = Notifier.new
o1 = Obsv.new
o2 = Obsv.new
o3 = Obsv.new
op = NotifierPool.new
assert_equal(0, op.count_observables)
assert_equal([], op.list_observables)
op.add_observables(n1)
op.add_observable(n2)
op.observable(n2).add_observers(o1, o3)
assert_equal(2, op.count_observables)
[ n1, n2 ].each { |x| assert(op.list_observables.include?(x)) }
assert_equal(1, n1.count_observers)
assert_equal([], n1.list_observers[0].list_observers)
assert_equal(1, n2.count_observers)
assert_equal(2, n2.list_observers[0].count_observers)
[o1, o3].each do |x|
assert(n2.list_observers[0].list_observers.include?(x),
"#{x} not observer")
end
op.observable(n1).add_observers(o2, o3)
assert_equal(2, op.observable(n1).count_observers)
[o1, o2, o3].each do |x|
assert(op.list_all_observers.include?(x), "#{x} not observer")
end
n2.changed
n2.notify_observers('msg2')
assert_equal([ n2, 'msg2'], o1.last_msg)
assert_nil(o2.last_msg)
assert_equal([ n2, 'msg2'], o3.last_msg)
n1.changed
n1.notify_observers('msg1')
assert_equal([n2, 'msg2'], o1.last_msg)
assert_equal([n1, 'msg1'], o2.last_msg)
assert_equal([n1, 'msg1'], o3.last_msg)
[n1, n2].each do |x|
assert(op.list_observables_observed(o3).include?(x), "#{x} not observer")
end
end