def test_close(self): data = unittest.mock.Mock() error1 = unittest.mock.Mock() error2 = unittest.mock.Mock() l1 = TagListener(data, error1) l2 = TagListener(data, error2) obj = object() nh = TagDispatcher() nh.add_listener("tag1", l1) nh.add_listener("tag2", l2) nh.close_all(obj) data.assert_not_called() error1.assert_called_once_with(obj) error2.assert_called_once_with(obj) with self.assertRaises(KeyError): nh.remove_listener("tag1") with self.assertRaises(KeyError): nh.remove_listener("tag2") with self.assertRaises(KeyError): nh.unicast("tag1", None) with self.assertRaises(KeyError): nh.unicast("tag2", None)
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_data(self): ondata = unittest.mock.Mock() obj = object() listener = TagListener(ondata=ondata) listener.data(obj) ondata.assert_called_once_with(obj)
def test_error(self): ondata = unittest.mock.Mock() onerror = unittest.mock.Mock() exc = ValueError() listener = TagListener(ondata, onerror) listener.error(exc) ondata.assert_not_called() onerror.assert_called_once_with(exc)
def test_add_listener_skips_invalid(self): mock = unittest.mock.Mock() l1 = unittest.mock.Mock() l1.is_valid.return_value = True l2 = TagListener(mock) nh = TagDispatcher() nh.add_listener("tag", l1) l1.is_valid.return_value = False nh.add_listener("tag", l2) obj = object() nh.unicast("tag", obj) self.assertSequenceEqual( [ unittest.mock.call.is_valid(), ], l1.mock_calls ) self.assertSequenceEqual( [ unittest.mock.call(obj), ], mock.mock_calls )
def test_add_listener(self): mock = unittest.mock.Mock() l = TagListener(mock) nh = TagDispatcher() nh.add_listener("tag", l) with self.assertRaisesRegex(ValueError, "only one listener is allowed"): nh.add_listener("tag", l)
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_uninitialized_error(self): ondata = unittest.mock.Mock() listener = TagListener(ondata=ondata) listener.error(ValueError())
def test_is_valid(self): self.assertTrue(TagListener(ondata=unittest.mock.Mock()))