| // Copyright 2018 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/lib/callback/capture.h" |
| |
| #include <lib/fit/function.h> |
| |
| #include <memory> |
| |
| #include <gtest/gtest.h> |
| |
| namespace callback { |
| namespace { |
| |
| TEST(Capture, CaptureVariable) { |
| int a1 = 0; |
| std::string a2; |
| std::unique_ptr<std::string> a3; |
| bool called = false; |
| |
| Capture([&called] { called = true; }, &a1, &a2, &a3)(1, "hello", |
| std::make_unique<std::string>("world")); |
| |
| EXPECT_TRUE(called); |
| EXPECT_EQ(1, a1); |
| EXPECT_EQ("hello", a2); |
| EXPECT_TRUE(a3); |
| EXPECT_EQ("world", *a3); |
| } |
| |
| TEST(Capture, CaptureConstReference) { |
| int a1 = 0; |
| int a2 = 0; |
| bool called = false; |
| |
| fit::function<void(int, const int&)> capture = Capture([&called] { called = true; }, &a1, &a2); |
| |
| capture(1, 2); |
| |
| EXPECT_TRUE(called); |
| EXPECT_EQ(1, a1); |
| EXPECT_EQ(2, a2); |
| } |
| |
| TEST(Capture, UseStdIgnore) { |
| int a1 = 0; |
| bool called = false; |
| |
| Capture([&called] { called = true; }, &a1, &std::ignore)(1, 2); |
| |
| EXPECT_TRUE(called); |
| EXPECT_EQ(1, a1); |
| } |
| |
| } // namespace |
| } // namespace callback |