def test_uncontained(): item = Item() container = {u'foo': item} x, event = containedEvent(item, container, u'foo') assert item.__parent__ is container assert item.__name__ == u'foo' uncontained(item, container, u'foo') assert item.__parent__ is None assert item.__name__ is None assert len(getEvents(IObjectRemovedEvent)) == 1 event = getEvents(IObjectRemovedEvent)[-1] assert event.object is item assert event.oldParent is container assert event.oldName == u'foo' assert event.newParent is None assert event.newName is None assert len(getEvents(IObjectModifiedEvent)) == 1 assert getEvents(IObjectModifiedEvent)[-1].object is container # Events are never triggered twice uncontained(item, container, u'foo') assert len(getEvents(IObjectRemovedEvent)) == 1 assert len(getEvents(IObjectModifiedEvent)) == 1 item.__parent__, item.__name__ = container, None uncontained(item, container, u'foo') assert len(getEvents(IObjectRemovedEvent)) == 1 assert len(getEvents(IObjectModifiedEvent)) == 2 item.__parent__, item.__name__ = None, u'bar' uncontained(item, container, u'foo') assert len(getEvents(IObjectRemovedEvent)) == 1 assert len(getEvents(IObjectModifiedEvent)) == 3
def test_contained_event(): container = {} item = Contained() x, event = containedEvent(item, container, u'foo') assert x is item assert item.__parent__ is container assert item.__name__ == u'foo' assert event.__class__.__name__ == 'ObjectAddedEvent' assert event.object is item assert event.newParent is container assert event.newName == u'foo' assert event.oldParent is None assert event.oldName is None # Event is not triggered twice. x2, event = containedEvent(item, container, u'foo') assert x2 is item assert item.__parent__ is container assert item.__name__ == u'foo' assert not event # Moved event x, event = containedEvent(item, container, u'foo2') assert event.__class__.__name__ == 'ObjectMovedEvent' assert event.object is item assert event.newParent is container assert event.newName == u'foo2' assert event.oldParent is container assert event.oldName == u'foo' # Ilocation enrichment item = Location() assert not IContained.providedBy(item) x, event = containedEvent(item, container, 'foo') assert x is item assert item.__parent__ is container assert item.__name__ == 'foo' assert IContained.providedBy(item) # Containment proxy item = [] x, event = containedEvent(item, container, 'foo') assert not x is item assert x.__parent__ is container assert x.__name__ == 'foo' # Make sure we don't lose existing directly provided interfaces. from zope.interface import Interface, directlyProvides class IOther(Interface): pass item = Location() directlyProvides(item, IOther) assert IOther.providedBy(item) x, event = containedEvent(item, container, 'foo') assert IOther.providedBy(item)