blob: 76ed3bcd511e804fdcdafaa1949ed92af120d8be [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/devices/lib/driver2/promise.h"
#include <gtest/gtest.h>
struct fake_context : fit::context {
fit::executor* executor() const override {
EXPECT_TRUE(false);
return nullptr;
}
fit::suspended_task suspend_task() override { return fit::suspended_task(); }
};
// Test that promise::Continue() correctly returns fit::results, and can be
// resumed using promise::ContinueWith.
TEST(PromiseTest, Continue) {
fake_context context;
auto success = fit::make_promise(promise::Continue(
[](promise::ContinueWith<fit::result<>>& with) -> fit::result<> { return fit::ok(); }));
EXPECT_TRUE(success(context).is_ok());
auto failure = fit::make_promise(promise::Continue(
[](promise::ContinueWith<fit::result<>>& with) -> fit::result<> { return fit::error(); }));
EXPECT_TRUE(failure(context).is_error());
fit::function<void()> callback;
auto pending = fit::make_promise(
promise::Continue([&callback](promise::ContinueWith<fit::result<>>& with) -> fit::result<> {
callback = [&with] { with.Return(fit::ok()); };
return fit::pending();
}));
EXPECT_TRUE(pending(context).is_pending());
callback();
EXPECT_TRUE(pending(context).is_ok());
}