From 9e3231f0376bf105cdad0d82604382db45e78ab6 Mon Sep 17 00:00:00 2001 From: Neeflix Date: Wed, 11 Jul 2018 22:17:49 +0200 Subject: [PATCH] TestEventNotifier is working now --- FlippR-Driver/src/input/EventNotifier.cpp | 7 ++-- FlippR-Driver/src/input/EventNotifier.h | 2 +- .../src/input/InputDriverFactory.cpp | 4 ++- .../tests/input/TestEventNotifier.cpp | 35 +++++++++++++------ 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/FlippR-Driver/src/input/EventNotifier.cpp b/FlippR-Driver/src/input/EventNotifier.cpp index e2cd069..1a24e32 100644 --- a/FlippR-Driver/src/input/EventNotifier.cpp +++ b/FlippR-Driver/src/input/EventNotifier.cpp @@ -14,13 +14,12 @@ namespace Input { -EventNotifier::EventNotifier() : - is_running(true) +EventNotifier::EventNotifier(IBlockingQueue* queue) : + is_running(true), + event_queue(queue) { this->notify_thread = std::thread(&EventNotifier::notify, this); - this->event_queue = new BlockingQueue(); - CLOG(INFO, INPUT_LOGGER) << "Created EventNotifier and started thread"; } diff --git a/FlippR-Driver/src/input/EventNotifier.h b/FlippR-Driver/src/input/EventNotifier.h index ce088ae..440a580 100644 --- a/FlippR-Driver/src/input/EventNotifier.h +++ b/FlippR-Driver/src/input/EventNotifier.h @@ -28,7 +28,7 @@ class EventNotifier : public IEventNotifier { public: - EventNotifier(); + EventNotifier(IBlockingQueue* queue); ~EventNotifier(); void register_event_handler(IEventHandler* handler); diff --git a/FlippR-Driver/src/input/InputDriverFactory.cpp b/FlippR-Driver/src/input/InputDriverFactory.cpp index b1a0451..58d6b5b 100644 --- a/FlippR-Driver/src/input/InputDriverFactory.cpp +++ b/FlippR-Driver/src/input/InputDriverFactory.cpp @@ -22,7 +22,9 @@ std::shared_ptr InputDriverFactory::get_InputDriver(std::istream& i { ConfigureLogger(); - std::shared_ptr event_notifier = std::make_shared(); + IBlockingQueue* event_queue = new BlockingQueue; + + std::shared_ptr event_notifier = std::make_shared(event_queue); std::unique_ptr input_gpio_interface = std::make_unique(input_config_stream); diff --git a/FlippR-Driver/tests/input/TestEventNotifier.cpp b/FlippR-Driver/tests/input/TestEventNotifier.cpp index 821f0a8..e7fb30c 100644 --- a/FlippR-Driver/tests/input/TestEventNotifier.cpp +++ b/FlippR-Driver/tests/input/TestEventNotifier.cpp @@ -29,7 +29,14 @@ SCENARIO("An EventNotifier gets created", "[construction]") WHEN("The EventNotifier gets created") { - EventNotifier notifier; + Event event(0, 0, "test"); + + Mock> queue_mock; + Fake(Method(queue_mock, push)); + When(Method(queue_mock, pop)).AlwaysDo([event](){return event;}); + Fake(Dtor(queue_mock)); + + EventNotifier notifier(&(queue_mock.get())); THEN("It sets the running variable to true") { REQUIRE(notifier.is_running); @@ -47,11 +54,18 @@ SCENARIO("An EventHandler gets [un]registered at the notifier", "[un-register no { LoggerFactory::CreateInputLogger(); + Event event(0, 0, "test"); + + Mock> queue_mock; + Fake(Method(queue_mock, push)); + When(Method(queue_mock, pop)).AlwaysDo([event](){return event;}); + Fake(Dtor(queue_mock)); + Mock event_handler_mock; Fake(Method(event_handler_mock, handle)); Fake(Dtor(event_handler_mock)); - EventNotifier notifier; + EventNotifier notifier(&(queue_mock.get())); WHEN("The EventHandler gets registered at the eventNotifier") { @@ -85,19 +99,19 @@ SCENARIO("An event should be distributed", "[distribute]") Event event(0, 0, "test"); Mock> queue_mock; - When(Method(queue_mock, push)).AlwaysReturn(); - When(Method(queue_mock, pop)).AlwaysDo([](){return Event(0,0,"mock");}); + Fake(Method(queue_mock, push)); + When(Method(queue_mock, pop)).AlwaysDo([event](){return event;}); Fake(Dtor(queue_mock)); - EventNotifier notifier; - - notifier.event_queue = &(queue_mock.get()); + EventNotifier notifier(&(queue_mock.get())); WHEN("The event comes in") { notifier.distribute_event(event); THEN("The event gets queued") { + notifier.is_running = false; +// REQUIRE((bool)Verify(Method(queue_mock, push))); REQUIRE((bool)Verify(Method(queue_mock, push).Using(event))); } } @@ -111,17 +125,18 @@ SCENARIO("The EventHandler gets notified") Event event(0, 0, "test"); Mock event_handler_mock; - When(Method(event_handler_mock, handle)).AlwaysDo([](Event e){std::cout << "called handle\n";}); + When(Method(event_handler_mock, handle)).AlwaysReturn(); Fake(Dtor(event_handler_mock)); Event test_event(0, 0, "test"); Mock> queue_mock; + Fake(Method(queue_mock, push)); When(Method(queue_mock, pop)).AlwaysDo([test_event](void){return test_event;}); Fake(Dtor(queue_mock)); - EventNotifier notifier; - notifier.event_queue = &(queue_mock.get()); + EventNotifier notifier(&(queue_mock.get())); + notifier.event_handlers.insert(&(event_handler_mock.get())); WHEN("The event gets queued")