From 494021d910616b1eeb11a18d468bd6dcf44d7d32 Mon Sep 17 00:00:00 2001 From: Neeflix Date: Wed, 8 Aug 2018 12:22:11 +0200 Subject: [PATCH] compilable version --- FlippR-Driver/src/input/ErrorEvent.hpp | 25 ++++++++ FlippR-Driver/src/input/InputDriver.cpp | 3 +- FlippR-Driver/src/utilities/config.h | 2 + FlippR-Driver/tests/input/TestDetector.cpp | 21 +++--- .../tests/input/TestEventNotifier.cpp | 3 +- FlippR-Driver/tests/input/TestInputDriver.cpp | 64 ++++++++++++++++++- 6 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 FlippR-Driver/src/input/ErrorEvent.hpp diff --git a/FlippR-Driver/src/input/ErrorEvent.hpp b/FlippR-Driver/src/input/ErrorEvent.hpp new file mode 100644 index 0000000..0588c3c --- /dev/null +++ b/FlippR-Driver/src/input/ErrorEvent.hpp @@ -0,0 +1,25 @@ +/* + * ErrorEvent.h + * + * Created on: Aug 8, 2018 + * Author: johannes + */ + +#ifndef SRC_INPUT_ERROREVENT_HPP_ +#define SRC_INPUT_ERROREVENT_HPP_ + +#include "Event.h" + +namespace Input +{ + +class ErrorEvent : public Event +{ +public: + ErrorEvent() : + Event(0, HIGHEST_INPUT_EVENT_PRIORITY, "ERROR") + {} +}; +} + +#endif /* SRC_INPUT_ERROREVENT_HPP_ */ diff --git a/FlippR-Driver/src/input/InputDriver.cpp b/FlippR-Driver/src/input/InputDriver.cpp index f6910eb..1e66546 100644 --- a/FlippR-Driver/src/input/InputDriver.cpp +++ b/FlippR-Driver/src/input/InputDriver.cpp @@ -4,6 +4,7 @@ * Created on: Jun 15, 2018 * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert, Rafael Vinci, Dr. Franca Rupprecht */ +#include #include "InputDriver.h" namespace Input @@ -29,7 +30,7 @@ void InputDriver::unregister_event_handler(IEventHandler* handler) std::shared_ptr InputDriver::get_event(std::string name) { - std::shared_ptr event; + std::shared_ptr event(new ErrorEvent()); try { event = this->events.at(name); diff --git a/FlippR-Driver/src/utilities/config.h b/FlippR-Driver/src/utilities/config.h index 9277ba9..324fa47 100644 --- a/FlippR-Driver/src/utilities/config.h +++ b/FlippR-Driver/src/utilities/config.h @@ -22,3 +22,5 @@ #define INPUT_SLEEP_DURATION_NANO 800 #define NUMBER_OF_DISPLAYS 5 + +#define HIGHEST_INPUT_EVENT_PRIORITY 0 diff --git a/FlippR-Driver/tests/input/TestDetector.cpp b/FlippR-Driver/tests/input/TestDetector.cpp index f43f3e9..e137ad2 100644 --- a/FlippR-Driver/tests/input/TestDetector.cpp +++ b/FlippR-Driver/tests/input/TestDetector.cpp @@ -41,7 +41,7 @@ SCENARIO("Creating a Detector object", "") Fake(Dtor(event_notifier_mock)); When(Method(event_notifier_mock, distribute_event)).AlwaysReturn(); - std::map events; + std::map> events; WHEN("Detector is created") { @@ -71,13 +71,14 @@ SCENARIO("There are events at the input", "") Event event1(1, '1', "event 1"); Event event2(2, '2', "event 2"); + auto event2ptr = std::make_shared(event2); Event event3(3, '3', "event 3"); - std::map events; + std::map> events; - events.insert(std::make_pair(1, event1)); - events.insert(std::make_pair(2, event2)); - events.insert(std::make_pair(3, event3)); + events.insert(std::make_pair(1, std::make_shared(event1))); + events.insert(std::make_pair(2, event2ptr)); + events.insert(std::make_pair(3, std::make_shared(event3))); WHEN("an event can be found at gpio interface") { @@ -87,7 +88,7 @@ SCENARIO("There are events at the input", "") { detector.is_running = false; std::this_thread::sleep_for(std::chrono::milliseconds(5)); - REQUIRE((bool)Verify(Method(event_notifier_mock, distribute_event).Using(event2))); + REQUIRE((bool)Verify(Method(event_notifier_mock, distribute_event).Using(event2ptr))); } } } @@ -112,11 +113,11 @@ SCENARIO("There are events at the input but no suitable event in map", "") Event event2(2, '2', "event 2"); Event event3(3, '3', "event 3"); - std::map events; + std::map> events; - events.insert(std::make_pair(1, event1)); - events.insert(std::make_pair(2, event2)); - events.insert(std::make_pair(3, event3)); + events.insert(std::make_pair(1, std::make_shared(event1))); + events.insert(std::make_pair(2, std::make_shared(event2))); + events.insert(std::make_pair(3, std::make_shared(event3))); WHEN("an event can be found at gpio interface") { diff --git a/FlippR-Driver/tests/input/TestEventNotifier.cpp b/FlippR-Driver/tests/input/TestEventNotifier.cpp index 9551463..3d80c64 100644 --- a/FlippR-Driver/tests/input/TestEventNotifier.cpp +++ b/FlippR-Driver/tests/input/TestEventNotifier.cpp @@ -97,6 +97,7 @@ SCENARIO("An event should be distributed", "[distribute]") GIVEN("An event") { Event event(0, 0, "test"); + auto event_ptr = std::make_shared(event); Mock> queue_mock; Fake(Method(queue_mock, push)); @@ -107,7 +108,7 @@ SCENARIO("An event should be distributed", "[distribute]") WHEN("The event comes in") { - notifier.distribute_event(event); + notifier.distribute_event(event_ptr); THEN("The event gets queued") { notifier.is_running = false; diff --git a/FlippR-Driver/tests/input/TestInputDriver.cpp b/FlippR-Driver/tests/input/TestInputDriver.cpp index 4d51482..8240d66 100644 --- a/FlippR-Driver/tests/input/TestInputDriver.cpp +++ b/FlippR-Driver/tests/input/TestInputDriver.cpp @@ -37,7 +37,9 @@ SCENARIO("An InputDriver gets created", "[construction}") WHEN("The InputDriver gets created") { std::shared_ptr event_notifier_ptr(&event_notifier_mock.get()); - InputDriver input_driver(event_notifier_ptr, std::unique_ptr(&detector_mock.get())); + std::map> events; + + InputDriver input_driver(event_notifier_ptr, std::unique_ptr(&detector_mock.get()), events); THEN("It saves the EventNotifier and the Detector") { @@ -67,7 +69,10 @@ SCENARIO("An EventHandler [un]registers at the driver", "[un-register]") Fake(Dtor(event_notifier_mock)); std::shared_ptr event_notifier_ptr(&event_notifier_mock.get()); - InputDriver input_driver(event_notifier_ptr, std::unique_ptr(&detector_mock.get())); + + std::map> events; + + InputDriver input_driver(event_notifier_ptr, std::unique_ptr(&detector_mock.get()), events); WHEN("The EventHandler registers at the driver") { @@ -92,3 +97,58 @@ SCENARIO("An EventHandler [un]registers at the driver", "[un-register]") } +SCENARIO("An Input Driver is created normally", "") +{ + GIVEN("An InputDriver, EventHandler and an EventNotifier and some events") + { + LoggerFactory::CreateInputTestLogger(); + + Mock detector_mock; + Fake(Dtor(detector_mock)); + + Mock event_handler_mock; + Fake(Dtor(event_handler_mock)); + + Mock event_notifier_mock; + Fake(Dtor(event_notifier_mock)); + + std::shared_ptr event_notifier_ptr(&event_notifier_mock.get()); + + Event event1('a', 2, "e1"); + auto event1_ptr = std::make_shared(event1 ); + Event event2('b', 1, "e2"); + Event event3('c', 2, "e3"); + Event event4('d', 1, "e4"); + + std::map> events; + events.emplace("e1", event1_ptr); + events.emplace("e2", std::make_shared(event2)); + events.emplace("e3", std::make_shared(event3)); + events.emplace("e4", std::make_shared(event4)); + + + InputDriver input_driver(event_notifier_ptr, std::unique_ptr(&detector_mock.get()), events); + + WHEN("Someone asks for an event that is registered") + { + auto event = input_driver.get_event("e1"); + + THEN("The obtained event should be the same as emplaced before") + { + REQUIRE(event==event1_ptr); + } + } + + WHEN("someone asks for an event that is not registered") + { + auto event = input_driver.get_event("no event"); + + THEN("the obtained event should be null") + { + REQUIRE(event->name == "ERROR"); + } + } + } +} + +