def test_err_callback_and_failure_repackage(self): class _MyException(Exception): pass class _MyRepackagedException(Exception): pass class _NotMatched(Exception): pass base_f = ThenableFuture() new_f = base_f.then( None, lambda ex: _MyRepackagedException(ex.message + ' repackaged') if isinstance(ex, _MyException) else _NotMatched('WTF?') ) assert base_f is not new_f assert not base_f.done() assert not new_f.done() base_f.set_exception(_MyException('sad')) assert base_f.done() assert new_f.done() assert new_f.exception() with self.assertRaises(_MyRepackagedException) as catcher: new_f.result() assert catcher.exception.message == 'sad repackaged'
def test_err_callback_convert_to_success(self): class _MyException(Exception): pass class _NotMatched(Exception): pass base_f = ThenableFuture() new_f = base_f.then( None, lambda ex: ex.message + ' repackaged' if isinstance(ex, _MyException) else _NotMatched('WTF?') ) assert base_f is not new_f assert not base_f.done() assert not new_f.done() base_f.set_exception(_MyException('sad')) assert base_f.done() assert new_f.done() assert not new_f.exception() assert new_f.result() == 'sad repackaged'
def test_err_callback_and_failure_raised(self): class _MyException(Exception): pass class _MyRepackagedException(Exception): pass def raise_something_else(ex): raise _MyRepackagedException( ex.message + ' repackaged' ) base_f = ThenableFuture() new_f = base_f.then( None, raise_something_else ) assert base_f is not new_f assert not base_f.done() assert not new_f.done() base_f.set_exception(_MyException('sad')) assert base_f.done() assert new_f.done() assert new_f.exception() with self.assertRaises(_MyRepackagedException) as catcher: new_f.result() assert catcher.exception.message == 'sad repackaged'
def test_no_callbacks_and_failure(self): base_f = ThenableFuture() new_f = base_f.then() assert base_f is not new_f assert not base_f.done() assert not new_f.done() class _MyException(Exception): pass base_f.set_exception(_MyException('sad')) assert base_f.done() assert new_f.done() assert new_f.exception() with self.assertRaises(_MyException) as catcher: new_f.result() assert catcher.exception.message == 'sad'