コード例 #1
0
    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'
コード例 #2
0
    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'
コード例 #3
0
    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'
コード例 #4
0
    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'