//===-- FunctionTests.cpp -------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "support/Function.h" #include "gmock/gmock.h" #include "gtest/gtest.h" namespace clang { namespace clangd { namespace { TEST(EventTest, Subscriptions) { Event E; int N = 0; { Event::Subscription SubA; // No subscriptions are active. E.broadcast(42); EXPECT_EQ(0, N); Event::Subscription SubB = E.observe([&](int) { ++N; }); // Now one is active. E.broadcast(42); EXPECT_EQ(1, N); SubA = E.observe([&](int) { ++N; }); // Both are active. EXPECT_EQ(1, N); E.broadcast(42); EXPECT_EQ(3, N); SubA = std::move(SubB); // One is active. EXPECT_EQ(3, N); E.broadcast(42); EXPECT_EQ(4, N); } // None are active. EXPECT_EQ(4, N); E.broadcast(42); EXPECT_EQ(4, N); } } // namespace } // namespace clangd } // namespace clang