/* * Copyright (c) 2023, Ali Mohammad Pur * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include TEST_CASE(promise_await_async_event) { Core::EventLoop loop; auto promise = MUST(Core::Promise::try_create()); loop.deferred_invoke([=] { promise->resolve(42); }); auto& result = promise->await(); EXPECT(!result.is_error()); EXPECT_EQ(result.value(), 42); } TEST_CASE(promise_await_async_event_rejection) { Core::EventLoop loop; auto promise = MUST(Core::Promise::try_create()); loop.deferred_invoke([=] { promise->reject(AK::Error::from_string_literal("lol no")); }); auto& result = promise->await(); EXPECT(result.is_error()); EXPECT_EQ(result.error().string_literal(), "lol no"sv); } TEST_CASE(promise_chain_handlers) { Core::EventLoop loop; bool resolved = false; bool rejected = false; NonnullRefPtr> promise = MUST(Core::Promise::try_create()) ->when_resolved([&](int&) -> ErrorOr { resolved = true; return {}; }) .when_rejected([&](AK::Error const&) { rejected = true; }); loop.deferred_invoke([=] { promise->resolve(42); }); promise->await(); EXPECT(resolved); EXPECT(!rejected); }