'Tracing keeps track of forwarding through the filtering observer.'

def test_trace(self):

    event = dict(log_trace=[])
    oYes = (lambda e: None)
    oNo = (lambda e: None)
    def testObserver(e):
        self.assertIs(e, event)
        self.assertEqual(event['log_trace'], [(publisher, yesFilter), (yesFilter, oYes), (publisher, noFilter), (publisher, oTest)])
    oTest = testObserver
    yesFilter = FilteringLogObserver(oYes, ((lambda e: PredicateResult.yes),))
    noFilter = FilteringLogObserver(oNo, ((lambda e: PredicateResult.no),))
    publisher = LogPublisher(yesFilter, noFilter, testObserver)
    publisher(event)
