示例#1
0
def test_exception_handling(error_handling):
    base_ee = EventEmitter()
    uplifted_ee = uplift(UpliftedEventEmitter,
                         base_ee,
                         error_handling=error_handling)

    # Exception handling alwyas prefers uplifted
    base_error = Exception('base error')
    uplifted_error = Exception('uplifted error')

    # Hold my beer
    base_error_handler = Mock()
    base_ee._emit_handle_potential_error = base_error_handler

    # Hold my other beer
    uplifted_error_handler = Mock()
    uplifted_ee._emit_handle_potential_error = uplifted_error_handler

    base_ee.emit('error', base_error)
    uplifted_ee.emit('error', uplifted_error)

    if error_handling == 'new':
        base_error_handler.assert_not_called()
        uplifted_error_handler.assert_has_calls(
            [call('error', base_error),
             call('error', uplifted_error)])
    elif error_handling == 'underlying':
        base_error_handler.assert_has_calls(
            [call('error', base_error),
             call('error', uplifted_error)])
        uplifted_error_handler.assert_not_called()
    elif error_handling == 'neither':
        base_error_handler.assert_called_once_with('error', base_error)
        uplifted_error_handler.assert_called_once_with('error', uplifted_error)
    else:
        raise Exception('unrecognized setting')