/* * TestDetector.cpp * * Created on: Jun 27, 2018 * Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert, Rafael Vinci, Dr. Franca Rupprecht */ #include "../catch.hpp" #include "../fakeit.hpp" #include #include #define private public #include "input/IEventNotifier.h" #include "input/Event.h" #include "input/Detector.h" #include "utilities/LoggerFactory.hpp" #include "utilities/InputGPIOInterface.h" using namespace fakeit; using namespace Input; SCENARIO("Creating a Detector object", "") { GIVEN("An IEventNofifier, three Events and an IInputGPIOInterface") { LoggerFactory::CreateInputLogger(); Mock event_notifier_mock; Mock gpio_interface_mock; Fake(Dtor(gpio_interface_mock)); When(Method(gpio_interface_mock, read_input_data)).AlwaysDo([](char c){return c==2;}); Fake(Dtor(event_notifier_mock)); When(Method(event_notifier_mock, distribute_event)).AlwaysReturn(); Event event1(1, '1', "event 1"); Event event2(2, '2', "event 2"); Event event3(3, '3', "event 3"); std::map events; events.insert(std::make_pair(1, event1)); events.insert(std::make_pair(2, event2)); events.insert(std::make_pair(3, event3)); WHEN("Detector is created") { Detector detector(&gpio_interface_mock.get(), events, &event_notifier_mock.get()); THEN("a thread should be created") { REQUIRE(typeid(detector.detect_thread).hash_code() == typeid(std::thread).hash_code()); } AND_WHEN("an event can be found at gpio interface") { THEN("only the fitting event should be distributed by event notifier") { REQUIRE((bool)Verify(Method(event_notifier_mock, distribute_event).Using(event2))); } } } } }