def test_add_future(self): mock = unittest.mock.Mock() mock.done.return_value = False obj = object() nh = TagDispatcher() nh.add_future("tag", mock) nh.unicast("tag", obj) with self.assertRaises(KeyError): # futures must be oneshots nh.unicast("tag", obj) nh.add_future("tag", mock) nh.broadcast_error(obj) with self.assertRaises(KeyError): # futures must be oneshots nh.unicast("tag", obj) self.assertSequenceEqual( [ unittest.mock.call.done(), unittest.mock.call.set_result(obj), unittest.mock.call.done(), unittest.mock.call.set_exception(obj), ], mock.mock_calls )
def test_broadcast_error(self): data = unittest.mock.Mock() error1 = unittest.mock.Mock() error1.return_value = False error2 = unittest.mock.Mock() error2.return_value = False l1 = TagListener(data, error1) l2 = TagListener(data, error2) obj = object() nh = TagDispatcher() nh.add_listener("tag1", l1) nh.add_listener("tag2", l2) nh.broadcast_error(obj) nh.broadcast_error(obj) data.assert_not_called() self.assertSequenceEqual( [ unittest.mock.call(obj), unittest.mock.call(obj), ], error1.mock_calls ) self.assertSequenceEqual( [ unittest.mock.call(obj), unittest.mock.call(obj), ], error2.mock_calls )
def test_broadcast_error(self): data = unittest.mock.Mock() error1 = unittest.mock.Mock() error1.return_value = False error2 = unittest.mock.Mock() error2.return_value = False l1 = TagListener(data, error1) l2 = TagListener(data, error2) obj = object() nh = TagDispatcher() nh.add_listener("tag1", l1) nh.add_listener("tag2", l2) nh.broadcast_error(obj) nh.broadcast_error(obj) data.assert_not_called() self.assertSequenceEqual([ unittest.mock.call(obj), unittest.mock.call(obj), ], error1.mock_calls) self.assertSequenceEqual([ unittest.mock.call(obj), unittest.mock.call(obj), ], error2.mock_calls)
def test_broadcast_error_skip_invalid(self): obj = object() l = unittest.mock.Mock() l.is_valid.return_value = False nh = TagDispatcher() nh.add_listener("tag", l) nh.broadcast_error(obj) self.assertSequenceEqual([unittest.mock.call.is_valid()], l.mock_calls)
def test_broadcast_error_skip_invalid(self): obj = object() l = unittest.mock.Mock() l.is_valid.return_value = False nh = TagDispatcher() nh.add_listener("tag", l) nh.broadcast_error(obj) self.assertSequenceEqual( [ unittest.mock.call.is_valid() ], l.mock_calls )
def test_broadcast_error_to_oneshot(self): data = unittest.mock.Mock() error = unittest.mock.Mock() obj = object() l = OneshotTagListener(data, error) nh = TagDispatcher() nh.add_listener("tag", l) nh.broadcast_error(obj) with self.assertRaises(KeyError): nh.unicast("tag", obj) self.assertSequenceEqual([unittest.mock.call(obj)], error.mock_calls) self.assertFalse(data.mock_calls)
def test_broadcast_error_removes_on_true_result(self): data = unittest.mock.Mock() error1 = unittest.mock.Mock() error1.return_value = True l1 = TagListener(data, error1) obj = object() nh = TagDispatcher() nh.add_listener("tag1", l1) nh.broadcast_error(obj) nh.broadcast_error(obj) data.assert_not_called() self.assertSequenceEqual([ unittest.mock.call(obj), ], error1.mock_calls)
def test_broadcast_error_to_cancelled_oneshot(self): data = unittest.mock.Mock() error = unittest.mock.Mock() obj = object() l = OneshotTagListener(data, error) nh = TagDispatcher() nh.add_listener("tag", l) l.cancel() nh.broadcast_error(obj) with self.assertRaises(KeyError): nh.unicast("tag", obj) self.assertSequenceEqual( [], error.mock_calls ) self.assertFalse(data.mock_calls)
def test_broadcast_error_removes_on_true_result(self): data = unittest.mock.Mock() error1 = unittest.mock.Mock() error1.return_value = True l1 = TagListener(data, error1) obj = object() nh = TagDispatcher() nh.add_listener("tag1", l1) nh.broadcast_error(obj) nh.broadcast_error(obj) data.assert_not_called() self.assertSequenceEqual( [ unittest.mock.call(obj), ], error1.mock_calls )