blob: 51c9507447e403c7e57b0961f3b1addbc32925e2 [file] [log] [blame]
// Copyright 2019 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/developer/debug/zxdb/common/completion_callback.h"
#include <gtest/gtest.h>
namespace zxdb {
TEST(CompletionCallback, NoParams) {
// Lambda that records it was called and the error it was passed.
bool called = false;
Err out_err;
auto set_out = [&out_err, &called](const Err& err) {
called = true;
out_err = err;
};
// Call with an error.
CompletionCallback<> cb_with_err(set_out);
CompletionCallback<> call_me(std::move(cb_with_err)); // Test move ctor.
Err with_error("message");
call_me(with_error);
EXPECT_TRUE(called);
EXPECT_EQ(with_error.msg(), out_err.msg());
// Call with no error.
called = false;
CompletionCallback<> cb_no_err(set_out);
call_me = std::move(cb_no_err); // Test move operator.
call_me();
EXPECT_TRUE(called);
EXPECT_FALSE(out_err.has_error());
}
TEST(CompletionCallback, SomeParams) {
// Lambda that records it was called and the error it was passed.
bool called = false;
Err out_err;
int out_val = 99; // Nonzero to catch default assignment to 0 below.
auto set_out = [&out_err, &called, &out_val](const Err& err, int val) {
called = true;
out_err = err;
out_val = val;
};
// Call with an error.
CompletionCallback<int> cb_with_err(set_out);
CompletionCallback<int> call_me(std::move(cb_with_err)); // Test move ctor.
Err with_error("message");
call_me(with_error);
EXPECT_TRUE(called);
EXPECT_EQ(with_error.msg(), out_err.msg());
EXPECT_EQ(out_val, 0);
// Call with no error.
called = false;
CompletionCallback<int> cb_no_err(set_out);
call_me = std::move(cb_no_err); // Test move operator.
call_me(42);
EXPECT_TRUE(called);
EXPECT_FALSE(out_err.has_error());
EXPECT_EQ(42, out_val);
// Call specifying everything.
called = false;
CompletionCallback<int> everything = set_out; // Assignment from lambda.
Err with_error2("other message");
everything(with_error2, 1000);
EXPECT_TRUE(called);
EXPECT_EQ(with_error2.msg(), out_err.msg());
EXPECT_EQ(out_val, 1000);
}
} // namespace zxdb