diff options
-rw-r--r-- | include/cru/common/Event2.h | 2 | ||||
-rw-r--r-- | test/common/Event2Test.cpp | 37 |
2 files changed, 31 insertions, 8 deletions
diff --git a/include/cru/common/Event2.h b/include/cru/common/Event2.h index 7d7bda82..5677828a 100644 --- a/include/cru/common/Event2.h +++ b/include/cru/common/Event2.h @@ -188,7 +188,7 @@ template <typename TEvent2> void EventHandlerToken<TEvent2>::RevokeHandler() const { auto event = this->event_resolver_.Resolve(); if (event) { - event->RevokeHandler(this->token_value); + event->RevokeHandler(this->token_value_); } } } // namespace cru diff --git a/test/common/Event2Test.cpp b/test/common/Event2Test.cpp index f63a5347..e14174cf 100644 --- a/test/common/Event2Test.cpp +++ b/test/common/Event2Test.cpp @@ -4,16 +4,39 @@ using cru::Event2; -TEST_CASE("Event2 handlers should work.", "[event2]") { +TEST_CASE("Event2", "[event2]") { Event2 event; int counter = 0; auto handler = [&counter] { counter++; }; - - event.AddHandler(handler); - - event.Raise(); - - REQUIRE(counter == 1); + auto token = event.AddHandler(handler); + + auto handler2 = [&counter](decltype(event)::Context* context) { counter++; }; + + SECTION("two handlers should work.") { + event.Raise(); + REQUIRE(counter == 1); + event.Raise(); + REQUIRE(counter == 2); + + event.AddHandler(handler2); + event.Raise(); + REQUIRE(counter == 4); + } + + SECTION("handler revoker should work.") { + token.RevokeHandler(); + event.Raise(); + REQUIRE(counter == 0); + + token = event.AddHandler(handler); + event.AddHandler(handler2); + event.Raise(); + REQUIRE(counter == 2); + + token.RevokeHandler(); + event.Raise(); + REQUIRE(counter == 3); + } } |