/*
 * TestDisplayController.cpp
 *
 *  Created on: Aug 7, 2018
 *      Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert
 */

#include <vector>
#include <memory>

#include "catch.hpp"
#include "fakeit.hpp"

#include "utility/LoggerFactory.h"

#include "output/DisplayController.h"
#include "output/items/OutputDisplay.h"
#include "output/DisplayBoardPinController.h"
#include "output/DisplayController.h"


// testing purposes
#define private public

using namespace flippR_driver::output;
using namespace fakeit;
using namespace flippR_driver::utility;

SCENARIO("A display controller gets created", "")
{
  GIVEN("A set of displays and a pin controller")
  {
//    LoggerFactory::CreateInputTestLogger();
//
//    std::vector<std::shared_ptr<items::OutputDisplay>> output_diplays;
//    for(int i = 0; i < 3; i++)
//    {
//      Mock<items::OutputDisplay> display_mock;
//      Fake(Dtor(display_mock));
//      output_diplays.push_back(std::make_shared<items::OutputDisplay>(display_mock));
//    }
//
//    Mock<DisplayBoardPinController> display_board_pin_controller_mock;
//    Fake(Dtor(display_board_pin_controller_mock));
//
//    When(Method(display_board_pin_controller_mock, write_display)).AlwaysReturn();
//    When(Method(display_board_pin_controller_mock, activate_displays)).AlwaysReturn();
//    When(Method(display_board_pin_controller_mock, deactivate_displays)).AlwaysReturn();

    WHEN("The DisplayController is created")
    {
//      detail::DisplayController controller(output_diplays, std::make_unique<DisplayBoardPinController>(display_board_pin_controller_mock));

      THEN("All Displays should be activated")
      {
//        REQUIRE(display_board_pin_controller_mock.)
//      ToDo: to be continued!
      }
    }
  }
}
