=Publish / Subscribe DP Tests=

Copyright (c) 2008-2014, David P. D. Moss. All rights reserved.

Basic Publisher and Subscriber object tests.

{{{

>>> from netaddr.core import Publisher, Subscriber, PrettyPrinter
>>> import pprint

>>> class Subject(Publisher):
...     pass


>>> class Observer(Subscriber):
...     def __init__(self, id):
...         self.id = id
...
...     def update(self, data):
...         return repr(self), pprint.pformat(data)
...
...     def __repr__(self):
...         return '%s(%r)' % (self.__class__.__name__, self.id)
...

>>> s = Subject()

>>> s.attach(Observer('foo'))
>>> s.attach(Observer('bar'))

#FIXME: >>> pp = PrettyPrinter()
#FIXME: >>> s.attach(pp)

>>> data = [{'foo': 42}, {'list': [1,'2', list(range(10))]}, {'strings': ['foo', 'bar', 'baz', 'quux']}]
>>> s.notify(data)

#FIXME: >>> s.detach(pp)
>>> s.notify(['foo', 'bar', 'baz'])

>>> s.attach('foo')
Traceback (most recent call last):
...
TypeError: 'foo' does not support required interface!

>>> s.detach('foo')

}}}
