def wrapper(*args, **kwargs): request = kwargs["request"] qapp = request.getfixturevalue("qapp") qtbot = request.getfixturevalue("qtbot") test_outcomes_sentinel = qtrio.Outcomes( qt=outcome.Value(0), trio=outcome.Value(29), ) test_outcomes = test_outcomes_sentinel def done_callback(outcomes): nonlocal test_outcomes test_outcomes = outcomes runner = qtrio._core.Runner( application=qapp, done_callback=done_callback, quit_application=False, timeout=timeout, ) runner.run( functools.partial(test_function, **kwargs), *args, execute_application=False, ) # TODO: probably increases runtime of fast tests a lot due to polling qtbot.wait_until( lambda: test_outcomes is not test_outcomes_sentinel, timeout=3.14e8 ) test_outcomes.unwrap()
def test_outcomes_unwrap_raises_qt_error_over_trio_none(): """Unwrapping an Outcomes prioritizes a Qt error over a Trio None.""" class LocalUniqueException(Exception): pass this_outcome = qtrio.Outcomes(qt=outcome.Error(LocalUniqueException())) with pytest.raises(LocalUniqueException): this_outcome.unwrap()
def test_outcomes_unwrap_raises_trio_error_over_qt_value(): """Unwrapping an Outcomes prioritizes a Trio error over a Qt value.""" class LocalUniqueException(Exception): pass this_outcome = qtrio.Outcomes( qt=outcome.Value(9), trio=outcome.Error(LocalUniqueException()), ) with pytest.raises(LocalUniqueException): this_outcome.unwrap()
def test_outcomes_unwrap_returns_qt_value_over_trio_none(): """Unwrapping an Outcomes prioritizes a Qt value over a Trio None.""" this_outcome = qtrio.Outcomes(qt=outcome.Value(3)) result = this_outcome.unwrap() assert result == 3
def test_outcomes_unwrap_none(): """Unwrapping an empty Outcomes raises NoOutcomesError.""" this_outcome = qtrio.Outcomes() with pytest.raises(qtrio.NoOutcomesError): this_outcome.unwrap()