aboutsummaryrefslogtreecommitdiff
path: root/test/base/EventTest.cpp
blob: 9ebf8b28aa21aa0097867405003d4641d27b9203 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "cru/base/Event.h"

#include <catch2/catch_test_macros.hpp>

TEST_CASE("Event should work.", "[event]") {
  using cru::Event;

  Event<int&> event;

  int count = 0;
  bool triggered = false;

  auto revoker = event.AddHandler([](int& count) { count++; });
  event.AddHandler([](int& count) { count++; });
  event.AddSpyOnlyHandler([&triggered] { triggered = true; });

  event.Raise(count);
  REQUIRE(count == 2);
  REQUIRE(triggered);

  revoker();

  event.Raise(count);
  REQUIRE(count == 3);
}

TEST_CASE("Event destroy during raising.", "[event]") {
  using cru::Event;

  Event<int&>* event = new Event<int&>();

  event->AddSpyOnlyHandler([event] { delete event; });
  auto revoker = event->AddHandler([](int& count) { count++; });

  int count = 0;
  event->Raise(count);
  REQUIRE(count == 1);
  revoker();
}