1*ad97ccf6SSam McCall //===-- FunctionTests.cpp -------------------------------------------------===//
2*ad97ccf6SSam McCall //
3*ad97ccf6SSam McCall // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*ad97ccf6SSam McCall // See https://llvm.org/LICENSE.txt for license information.
5*ad97ccf6SSam McCall // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*ad97ccf6SSam McCall //
7*ad97ccf6SSam McCall //===----------------------------------------------------------------------===//
8*ad97ccf6SSam McCall
9*ad97ccf6SSam McCall #include "support/Function.h"
10*ad97ccf6SSam McCall #include "gmock/gmock.h"
11*ad97ccf6SSam McCall #include "gtest/gtest.h"
12*ad97ccf6SSam McCall
13*ad97ccf6SSam McCall namespace clang {
14*ad97ccf6SSam McCall namespace clangd {
15*ad97ccf6SSam McCall namespace {
16*ad97ccf6SSam McCall
TEST(EventTest,Subscriptions)17*ad97ccf6SSam McCall TEST(EventTest, Subscriptions) {
18*ad97ccf6SSam McCall Event<int> E;
19*ad97ccf6SSam McCall int N = 0;
20*ad97ccf6SSam McCall {
21*ad97ccf6SSam McCall Event<int>::Subscription SubA;
22*ad97ccf6SSam McCall // No subscriptions are active.
23*ad97ccf6SSam McCall E.broadcast(42);
24*ad97ccf6SSam McCall EXPECT_EQ(0, N);
25*ad97ccf6SSam McCall
26*ad97ccf6SSam McCall Event<int>::Subscription SubB = E.observe([&](int) { ++N; });
27*ad97ccf6SSam McCall // Now one is active.
28*ad97ccf6SSam McCall E.broadcast(42);
29*ad97ccf6SSam McCall EXPECT_EQ(1, N);
30*ad97ccf6SSam McCall
31*ad97ccf6SSam McCall SubA = E.observe([&](int) { ++N; });
32*ad97ccf6SSam McCall // Both are active.
33*ad97ccf6SSam McCall EXPECT_EQ(1, N);
34*ad97ccf6SSam McCall E.broadcast(42);
35*ad97ccf6SSam McCall EXPECT_EQ(3, N);
36*ad97ccf6SSam McCall
37*ad97ccf6SSam McCall SubA = std::move(SubB);
38*ad97ccf6SSam McCall // One is active.
39*ad97ccf6SSam McCall EXPECT_EQ(3, N);
40*ad97ccf6SSam McCall E.broadcast(42);
41*ad97ccf6SSam McCall EXPECT_EQ(4, N);
42*ad97ccf6SSam McCall }
43*ad97ccf6SSam McCall // None are active.
44*ad97ccf6SSam McCall EXPECT_EQ(4, N);
45*ad97ccf6SSam McCall E.broadcast(42);
46*ad97ccf6SSam McCall EXPECT_EQ(4, N);
47*ad97ccf6SSam McCall }
48*ad97ccf6SSam McCall
49*ad97ccf6SSam McCall } // namespace
50*ad97ccf6SSam McCall } // namespace clangd
51*ad97ccf6SSam McCall } // namespace clang
52