For my unit testing series I have designed the following szenario.
#pragma once class IWindowManager { public: virtual bool drawAt(unsigned startX, unsigned endX, unsigned startY, unsigned endY) = 0; }; class WindowManager : public IWindowManager { public: WindowManager(unsigned displaySizeX, unsigned displaySizeY); bool drawAt(unsigned startX, unsigned endX, unsigned startY, unsigned endY) override; private: unsigned m_displaySizeX; unsigned m_displaySizeY; };
#include "WindowManager.hpp" WindowManager::WindowManager(unsigned displaySizeX, unsigned displaySizeY) : m_displaySizeX(displaySizeX), m_displaySizeY(displaySizeY) {} bool WindowManager::drawAt(unsigned startX, unsigned endX, unsigned startY, unsigned endY) { bool ret = true; if (startX >= endX || endX > m_displaySizeX || startY >= endY || endY > m_displaySizeY) ret = false; // ... return ret; }
#pragma once #include <memory> class IWindowManager; class UserInterface { public: UserInterface(std::shared_ptr<IWindowManager> windowMgr); bool loadWindow(unsigned startX, unsigned endX, unsigned startY, unsigned endY); private: std::shared_ptr<IWindowManager> m_windowMgr; };
#include "UserInterface.hpp" #include "WindowManager.hpp" UserInterface::UserInterface(std::shared_ptr<IWindowManager> windowMgr) : m_windowMgr(windowMgr) {} bool UserInterface::loadWindow(unsigned startX, unsigned endX, unsigned startY, unsigned endY) { return m_windowMgr->drawAt(startX, endX, startY, endY); }
#include "WindowManager.hpp" #include "UserInterface.hpp" #include <memory> int main() { std::shared_ptr<IWindowManager> windowMgr(new WindowManager(1280, 1024)); std::unique_ptr<UserInterface> userInter(new UserInterface(windowMgr)); userInter->loadWindow(0, 1280, 0, 1024); // ... return 0; }