439
462
t2.dispatch.event_one(t2, 1)
440
463
t2.dispatch.event_two(t2, 2)
441
eq_(result, [(t2, 1)])
466
listen_one.mock_calls,
470
listen_two.mock_calls,
474
class JoinTest(fixtures.TestBase):
476
class TargetEvents(event.Events):
477
def event_one(self, target, arg):
480
class BaseTarget(object):
481
dispatch = event.dispatcher(TargetEvents)
483
class TargetFactory(BaseTarget):
485
return TargetElement(self)
487
class TargetElement(BaseTarget):
488
def __init__(self, parent):
489
self.dispatch = self.dispatch._join(parent.dispatch)
491
def run_event(self, arg):
492
list(self.dispatch.event_one)
493
self.dispatch.event_one(self, arg)
495
self.BaseTarget = BaseTarget
496
self.TargetFactory = TargetFactory
497
self.TargetElement = TargetElement
500
for cls in (self.TargetElement,
501
self.TargetFactory, self.BaseTarget):
502
if 'dispatch' in cls.__dict__:
503
event._remove_dispatcher(cls.__dict__['dispatch'].events)
505
def test_neither(self):
506
element = self.TargetFactory().create()
511
def test_parent_class_only(self):
514
event.listen(self.TargetFactory, "event_one", l1)
516
element = self.TargetFactory().create()
522
[call(element, 1), call(element, 2), call(element, 3)]
525
def test_parent_class_child_class(self):
529
event.listen(self.TargetFactory, "event_one", l1)
530
event.listen(self.TargetElement, "event_one", l2)
532
element = self.TargetFactory().create()
538
[call(element, 1), call(element, 2), call(element, 3)]
542
[call(element, 1), call(element, 2), call(element, 3)]
545
def test_parent_class_child_instance_apply_after(self):
549
event.listen(self.TargetFactory, "event_one", l1)
550
element = self.TargetFactory().create()
554
event.listen(element, "event_one", l2)
560
[call(element, 1), call(element, 2), call(element, 3)]
564
[call(element, 2), call(element, 3)]
567
def test_parent_class_child_instance_apply_before(self):
571
event.listen(self.TargetFactory, "event_one", l1)
572
element = self.TargetFactory().create()
574
event.listen(element, "event_one", l2)
582
[call(element, 1), call(element, 2), call(element, 3)]
586
[call(element, 1), call(element, 2), call(element, 3)]
589
def test_parent_instance_child_class_apply_before(self):
593
event.listen(self.TargetElement, "event_one", l2)
595
factory = self.TargetFactory()
596
event.listen(factory, "event_one", l1)
598
element = factory.create()
606
[call(element, 1), call(element, 2), call(element, 3)]
610
[call(element, 1), call(element, 2), call(element, 3)]
614
def test_parent_instance_child_class_apply_after(self):
618
event.listen(self.TargetElement, "event_one", l2)
620
factory = self.TargetFactory()
621
element = factory.create()
625
event.listen(factory, "event_one", l1)
630
# c1 gets no events due to _JoinedListener
631
# fixing the "parent" at construction time.
632
# this can be changed to be "live" at the cost
639
[call(element, 1), call(element, 2), call(element, 3)]
642
def test_parent_instance_child_instance_apply_before(self):
645
factory = self.TargetFactory()
647
event.listen(factory, "event_one", l1)
649
element = factory.create()
650
event.listen(element, "event_one", l2)
658
[call(element, 1), call(element, 2), call(element, 3)]
662
[call(element, 1), call(element, 2), call(element, 3)]
665
def test_parent_events_child_no_events(self):
667
factory = self.TargetFactory()
669
event.listen(self.TargetElement, "event_one", l1)
670
element = factory.create()
678
[call(element, 1), call(element, 2), call(element, 3)]