52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- 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<int> E;
 | |
|   int N = 0;
 | |
|   {
 | |
|     Event<int>::Subscription SubA;
 | |
|     // No subscriptions are active.
 | |
|     E.broadcast(42);
 | |
|     EXPECT_EQ(0, N);
 | |
| 
 | |
|     Event<int>::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
 |