示例#1
0
async def test_non_flatten_future(subtests):
    """Ensures that `flatten` is always returning the correct type."""
    futures = [
        # Not flattens:
        FutureResult.from_failure(FutureResult.from_failure(1)),
    ]

    for cont in futures:
        with subtests.test(container=cont):
            assert isinstance(
                (await flatten(cont)).failure()._inner_value,  # noqa: WPS437
                FutureResult,
            )
示例#2
0
async def test_inner_value(subtests):
    """Ensure that coroutine correct value is preserved for all units."""
    containers = [
        # We have to define these values inside the test, because
        # otherwise `anyio` will `await` reused coroutines.
        # And they have to be fresh. That's why we use subtests for it.
        Future.from_futureresult(FutureResult.from_success(1)),
        Future.from_futureresult(FutureResult.from_failure(1)),
    ]
    for container in containers:
        with subtests.test(container=container):
            assert isinstance(await container, IO)
    def from_failure(
        cls,
        inner_value: _FirstType,
    ) -> 'RequiresContextFutureResult[Any, _FirstType, NoDeps]':
        """
        Creates new container with failed ``FutureResult`` as a unit value.

        .. code:: python

          >>> import anyio
          >>> from returns.context import RequiresContextFutureResult
          >>> from returns.io import IOFailure

          >>> assert anyio.run(RequiresContextFutureResult.from_failure(1)(
          ...     RequiresContextFutureResult.empty,
          ... ).awaitable) == IOFailure(1)

        """
        return RequiresContextFutureResult(
            lambda _: FutureResult.from_failure(inner_value), )
示例#4
0
async def test_inner_value(subtests):
    """Ensure that coroutine correct value is preserved for all units."""
    containers = [
        # We have to define these values inside the test, because
        # otherwise `anyio` will `await` reused coroutines.
        # And they have to be fresh. That's why we use subtests for it.
        FutureResult.from_value(1),
        FutureResult.from_failure(1),
        FutureResult.from_io(IO(1)),
        FutureResult.from_failed_io(IO(1)),
        FutureResult.from_ioresult(IOSuccess(1)),
        FutureResult.from_ioresult(IOFailure(1)),
        FutureResult.from_result(Success(1)),
        FutureResult.from_result(Failure(1)),
        FutureResult.from_future(Future.from_value(1)),
        FutureResult.from_failed_future(Future.from_value(1)),
        FutureResult.from_typecast(Future.from_value(Success(1))),
    ]
    for container in containers:
        with subtests.test(container=container):
            result_inst = await container
            assert result_inst._inner_value._inner_value == 1  # noqa: WPS437
    def from_failed_context(
        cls,
        inner_value: 'RequiresContext[_NewValueType, _NewEnvType]',
    ) -> 'RequiresContextFutureResult[Any, _NewValueType, _NewEnvType]':
        """
        Creates new container from ``RequiresContext`` as a failure unit.

        .. code:: python

          >>> import anyio
          >>> from returns.context import RequiresContext
          >>> from returns.io import IOFailure

          >>> assert anyio.run(
          ...     RequiresContextFutureResult.from_failed_context(
          ...         RequiresContext.from_value(1),
          ...     ),
          ...     RequiresContextFutureResult.empty,
          ... ) == IOFailure(1)

        """
        return RequiresContextFutureResult(
            lambda deps: FutureResult.from_failure(inner_value(deps)), )
示例#6
0
from returns.primitives.asserts import assert_equal
from returns.primitives.container import BaseContainer
from returns.result import Result

_containers: Sequence[BaseContainer] = (
    Result.from_failure(1),
    Result.from_value(1),
    IO(1),
    IOResult.from_failure(1),
    IOResult.from_value(1),
    Maybe.from_value(1),
    Maybe.from_value(None),
    Maybe.from_optional(None),
    Future.from_value(1),
    FutureResult.from_value(1),
    FutureResult.from_failure(1),
    Reader.from_value(1),
    ReaderResult.from_value(1),
    ReaderResult.from_failure(1),
    ReaderIOResult.from_value(1),
    ReaderIOResult.from_failure(1),
    ReaderFutureResult.from_value(1),
    ReaderFutureResult.from_failure(1),
)


@pytest.mark.parametrize('container', _containers)
def test_assert_equal(container, anyio_backend_name: str):
    """Ensure that containers can be equal."""
    assert_equal(container, container, backend=anyio_backend_name)
示例#7
0
def test_return_false_with_future_result_container():  # noqa: WPS118
    """Ensures `is_io` function will return False for FutureResult."""
    assert is_io(FutureResult.from_failure('failure')) is False
 def __call__(
     self,
     inner_value: str,
     use_result: Result[str, str],
 ) -> FutureResult[None, str]:
     return FutureResult.from_failure('release failure')
def _use_failure(inner_value: str) -> FutureResult[str, str]:
    return FutureResult.from_failure('use failure')
def _acquire_failure() -> FutureResult[str, str]:
    return FutureResult.from_failure('acquire failure')
示例#11
0
async def test_bind_future_result():
    """Ensures that functions can be composed and return type is correct."""
    assert await bind(_future_result_function)(
        FutureResult.from_value(1), ) == IOSuccess('2')
    assert await bind(_future_result_function)(
        FutureResult.from_failure(1.0), ) == IOFailure(1.0)